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

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

1
задан 11 December 2012 в 11:22

7 ответов

Suominen прав, мы должны использовать какую-то синхронизацию; но существует более простой метод, 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
68
ответ дан 25 May 2018 в 16:01
  • 1
    Это ответ, использующий другую команду / опцию, чем другие. Я вижу, что это достойный ответ собственный пост. – Alaa Ali 19 August 2013 в 00:01
  • 2
    Почему вы использовали 384k в качестве размера блока? – Diego F. Durán 2 June 2014 в 19:39
  • 3
    @Diego Нет причин. Это был просто пример. Вы можете использовать что-нибудь еще. (между примерно 4k ... 1M) Конечно, больший размер будет лучше. И, конечно, уменьшите количество отсчетов, когда вы используете большие буквы, или это займет год, чтобы закончить. – Tele 25 July 2014 в 05:17
  • 4
    он не является надежным благодаря инструментам настольной маркировки, таким как номера iozone и sysbench намного ниже – MSS 27 August 2016 в 13:00

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

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

40
ответ дан 25 May 2018 в 16:01

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

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

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

sudo apt-get install iotop  

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

sudo iotop
29
ответ дан 25 May 2018 в 16:01

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

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

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

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

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

Corto

20
ответ дан 25 May 2018 в 16:01

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

$ 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.

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

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

$ 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
15
ответ дан 25 May 2018 в 16:01

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

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

10
ответ дан 25 May 2018 в 16:01

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

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

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

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

fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=2048k --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 в приведенных выше примерах и сохранен в текущем рабочем каталоге. Поэтому сначала вы должны перейти в каталог, который установлен на устройстве, которое вы хотите проверить.

5
ответ дан 25 May 2018 в 16:01

Другие вопросы по тегам:

Похожие вопросы: