Вопрос Как проверить производительность жесткого диска


Как проверить производительность жесткого диска (либо через терминал, либо через графический интерфейс). Скорость записи. Скорость чтения. Размер и скорость кеша. Случайная скорость.


261
2017-12-12 00:22


происхождения


Аналогичный вопрос был задан unix.stackexchange.com/questions/108838/... , stackoverflow.com/questions/1198691/... а также serverfault.com/questions/219739/... , - Anon


ответы:


Терминальный метод

hdparm это хорошее место для начала.

sudo hdparm -Tt /dev/sda

/dev/sda:
Timing cached reads:   12540 MB in  2.00 seconds = 6277.67 MB/sec
Timing buffered disk reads: 234 MB in  3.00 seconds =  77.98 MB/sec

sudo hdparm -v /dev/sda также предоставит информацию.

dd предоставит вам информацию о скорости записи.

Если на диске нет файловой системы (и только затем), используйте of=/dev/sda,

В противном случае смонтируйте его / tmp и напишите, затем удалите тестовый выходной файл.

dd if=/dev/zero of=/tmp/output bs=8k count=10k; rm -f /tmp/output

10240+0 records in
10240+0 records out
83886080 bytes (84 MB) copied, 1.08009 s, 77.7 MB/s

Графический метод

  1. Перейдите в раздел Система -> Администрирование -> Дисковая утилита.
    • Кроме того, запустите утилиту диска Gnome из командной строки, запустив gnome-disks
  2. Выберите жесткий диск на левой панели.
  3. Теперь нажмите «Benchmark - Measure Drive Performance» на правой панели.
  4. Открывается новое окно с диаграммами. Вы найдете две кнопки. Один из них - «Начать чтение только Benchmark», а другой - «Начать чтение / запись Benchmark». Когда вы нажмете на любую кнопку, он начнет бенчмаркинг жесткого диска.

test

Как тестировать диск ввода / вывода

Статья

Есть что-то еще, чего вы хотите?


345
2017-12-12 00:34



Я бы рекомендовал тестирование /dev/urandom так же как /dev/zero в качестве dd при тестировании SSD, поскольку сжимаемость данных может иметь огромное влияние на скорость записи. - Ian Mackinnon
На моем Ubuntu 12.04 Unity нет такой «Системы ->». Или, по крайней мере, я этого не нашел. И я не вижу этого дискового инструмента ни в настройках системы ... O_o Но я окончательно сумел запустить его: / usr / bin / palimpsest - Fran Marzoa
Обратите внимание, что с 12.10 это просто называется Дисками и можно найти через Единство. - Paul Lammertsma
В Gnome это переместилось в Applications -> System Tools -> Preferences -> Disk Utility. Для тех, кто ненавидит Единство. - Ken Sharp
/tmp В наши дни файловая система часто использует ramdisk. Так что писать /tmp казалось бы, тестирует вашу память, а не вашу дисковую подсистему. - Zoredache


Суоминен прав, мы должны использовать какую-то синхронизацию; но есть более простой метод, conv = fdatasync выполнит эту работу:

dd if=/dev/zero of=/tmp/output conv=fdatasync bs=384k count=1k; rm -f /tmp/output
1024+0records in
1024+0 records out
402653184 bytes (403 MB) copied, 3.19232 s, 126 MB/s

73
2017-08-18 18:31



Это ответ, использующий другую команду / опцию, чем другие. Я вижу, что это достойный ответ собственный пост. - Alaa Ali
Почему вы использовали 384k в качестве размера блока? - Diego F. Durán
@Diego Нет причин. Это был просто пример. Вы можете использовать что-нибудь еще. (между примерно 4k ... 1M) Конечно, больший размер будет лучше. И, конечно, уменьшите количество отсчетов, когда вы используете большие буквы, или это займет год, чтобы закончить. - Tele
он не является надежным благодаря инструментам настольной маркировки, таким как номера iozone и sysbench намного ниже - MSS


Я бы не рекомендовал использовать /dev/urandom потому что это программное обеспечение и медленное, как свинья. Лучше взять фрагмент случайных данных в ramdisk. На жестком диске случайное значение не имеет значения, потому что каждый байт записан как есть (также на ssd с dd). Но если мы проверим дедуплированный пул zfs с чистыми нулевыми или случайными данными, существует огромная разница в производительности.

Другой точкой зрения должно быть включение времени синхронизации; все современные файловые системы используют кеширование при работе с файлами.

Чтобы действительно измерить скорость диска, а не память, мы должны синхронизировать файловую систему, чтобы избавиться от эффекта кеширования. Это легко сделать:

time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync"

с помощью этого метода вы получаете выход:

sync ; time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k  && sync" ; rm testfile 
1024+0 records in
1024+0 records out
104857600 bytes (105 MB) copied, 0.270684 s, 387 MB/s

real    0m0.441s
user    0m0.004s
sys 0m0.124s

поэтому диск datarate равен только 104857600 / 0.441 = 237772335 B / s -> 237MB / s

Это более чем на 100 Мбайт / с ниже, чем при кешировании.

Счастливый бенчмаркинг,


42
2017-12-06 23:18





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

Это полезно для получения точной информации о том, как диск работает для конкретного приложения или задачи. На выходе будет отображаться скорость чтения / записи для каждого процесса и общая скорость чтения / записи для сервера, что очень похоже на top,

Чтобы установить iotop:

sudo apt-get install iotop  

Чтобы запустить его:

sudo iotop

30
2017-09-17 14:24





bonnie ++ - это конечная эталонная утилита, которую я знаю для Linux.

(В настоящее время я готовлю linux livecd на работе с bonnie ++, чтобы протестировать нашу машину на базе Windows!)

Он заботится о кешировании, синхронизации, случайных данных, случайном местоположении на диске, обновлениях небольшого размера, больших обновлениях, чтениях, записи и т. Д. Сравнивая usbkey, жесткий диск (роторный), твердотельный накопитель и барабанный файловая система может быть очень информативной для новичка.

Я понятия не имею, включен ли он в Ubuntu, но вы легко можете скомпилировать его из источника.

http://www.coker.com.au/bonnie++/


23
2018-02-03 16:13





Скорость письма

$ dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s

Размер блока на самом деле довольно большой. Вы можете попробовать с меньшими размерами, такими как 64k или даже 4k.


Скорость чтения

Выполните следующую команду, чтобы очистить кеш памяти

$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

Теперь прочитайте файл, который был создан в тесте write:

$ dd if=./largefile of=/dev/null bs=4k
165118+0 records in
165118+0 records out
676323328 bytes (676 MB) copied, 3.0114 s, 225 MB/s

17
2018-05-05 22:12





некоторые подсказки о том, как использовать bonnie ++

bonnie++ -d [TEST_LOCATION] -s [TEST_SIZE] -n 0 -m [TEST_NAME] -f -b -u [TEST_USER] 
bonnie++ -d /tmp -s 4G -n 0 -m TEST -f -b -u james

Еще немного: ПРОСТОЕ БОННИ ++ ПРИМЕР,


12
2017-09-28 19:02





Если вам нужна точность, вы должны использовать fio, Это требует чтения руководства (man fio), но это даст вам точные результаты. Обратите внимание, что для любой точности вам нужно точно указать, что вы хотите измерить. Некоторые примеры:

Последовательная скорость READ с большими блоками (это должно быть рядом с номером, который вы видите в спецификациях для вашего диска):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Последовательная скорость WRITE с большими блоками (это должно быть рядом с номером, который вы видите в спецификациях для вашего диска):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Случайный 4K читать QD1 (это число, которое действительно имеет значение для работы в реальном мире, если вы точно не знаете):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Смешанное случайное чтение 4K и запись QD1 с синхронизацией (это наихудший номер, который вы должны ожидать от своего диска, обычно 1-10% от числа, указанного в спецификации):

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Увеличить --size аргумент для увеличения размера файла. Использование больших файлов может привести к уменьшению числа, которое вы получаете в зависимости от технологии накопителя и прошивки. Маленькие файлы будут давать «слишком хорошие» результаты для ротационных носителей, потому что читающему голосу не нужно много двигаться. Если ваше устройство находится рядом с пустым, использование файла, достаточно большого для заполнения диска, приведет к худшему поведению для каждого теста. В случае SSD размер файла не имеет большого значения.

Обратите внимание, что fio создаст требуемый временный файл при первом запуске. Он будет заполнен случайными данными, чтобы избежать слишком больших чисел с устройств, которые обманывают, сжимая данные перед записью в постоянное хранилище. Будет вызываться временный файл fio-tempfile.dat в приведенных выше примерах и хранится в текущем рабочем каталоге. Поэтому сначала вы должны перейти в каталог, который установлен на устройстве, которое вы хотите протестировать.


9
2018-01-01 18:14



Некоторые настройки fio немного странны и могут быть неоптимальными. Например, наличие такого огромного размера блока (2 Мбайт), когда вы выполняете прямой ввод-вывод с асинхронным механизмом ввода-вывода, может привести к большому расщеплению в ядре, что создает накладные расходы. Отправка периодических fsyncкогда вы делаете только чтение, также выглядит необычно. Я согласен, что fio полезен, но я бы рекомендовал читателям внимательно изучить, какие параметры они хотят использовать, а не просто копировать их дословно из версии ответа 20180102 выше ... - Anon
@ Не уверен: вы правы, оптимальный для последовательного чтения будет соответствовать /sys/block/sd?/queue/max_sectors_kb потому что он может быть ниже фактического предела аппаратного обеспечения, который обычно больше, чем 2 МБ в приведенном выше примере. Однако я предполагаю, что незначительные накладные расходы, вызванные процессором, не имеют значения по сравнению со скоростью реального устройства ввода-вывода. fsync это не операция для чтения, поэтому она не повлияет на результаты - я сохранил ее, чтобы было легче понять различия между различными командами. У вас возникают проблемы с получением результатов, соответствующих спецификациям производителя? - Mikko Rantalainen
Не совсем, у меня есть (некоторые) опыт работы с fio и Linux. На самом деле, если вы угадаете лучший размер блока, было бы разумно начать с optim_io_size, если он доступен (но вы можете предположить, что это 64 Кбайт, если это 0 - это то, что делает ядро). Не совсем, у меня есть (некоторые) опыт работы с fio и Linux. На самом деле, если вы угадаете лучший размер блока, было бы разумно начать с optim_io_size, если он доступен (но вы можете предположить, что это 64 Кбайт, если это 0 - это то, что делает ядро). - Anon
Я просто перепробовал некоторые устройства. Используя вышепоследовательный тест чтения (размер блока 2 МБ), я получил 280 МБ / с от Samsung SSD 850 EVO и 1070 МБ / с от Intel 910 SSD. С размером блока 64k и в противном случае идентичной командной строки я получил 268 Мбайт / с от 850 EVO и 1055 МБ / с от 910 SSD. По крайней мере, для таких устройств использование размера блока 2 Мбайт, кажется, улучшает результаты примерно на 1-5%, даже несмотря на то, что он вызывает разделение запросов на оборудование. Я думаю, что даже при оптимизации ядра накладные расходы на отправку большего количества системных вызовов хуже, чем расщепление внутри ядра. - Mikko Rantalainen
При дальнейшем тестировании кажется, что я получаю наивысшую последовательную пропускную способность, используя силу 2 значения, которая меньше, чем max_sectors_kb, Я изменил приведенные выше примеры команд, чтобы использовать размер блока 1 МБ, потому что это похоже на работу с аппаратным обеспечением реального мира. И я также проверил, что fsync не имеет значения для чтения. - Mikko Rantalainen