Kann ich eine langsame Festplatte simulieren?

19

Ich habe die Vermutung, dass ein bestimmter zeitweiliger Fehler nur dann auftritt, wenn eine langsame Lesegeschwindigkeit vorliegt. Die Fehlerbehebung ist schwierig, da ich sie nicht zuverlässig reproduzieren kann.

Gibt es für mich eine Möglichkeit zu simulieren, dass ich eine langsame Festplatte habe, ohne IO einfach mit einem Prozess mit hoher Priorität zu verschlingen?

ændrük
quelle
Ich erinnere mich, dass ich einen Befehl sah, der Festplatten anweist, mit bestimmten Busgeschwindigkeiten zu arbeiten. Ich werde sehen, ob ich es ausgraben kann.
Jeremy
man hdparmVielleicht einen Blick auf die Option -X werfen? Es gibt eine ganze Reihe von Dingen, mit denen Sie Ihre Festplatte verlangsamen könnten, aber einige riskieren, die Daten zu beschädigen!
Jeremy
Versuchen Sie auch, eine Netzwerkfreigabe als Ordner bereitzustellen (Google ist Ihr Freund), möglicherweise sogar über WLAN, wenn dies plausibel ist.
Jeremy
1
Dies ist keine direkte Antwort, aber: Wenn ich einen solchen zeitweiligen Fehler hätte, würde ich wahrscheinlich versuchen, den Prozess unter Valgrind auszuführen (wenn er in einer kompilierten Sprache vorliegt), da dies wahrscheinlich die Bedingungen für E / A-Rennen erfassen würde.
Poolie
1
Sprechen Sie von einem Fehler in einer Anwendung, dem Kernel oder einem Gerätetreiber? Oder wissen Sie es gar nicht? Es könnte helfen, wenn Sie mehr erklären.
Poolie

Antworten:

15

Verwenden Sie nbd , das Netzwerkblockiergerät, und beschränken Sie den Zugriff mit say trickle.

sudo apt-get install nbd-client nbd-server trickle
Poolie
quelle
+1 für eine ziemlich coole Lösung. Dies ist jedoch kein echter Test, da Sie nicht zum echten Festplatten-Gerätetreiber wechseln, an dem das Problem möglicherweise liegt.
Der Unix-Hausmeister
1
Ich dachte nicht, dass er von einem Treiberfehler sprach, aber das war nur eine Vermutung. Wir werden sehen.
Poolie
10
Ist es möglich, den tatsächlichen Befehl zu dieser Antwort hinzuzufügen? Im Moment zeigen Sie nur, wie man die benötigten Tools installiert :)
Rich
5
# echo 1> / proc / sys / vm / drop_caches

Das wird dich verlangsamen :)

Sie werden gezwungen, von der Festplatte zu lesen, anstatt die zwischengespeicherte Seite zu nutzen.

Wenn Sie sich wirklich weiterentwickeln möchten, können Sie mit dem scsi fault injection framework jedes n-te Mal so etwas wie einen Lesefehler vortäuschen.

http://scsifaultinjtst.sourceforge.net/

ppetraki
quelle
1
Hinweis: Dadurch werden die Caches nur einmal gelöscht. Dann beginnt es sofort wieder mit dem Caching. Vielleicht möchten Sie das in eine Schleife wickeln.
Androbin
@Androbin Diese Idee gefällt mir. Sie können der Schleife sogar ein Ruheintervall hinzufügen. Vielen Dank!
ppetraki
4

Haben Sie einen USB 1.1-Hub? Oder eine langsame SD-Karte? Sie bringen Sie auf unter 10 MBit / s.

Oli
quelle
nett ... nicht technisch genug für die +1, aber nett
RobotHumans
3

Dies ist keine vollständige Lösung, kann jedoch in Verbindung mit anderen Maßnahmen hilfreich sein: Es gibt einen E / A-Scheduler, der einem Prozess-Scheduler ähnelt, und der kann optimiert werden.

Vor allem können Sie zwischen verschiedenen Schedulern wählen:

~# 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 kann Ihnen dabei helfen, besser reproduzierbare Ergebnisse zu erzielen.

noopWie der Name schon sagt, ist es wahnsinnig dumm und ermöglicht es Ihnen, mit geringem Aufwand die E / A-Leistung zu ruinieren.

anticipatoryund cfqbeide versuchen klug zu sein, obwohl cfqes im Allgemeinen klüger ist. (Soweit ich mich erinnere, anticipatoryhandelt es sich tatsächlich um den Legacy-Scheduler von direkt vor dem Start des Kernels, der mehrere Scheduler unterstützt.)

Nicholas Knight
quelle
2

Sie können versuchen, eine Kopie einer großen Datei, z. B. eine ISO-Datei der Ubuntu-Installations-CD, auszuführen, und diese zweimal ausführen. Das sollte Ihre Fahrt etwas verlangsamen.

RolandiXor
quelle
Wie die Frage sagt, "Kurz von einfach Verschlingen IO" ....
Poolie
2

Abgesehen davon, dass Sie versuchen, die Festplatte selbst zu verlangsamen, können Sie auch Dateisystem-Benchmarking-Tools wie bonnie ++ verwenden, die eine Menge Festplatten-E / A verursachen können.

sudo apt-get install bonnie++
Ajmitch
quelle
1
Wie die Frage sagt, "Kurz von einfach Verschlingen IO" ....
Poolie
0

wie wäre es make -j64? In Artikeln, in denen dieser neue 200-Zeilen-Performance-Patch beschrieben wurde, make -j64wurde eine Menge Computerressourcen verbraucht

Pawełkowy
quelle
2
Sie sollten erklären, was dieser Befehl tatsächlich bewirkt.
Papukaija
Wie die Frage sagt, "Kurz von einfach Verschlingen IO" ....
Poolie
0

Warum nicht ausführen iotopund feststellen, ob der Prozess, den Sie debuggen möchten, viele Lese- / Schreibvorgänge auf der Festplatte verursacht?

Der Unix-Hausmeister
quelle
3
Ich denke, diese Antwort wird als nicht hilfreich angesehen, da die bloße Tatsache, dass der Prozess viele E / A-Vorgänge ausführt, möglicherweise bereits bekannt ist oder an sich kein Problem darstellt. Das Problem ist, dass es in der Art und Weise, wie mit diesen E / A umgegangen wird, eine Art zeitbezogenen Fehler gibt.
Poolie
0

Ich habe vor kurzem ein Setup herausgefunden, wo ich habe

  • hat das Verzeichnis in mein Google Drive verschoben
  • habe es über den Super-Duper-Slow-Client gemountet google-drive-ocamlfuse
  • hat einen Symlink vom ursprünglichen zum neuen Pfad erstellt

Wenn die Latenz von 16 Sekunden nicht langsam genug ist, können Sie einfach den Router ausstecken.

Als Referenz dient hier der ursprüngliche Anwendungsfall, bei dem mir die Idee dazu gekommen ist: https://github.com/goavki/apertium-apy/pull/76#issuecomment-355007128

Androbin
quelle