¿Puedo simular un disco duro lento?

19

Tengo el presentimiento de que un cierto error intermitente solo puede manifestarse cuando hay una velocidad de lectura de disco lenta. La resolución de problemas es difícil porque no puedo reproducirlo de manera confiable.

Además de engullir IO con un proceso de alta prioridad, ¿hay alguna forma de simular que tengo un disco duro lento?

ændrük
fuente
Recuerdo haber visto un comando para decirle a los discos duros que corran a ciertas velocidades de autobús. Veré si puedo desenterrarlo.
Jeremy
man hdparmecha un vistazo a la opción -X tal vez? Hay bastantes cosas allí que podría usar para reducir la velocidad de su unidad, ¡pero algunas corren el riesgo de dañar las cosas!
Jeremy
Además, intente montar un recurso compartido de red como una carpeta (google es su amigo), tal vez incluso a través de wifi, si eso es plausible.
Jeremy
1
Esta no es una respuesta directa, pero: si tuviera un error intermitente como este, probablemente intentaría ejecutar el proceso en Valgrind (si estuviera en un lenguaje compilado), porque probablemente capturaría las condiciones de carrera de IO.
Poolie
1
¿Estás hablando de un error en una aplicación, o el núcleo, o un controlador de dispositivo? ¿O no sabes nada? Podría ayudar si explicaras más.
Poolie

Respuestas:

15

Use nbd , el dispositivo de bloqueo de red, y luego limite el acceso al límite usando say trickle.

sudo apt-get install nbd-client nbd-server trickle
billar
fuente
+1 para una solución genial. sin embargo, no es una prueba real porque no va al controlador del dispositivo de disco duro real, que puede ser el problema.
El conserje de Unix
1
No pensé que estaba hablando de un error del conductor, pero eso era solo una suposición. Veamos.
Poolie
10
¿Es posible agregar el comando real a esta respuesta? Por el momento solo muestra cómo instalar las herramientas requeridas :)
Rich
5
# echo 1> / proc / sys / vm / drop_caches

Eso te retrasará :)

Te obligará a leer desde el disco, en lugar de aprovechar la página en caché.

Si realmente quisiera ser sofisticado, podría hacer algo como falsificar un error de lectura cada enésima vez utilizando el marco de inyección de fallas scsi.

http://scsifaultinjtst.sourceforge.net/

ppetraki
fuente
1
Nota: Esto solo eliminará los cachés una vez. Luego comenzará a almacenar en caché de inmediato. Es posible que desee envolver eso en un bucle.
Androbin
@Androbin Me gusta esa idea. Incluso podría agregar un intervalo de suspensión al ciclo. ¡Gracias!
ppetraki
4

¿Tiene un concentrador USB 1.1? O una tarjeta SD lenta? Te llevarán a menos de 10mbps.

Oli
fuente
agradable ... no lo suficientemente técnico para el +1 pero agradable
RobotHumans
3

De ninguna manera es una solución completa, pero puede ayudar junto con otras medidas: hay un planificador de E / S muy similar a un planificador de procesos, y puede ajustarse.

En particular, puede elegir entre diferentes planificadores:

~# 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 puede ayudarlo a obtener resultados más reproducibles.

noop, como su nombre lo indica, es increíblemente tonto y le permitirá causar estragos en el rendimiento de E / S con poco esfuerzo.

anticipatoryy cfqambos intentan ser inteligentes al respecto, aunque cfqgeneralmente es el más inteligente de los dos. (Como recuerdo, en anticipatoryrealidad es el planificador heredado justo antes de que el núcleo comenzara a admitir múltiples planificadores).

Nicholas Knight
fuente
2

Puede intentar ejecutar una copia de un archivo grande, como un iso del CD de instalación de Ubuntu, y ejecutarlo dos veces. Eso debería ralentizar tu disco un poco.

RolandiXor
fuente
Como dice la pregunta, "Corto de simplemente engullir IO" ....
poolie
2

Además de intentar ralentizar el disco duro en sí, podría intentar usar herramientas de evaluación comparativa del sistema de archivos como bonnie ++, que pueden causar una gran cantidad de E / S de disco.

sudo apt-get install bonnie++
ajmitch
fuente
1
Como dice la pregunta, "Corto de simplemente engullir IO" ....
poolie
0

¿qué tal make -j64? en artículos que describían que el nuevo parche de rendimiento de 200 líneas make -j64era una tarea que consumía muchos recursos informáticos

Pawełkowy
fuente
2
Deberías explicar qué hace realmente ese comando.
papukaija
Como dice la pregunta, "Corto de simplemente engullir IO" ....
poolie
0

¿Por qué no ejecutar iotopy ver si el proceso que está intentando depurar está causando muchas lecturas / escrituras de disco?

El conserje de Unix
fuente
3
Creo que esta respuesta se considera inútil porque el simple hecho de que el proceso está haciendo muchas IO puede ser ya conocido, o no es un problema en sí mismo. El problema es que hay algún tipo de error relacionado con el tiempo en la forma en que maneja esas E / S.
Poolie
0

Recientemente he descubierto una configuración donde he

  • moví el directorio a mi Google Drive
  • lo montó a través del cliente súper lento google-drive-ocamlfuse
  • creó un enlace simbólico desde la ruta original a la nueva

Si la latencia de 16 segundos no es lo suficientemente lenta, simplemente puede desconectar su enrutador.

Como referencia, aquí está el caso de uso original, donde se me ocurrió la idea: https://github.com/goavki/apertium-apy/pull/76#issuecomment-355007128

Androbin
fuente