Puis-je simuler un disque dur lent?

19

J'ai le pressentiment qu'un certain bug intermittent ne peut se manifester qu'en cas de vitesse de lecture lente du disque. Le dépannage est difficile car je ne peux pas le reproduire de manière fiable.

À moins de simplement engloutir les E / S avec un processus de haute priorité, existe-t-il un moyen pour moi de simuler un disque dur lent?

ændrük
la source
Je me souviens avoir vu une commande pour dire aux disques durs de fonctionner à certaines vitesses de bus. Je vais voir si je peux le creuser.
Jeremy
man hdparmjetez un oeil à l'option -X peut-être? Il y a pas mal de choses que vous pourriez utiliser pour ralentir votre lecteur, mais certaines d'entre elles risquent de faire des choses désagréables aux données!
Jeremy
Essayez également de monter un partage réseau en tant que dossier (Google est votre ami), peut-être même par Wi-Fi, si cela est plausible.
Jeremy
1
Ce n'est pas une réponse directe, mais: si j'avais un bug intermittent comme celui-ci, j'essaierais probablement d'exécuter le processus sous Valgrind (s'il était dans un langage compilé), car cela capturerait probablement les conditions de course des E / S.
poolie
1
Parlez-vous d'un bug dans une application, ou le noyau, ou un pilote de périphérique? Ou tu ne sais pas du tout? Cela pourrait aider si vous expliquiez plus.
poolie

Réponses:

15

Utilisez nbd , le périphérique de blocage réseau, puis limitez l'accès à celui-ci à l'aide de say trickle.

sudo apt-get install nbd-client nbd-server trickle
poolie
la source
+1 pour une solution plutôt cool. cependant, ce n'est pas un vrai test parce que vous n'allez pas au vrai pilote de périphérique de disque dur, où le problème peut se trouver.
The Unix Janitor
1
Je ne pensais pas qu'il parlait d'un bug de pilote, mais c'était juste une supposition. Voyons voir.
poolie du
10
Est-il possible d'ajouter la commande réelle à cette réponse? Pour le moment, vous ne montrez que comment installer les outils requis :)
Rich
5
# echo 1> / proc / sys / vm / drop_caches

Ça va vous ralentir :)

Cela vous obligera à lire à partir du disque, au lieu de profiter de la page mise en cache.

Si vous vouliez vraiment devenir sophistiqué, vous pourriez faire quelque chose comme une fausse erreur de lecture à chaque fois en utilisant le framework d'injection de défauts scsi.

http://scsifaultinjtst.sourceforge.net/

ppetraki
la source
1
Remarque: cela ne supprimera les caches qu'une seule fois. Ensuite, il recommencera immédiatement la mise en cache. Vous voudrez peut-être envelopper cela en boucle.
Androbin
@Androbin J'aime cette idée. Vous pouvez même ajouter un intervalle de sommeil à la boucle. Merci!
ppetraki
4

Vous avez un concentrateur USB 1.1? Ou une carte SD lente? Ils vous feront descendre à moins de 10 Mbps.

Oli
la source
sympa ... pas assez technique pour le +1 mais sympa
RobotHumans
3

Ce n'est en aucun cas une solution complète, mais cela peut aider en conjonction avec d'autres mesures: il existe un planificateur d'E / S un peu comme un planificateur de processus, et il peut être modifié.

Plus particulièrement, vous pouvez réellement choisir parmi différents planificateurs:

~# cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq] 
~# echo "deadline" > /sys/block/sda/queue/scheduler
~# cat /sys/block/sda/queue/scheduler 
noop anticipatory [deadline] cfq 
~# 

deadline peut vous aider à obtenir des résultats plus reproductibles.

noop, comme son nom l'indique, est incroyablement stupide et vous permettra de faire des ravages absolus sur les performances d'E / S avec peu d'effort.

anticipatoryet les cfqdeux essaient d'être intelligents, bien que ce cfqsoit généralement le plus intelligent des deux. (Si je me souviens bien, anticipatoryc'est en fait le planificateur hérité juste avant que le noyau ne commence à prendre en charge plusieurs planificateurs.)

Nicholas Knight
la source
2

Vous pouvez essayer d'exécuter une copie d'un fichier volumineux, comme une iso du CD d'installation d'Ubuntu, et l'exécuter deux fois. Cela devrait ralentir un peu votre lecteur.

RolandiXor
la source
Comme la question le dit, "à court de simplement avaler IO" ....
poolie
2

En plus d'essayer de ralentir le disque dur lui-même, vous pouvez essayer d'utiliser des outils d'analyse comparative de systèmes de fichiers tels que bonnie ++ qui peuvent provoquer beaucoup d'E / S disque.

sudo apt-get install bonnie++
ajmitch
la source
1
Comme la question le dit, "à court de simplement avaler IO" ....
poolie
0

que diriez-vous make -j64? dans des articles décrivant ce nouveau patch de performance 200 lignes, make -j64était une tâche qui consommait beaucoup de ressources informatiques

Pawełkowy
la source
2
Vous devez expliquer ce que fait réellement cette commande.
papukaija
Comme la question le dit, "à court de simplement avaler IO" ....
poolie
0

Pourquoi ne pas exécuter iotopet voir si le processus que vous essayez de déboguer provoque de nombreuses lectures / écritures sur le disque?

Le concierge Unix
la source
3
Je pense que cette réponse est considérée comme inutile car le simple fait que le processus fait beaucoup d'E / S peut être déjà connu, ou pas un problème en soi. Le problème est qu'il existe une sorte de bogue lié au timing dans la façon dont il gère ces E / S.
poolie
0

J'ai récemment trouvé une configuration où j'ai

  • déplacé le répertoire vers mon Google Drive
  • monté via le client super-duper-slow google-drive-ocamlfuse
  • créé un lien symbolique du chemin d'origine vers le nouveau

Si la latence de 16 secondes n'est pas assez lente, vous pouvez simplement débrancher votre routeur.

Pour référence, voici le cas d'utilisation d'origine, où j'ai eu l'idée de cela: https://github.com/goavki/apertium-apy/pull/76#issuecomment-355007128

Androbin
la source