Могу ли я симулировать медленный жесткий диск?


19

Я догадываюсь, что некоторая периодически возникающая ошибка может проявиться только при низкой скорости чтения с диска. Устранение неполадок сложно, потому что я не могу надежно воспроизвести его.

Если не считать простое поглощение ввода-вывода с высокоприоритетным процессом, есть ли способ для меня имитировать медленный жесткий диск?


Я помню, как видел команду, чтобы жесткие диски работали на определенных скоростях шины. Я посмотрю, смогу ли я выкопать это.
Джереми

man hdparmвзгляните на опцию -X, может быть? Там есть довольно много вещей, которые вы могли бы использовать, чтобы замедлить ваш диск, но некоторые из них рискуют сделать неприятные вещи с данными!
Джереми

Кроме того, попробуйте смонтировать сетевой ресурс в виде папки (Google - ваш друг), возможно, даже через Wi-Fi, если это возможно.
Джереми

1
Это не прямой ответ, но: если бы у меня была такая непостоянная ошибка, я, вероятно, попытался бы запустить процесс под Valgrind (если бы он был на скомпилированном языке), потому что это, вероятно, захватывало бы условия гонки IO.
пул

1
Вы говорите об ошибке в приложении, ядре или драйвере устройства? Или ты вообще не знаешь? Это может помочь, если вы объясните больше.
пул

Ответы:


15

Используйте nbd , Сетевое блочное устройство, а затем ограничьте скорость доступа к нему, используя, скажем trickle.

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

+1 за довольно крутое решение. тем не менее, это не настоящий тест, потому что вы не обращаетесь к реальному драйверу жесткого диска, в котором может быть проблема.
Дворник Unix

1
Я не думал, что он говорил об ошибке водителя, но это было только предположение. Посмотрим.
пул

10
Можно ли добавить фактическую команду к этому ответу? На данный момент вы только показываете, как установить необходимые инструменты :)
Rich

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

Это замедлит тебя :)

Это заставит вас читать с диска, а не использовать кэшированную страницу.

Если вы действительно хотите получить изощренную информацию, вы можете сделать что-то вроде фальсификации ошибки чтения каждый раз, используя среду внедрения ошибок scsi.

http://scsifaultinjtst.sourceforge.net/


1
Примечание. Это приведет к сбросу кэша только один раз. Затем он немедленно начнет кэширование снова. Вы могли бы хотеть обернуть это в петле.
Андробин

@ Андробин, мне нравится эта идея. Вы можете даже добавить интервал сна в цикл. Благодарность!
ppetraki

4

Есть USB 1.1 хаб? Или медленная SD-карта? Они снизят скорость до 10 Мбит / с.


хороший ... не достаточно технический для +1, но хороший
RobotHumans

3

Это ни в коем случае не полное решение, но оно может помочь в сочетании с другими мерами: есть планировщик ввода-вывода, очень похожий на планировщик процессов, и его можно настроить.

В частности, вы можете выбирать между различными планировщиками:

~# 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 может помочь вам получить более сильно воспроизводимые результаты.

noopКак следует из названия, он безумно глуп и позволит вам без особых усилий разрушить работу системы ввода-вывода.

anticipatoryи cfqоба пытаются быть умными об этом, хотя, cfqкак правило, умнее обоих. (Насколько я помню, anticipatoryэто на самом деле унаследованный планировщик с того момента, когда ядро ​​начало поддерживать несколько планировщиков.)



2

Вы можете попробовать запустить копию большого файла, такого как ISO-образ установочного диска Ubuntu, и запустить его дважды. Это должно немного замедлить ваш диск.


Как говорится в вопросе, «если не
считать

2

Помимо попыток замедлить работу самого жесткого диска, вы можете попробовать использовать инструменты для тестирования производительности файловой системы, такие как bonnie ++, которые могут вызвать значительный дисковый ввод-вывод.

sudo apt-get install bonnie++

1
Как говорится в вопросе, «если не
считать

0

как насчет make -j64? в статьях, описывающих этот новый патч производительности 200line, make -j64была задача, потребляющая много компьютерных ресурсов


2
Вы должны объяснить, что на самом деле делает эта команда.
Папукайя

Как говорится в вопросе, «если не
считать

0

Почему бы не запустить iotopи посмотреть, не вызывает ли процесс, который вы пытаетесь отладить, много операций чтения / записи на диск?


3
Я думаю, что этот ответ считается бесполезным, потому что сам факт того, что процесс выполняет много операций ввода-вывода, может быть уже известен или не является проблемой сам по себе. Проблема в том, что в обработке этих операций ввода-вывода есть какая-то ошибка, связанная с синхронизацией.
пул

0

Я недавно выяснил настройку, где я

  • перенес каталог на мой гугл диск
  • смонтировал его через супер-медленный клиент google-drive-ocamlfuse
  • создал символическую ссылку с оригинального пути на новый

Если задержка 16 секунд не достаточно медленная, вы можете просто отключить маршрутизатор.

Для справки вот исходный вариант использования, где я получил идею для этого: https://github.com/goavki/apertium-apy/pull/76#issuecomment-355007128

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.