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

19

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

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

ændrük
источник
Я помню, как видел команду, чтобы жесткие диски работали на определенных скоростях шины. Я посмотрю, смогу ли я выкопать это.
Джереми
man hdparmвзгляните на опцию -X, может быть? Там есть довольно много вещей, которые вы могли бы использовать, чтобы замедлить ваш диск, но некоторые из них рискуют сделать неприятные вещи с данными!
Джереми
Кроме того, попробуйте смонтировать сетевой ресурс в виде папки (Google - ваш друг), возможно, даже через Wi-Fi, если это возможно.
Джереми
1
Это не прямой ответ, но: если бы у меня была такая непостоянная ошибка, я, вероятно, попытался бы запустить процесс под Valgrind (если бы он был на скомпилированном языке), потому что это, вероятно, захватывало бы условия гонки IO.
пул
1
Вы говорите об ошибке в приложении, ядре или драйвере устройства? Или ты вообще не знаешь? Это может помочь, если вы объясните больше.
пул

Ответы:

15

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

sudo apt-get install nbd-client nbd-server trickle
poolie
источник
+1 за довольно крутое решение. тем не менее, это не настоящий тест, потому что вы не обращаетесь к реальному драйверу жесткого диска, в котором может быть проблема.
Дворник Unix
1
Я не думал, что он говорил об ошибке водителя, но это было только предположение. Посмотрим.
пул
10
Можно ли добавить фактическую команду к этому ответу? На данный момент вы только показываете, как установить необходимые инструменты :)
Rich
5
# echo 1> / proc / sys / vm / drop_caches

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

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

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

http://scsifaultinjtst.sourceforge.net/

ppetraki
источник
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это на самом деле унаследованный планировщик с того момента, когда ядро ​​начало поддерживать несколько планировщиков.)

Николас Найт
источник
3

Вы можете использовать виртуальную машину и доступ к дроссельной заслонке ... вот несколько советов о том, как это сделать в Virtualbox 5.8. Ограничение пропускной способности для образов дисков https://www.virtualbox.org/manual/ch05.html#storage-bandwidth-limit

Ади Ройбан
источник
2

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

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

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

sudo apt-get install bonnie++
ajmitch
источник
1
Как говорится в вопросе, «если не
считать
0

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

Pawełkowy
источник
2
Вы должны объяснить, что на самом деле делает эта команда.
Папукайя
Как говорится в вопросе, «если не
считать
0

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

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

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

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

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

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

Androbin
источник