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

267

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

    
задан Luis Alvarado 12.12.2011 в 01:22
источник

8 ответов

352

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

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». Когда вы нажимаете на любую кнопку, он начинает бенчмаркинг жесткого диска.

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

Статья

Есть ли что-то еще, что вам нужно?

    
ответ дан Panther 12.12.2011 в 01:34
источник
75

Суоминен прав, мы должны использовать какую-то синхронизацию; но есть более простой метод, 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
    
ответ дан Tele 18.08.2013 в 20:31
43

Я бы не рекомендовал использовать /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 / с

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

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

    
ответ дан Pasi Suominen 07.12.2012 в 00:18
31

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

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

Для установки iotop:

sudo apt-get install iotop  

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

sudo iotop
    
ответ дан Lars 17.09.2013 в 16:24
23

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

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

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

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

Ссылка

    
ответ дан Corto 03.02.2014 в 17:13
18

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

$ 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
    
ответ дан Limon Monte 06.05.2016 в 00:12
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

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

    
ответ дан nyxee 28.09.2015 в 21:02
10

Если вам нужна точность, вы должны использовать 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 в приведенных выше примерах и сохранен в текущем рабочем каталоге. Поэтому сначала вы должны перейти в каталог, который установлен на устройстве, которое вы хотите протестировать.

    
ответ дан Mikko Rantalainen 01.01.2018 в 19:14