Как проверить производительность жесткого диска (либо через терминал, либо через графический интерфейс). Скорость записи. Скорость чтения. Размер и скорость кеша. Случайная скорость.
Как проверить производительность жесткого диска (либо через терминал, либо через графический интерфейс). Скорость записи. Скорость чтения. Размер и скорость кеша. Случайная скорость.
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
gnome-disks
Есть ли что-то еще, что вам нужно?
Суоминен прав, мы должны использовать какую-то синхронизацию; но есть более простой метод, 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
Я бы не рекомендовал использовать /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 Мбайт / с ниже, чем при кешировании.
Счастливый бенчмаркинг,
Если вы хотите контролировать скорость чтения и записи на диске в режиме реального времени, вы можете использовать инструмент iotop .
Это полезно для получения точной информации о том, как диск выполняет для конкретного приложения или задачи. На выходе будет отображаться скорость чтения / записи для каждого процесса и общая скорость чтения / записи для сервера, что очень похоже на top
.
Для установки iotop:
sudo apt-get install iotop
Чтобы запустить его:
sudo iotop
bonnie ++ - это конечная эталонная утилита, которую я знаю для Linux.
(Я сейчас готовлю linux livecd при работе с bonnie ++ на нем, чтобы протестировать нашу машину на базе Windows!)
Он заботится о кешировании, синхронизации, случайных данных, случайном местоположении на диске, обновлениях небольшого размера, больших обновлениях, чтениях, записи и т. д. Сравнение usbkey, жесткого диска (ротационного), твердотельного диска и файловая система на основе ram может быть очень информативной для новичков.
Я понятия не имею, включен ли он в Ubuntu, но вы можете легко скомпилировать его из источника.
Скорость записи
$ 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
некоторые подсказки о том, как использовать 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
Еще немного: ПРОСТОЙ БОННИЙ ++ ПРИМЕР .
Если вам нужна точность, вы должны использовать 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
в приведенных выше примерах и сохранен в текущем рабочем каталоге. Поэтому сначала вы должны перейти в каталог, который установлен на устройстве, которое вы хотите протестировать.