Posso simulare un disco rigido lento?


19

Ho la sensazione che un certo bug intermittente possa manifestarsi solo quando la velocità di lettura del disco è lenta. La risoluzione dei problemi è difficile perché non riesco a riprodurla in modo affidabile.

A parte semplicemente inghiottire IO con un processo ad alta priorità, c'è un modo per simulare di avere un disco rigido lento?


Ricordo di aver visto un comando per dire ai dischi rigidi di funzionare a determinate velocità del bus. Vedrò se riesco a scavare.
Jeremy,

man hdparmdai un'occhiata all'opzione -X forse? Ci sono alcune cose lì dentro che potresti usare per rallentare il tuo disco, ma alcune rischiano di fare cose cattive ai dati!
Jeremy,

Inoltre, prova a montare una condivisione di rete come cartella (google è tuo amico), magari anche tramite wifi, se ciò è plausibile.
Jeremy,

1
Questa non è una risposta diretta, ma: se avessi un bug intermittente come questo, probabilmente proverei a eseguire il processo sotto Valgrind (se fosse in un linguaggio compilato), perché probabilmente catturerebbe le condizioni di gara IO.
poolie,

1
Stai parlando di un bug in un'applicazione, nel kernel o in un driver di dispositivo? O non lo sai affatto? Potrebbe essere utile se hai spiegato di più.
poolie

Risposte:


15

Usa nbd , il Network Block Device, e quindi limita l'accesso ad esso usando dire trickle.

sudo apt-get install nbd-client nbd-server trickle

+1 per una soluzione davvero interessante. tuttavia, non è un vero test perché non si sta andando al vero driver del dispositivo del disco rigido, dove potrebbe trovarsi il problema.
The Unix Janitor

1
Non pensavo che stesse parlando di un bug del driver, ma era solo un presupposto. Vediamo.
poolie

10
È possibile aggiungere il comando effettivo a questa risposta? Al momento mostri solo come installare gli strumenti richiesti :)
Rich

5
# echo 1> / proc / sys / vm / drop_caches

Questo ti rallenterà :)

Ti costringerà a leggere dal disco, invece di sfruttare la pagina memorizzata nella cache.

Se volessi davvero diventare sofisticato, potresti fare qualcosa di simile a un errore di lettura ogni ennesima volta usando il framework di iniezione degli errori scsi.

http://scsifaultinjtst.sourceforge.net/


1
Nota: questo lascerà cadere le cache una sola volta. Quindi riprenderà immediatamente la memorizzazione nella cache. Potresti volerlo avvolgere in un ciclo.
Androbin,

@Androbin Mi piace quell'idea. È anche possibile aggiungere un intervallo di sospensione al loop. Grazie!
ppetraki,

4

Hai un hub USB 1.1? O una scheda SD lenta? Ti porteranno a meno di 10 Mbps.


bello ... non abbastanza tecnico per il +1 ma bello
RobotHumans il

3

Questa non è affatto una soluzione completa, ma può essere utile in combinazione con altre misure: esiste uno scheduler I / O molto simile a uno scheduler di processo e può essere modificato.

In particolare, puoi effettivamente scegliere tra diversi programmatori:

~# 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 può aiutarti a ottenere risultati più riproducibili.

noop, come suggerisce il nome, è follemente stupido e ti permetterà di rovinare il caos assoluto sulle prestazioni di I / O con poco sforzo.

anticipatoryed cfqentrambi cercano di essere furbi, sebbene cfqsia generalmente il più intelligente dei due. (Come ricordo, in anticipatoryrealtà è lo scheduler legacy proprio prima che il kernel iniziasse a supportare più programmatori.)



2

Potresti provare a eseguire una copia di un file di grandi dimensioni, ad esempio un iso del cd di installazione di Ubuntu, ed eseguirlo due volte. Ciò dovrebbe rallentare un po 'il disco.


Come dice la domanda, "A corto di inghiottire semplicemente IO" ....
Poolie,

2

Oltre a provare a rallentare il disco rigido stesso, è possibile provare a utilizzare strumenti di benchmarking del filesystem come bonnie ++ che possono causare una grande quantità di I / O su disco.

sudo apt-get install bonnie++

1
Come dice la domanda, "A corto di inghiottire semplicemente IO" ....
Poolie,

0

che ne dici make -j64? in articoli che descrivono quella nuova patch di prestazioni 200line, make -j64era un compito che consumava molte risorse del computer


2
Dovresti spiegare cosa fa effettivamente quel comando.
papukaija,

Come dice la domanda, "A corto di inghiottire semplicemente IO" ....
Poolie,

0

Perché non eseguire iotope vedere se il processo che si sta tentando di eseguire il debug sta causando molte letture / scritture del disco?


3
Penso che questa risposta sia considerata inutile perché il semplice fatto che il processo stia eseguendo molte operazioni di IO potrebbe essere già noto o non essere un problema in sé. Il problema è che esiste un qualche tipo di bug relativo al timing nel modo in cui gestisce questi IO.
poolie,

0

Recentemente ho capito un setup dove l'ho fatto

  • spostato la directory sul mio Google Drive
  • montato tramite il client super-duper-lento google-drive-ocamlfuse
  • creato un collegamento simbolico dal percorso originale a quello nuovo

Se latenza di 16 secondi non è abbastanza lenta, puoi semplicemente scollegare il router.

Per riferimento, ecco il caso d'uso originale, dove ho avuto l'idea per questo: https://github.com/goavki/apertium-apy/pull/76#issuecomment-355007128

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.