Linux: проверка скорости чтения-записи HDD

Автор: | 21/02/2013

linux-logoНа этом диске будут проводится тесты, описанные ниже:

Western Digital Caviar Green 500GB 64МB WD5000AZRX 3.5

О том, как получить подробные данные о вашем жестком диске – можно прочитать в статье Linux: получение информации о hardware — HDD.

Основной раздел:

[simterm]

# file -s /dev/sda7
/dev/sda7: Linux rev 1.0 ext4 filesystem data…

[/simterm]

Содержание

tune2fs

Более подробную информацию об используемой файловой системе посмотреть можно с помощью tune2fs:

[simterm]

# tune2fs -l /dev/sda7
tune2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
..
Filesystem state:         clean

Filesystem OS type:       Linux
Inode count:              2940928
Block count:              11760384
Reserved block count:     588019
Free blocks:              5859079
Free inodes:              2697004
First block:              0
Block size:               4096
Fragment size:            4096

Filesystem created:       Thu Feb 14 13:59:03 2013
Last mount time:          Thu Feb 21 06:46:41 2013
Last write time:          Sun Feb 17 16:36:41 2013

Last checked:             Thu Feb 14 13:59:03 2013

[/simterm]

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

dd

Самый простой способ проверки скорости чтения/записи на жесткий диск (hard disk input/output value):

[simterm]

# dd if=/dev/sda7 of=/dev/null
^C8058505+0 records in
8058504+0 records out
4125954048 bytes (4.1 GB) copied, 36.5952 s, 113 MB/s

[/simterm]

Лучше выполнять его хотя бы 1-2 минуты. Почему – пояснение в следующих примерах:

[simterm]

# dd if=/dev/sda7 of=iotestfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.247265 s, 424 MB/s

[/simterm]

424 МБ/с – по сравнению с 113 MB/s в предыдущем примере – почему такая разница?

dd вывел результат кеширования в буфер оперативной памяти, а не непосредственно на диск.

Укажем выполнить не 100 операций, а 1000 – что бы система успела выполнить синхронизацию RAM и HDD, после чего dd покажет нам результаты:

[simterm]

# dd if=/dev/sda7 of=iotestfile bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 9.26567 s, 113 MB/s

[/simterm]

113 MB/s – тоже более реальный результат для это жесткого диска.

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

[simterm]

# dd if=/dev/sda7 of=iotestfile bs=1M count=100 conv=fdatasync
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 1.08168 s, 96.9 MB/s

[/simterm]

Теперь рассмотрим некоторые утилиты.

hdparm

Начнём с программы hdparm:

[simterm]

# hdparm -tT /dev/sda7

/dev/sda7:
Timing cached reads:   1922 MB in  2.00 seconds = 960.64 MB/sec
Timing buffered disk reads: 380 MB in  3.02 seconds = 126.02 MB/sec

[/simterm]

Ключ -t ( Timing buffered disk) отображает скорость чтения с диска напрямую из буфера кеша, и является показателем того, как быстро жесткий диск может поддерживать последовательное чтение данных под Linux, без задержек, вызванных работой файловой системы.

Ключ -T (Timing cached reads) показывает скорость чтения напрямую из буфера кеша Linux без учёта доступа к диску. Этот показатель главным образом отображает работу процессора, кэша и оперативной памяти тестируемой системы.

seeker

Одним из очень важных параметров скорости работы жесткого диска является “seek time” – время поиска. Это время, которое требуется жестком диску, что бы считывающая головка достигла сектора, содержащего необходимые данные. Что бы проверить этот параметр – воспользуемся утилитой seeker:

К сожалению, что бы её запустить под Debian / Ubuntu придётся немного повозиться.

Для начала, качаем .rpm пакет с сайта:

http://pkgs.org/download/seeker

Например, вполне работоспособным (на Ubuntu 12.04 x64) оказался пакет seeker-3.0-2.el6.x86_64.rpm для CentOS 5.

На следующей странцие http://pkgs.org/centos-5-rhel-5/epel-x86_64/seeker-3.0-2.el5.x86_64.rpm/download/ выбираем:

Download packages from the official mirror:
binary package, source package

binary – и сохраняем пакет .rpm на диск.

Далее, потребуется создать пакет .deb. Для этого можно воспользоваться утилитой alien. Как ей пользоваться – описано в статье Установка Java 7 на Ubuntu 12.10.

Запускаем:

[simterm]

# seeker /dev/sda7
Seeker v3.0, 2009-06-17, http://www.linuxinsight.com/how_fast_is_your_disk.html
Benchmarking /dev/sda7 [94083072 blocks, 48170532864 bytes, 44 GB, 45939 MB, 48 GiB, 48170 MiB]
[512 logical sector size, 512 physical sector size]
[1 threads]
Wait 30 seconds…………………………
Results: 89 seeks/second, 11.202 ms random access time (3611572 < offsets < 48157383296)

[/simterm]

Самое интересное в результате – это значение “89 seeks/second”, т.е. 89 попыток поиска в секторе, содержащем данные. Это неплохой результат для домашнего ПК, но неважный для серверной машины. Впрочем, учитывая что на этой машине используется “домашний” винчестер WD серии Green с RPM 5200 – то вполне неплохой результат.

iozone

Следующая утилита – iozone, которая фактически умеет выполнять все тесты, описанные выше. В Ubuntu 12.04 она требует установки, поэтому выполняем:

[simterm]

# aptitude -y install iozone3

[/simterm]

Теперь запустим и рассмотрим результаты:

[simterm]

# iozone -a /dev/sda7

random  random    bkwd   record   stride
KB  reclen   write rewrite    read    reread    read   write    read  rewrite     read   fwrite frewrite   fread  freread
64       4  474430  818885  2561267  2561267 1879725 1124074 1124074  1188789  2116903   799377   939223 1105556  2133730
64       8  167061  852702  1452528  3057153 2133730 1210227  955947  2052169  1330167  1101022   901377  533875  1828508
64      16  560635  614542  2298136  2561267 5389653 1255511 1562436  1279447  1933893   913649   460591 1879725  2444640
64      32  566551 1033216  3363612  3203069 6421025 1526887 1421755  1452528  1947927  1124074  1304314 1452528  2298136
64      64  507625 1066042  5389653  5389653 5389653 1304314 1492919  1484662  1421755  1002351  1183548 1991276  2006158

[/simterm]

(тут показана лишь малая часть всего вывода)

Ключ -a запускает iozone в автоматическом режиме, в котором утилита будет использовать для тестирования block size от 4k до 16384k (16M), и размер файлов от 64k до 524288k (512M).

Все результаты скорости указаны в KB/Sec.

Первая колонка – KB отображает размер файла.
Вторая колонка – reclen – отображает используемый размер блока (block size).
Третья колнка – write – отображает время, затраченное на создание/запись нового файла. Это всегда более сложная задача для диска и файловой системы, так как связана с назначением inode, созданием новой записи в журнале событий (для Journaled File System) и т.п.
Четвёртая колонка – rewrite – указывается скорость перезаписи уже существующего файла.
Пятая колонка – read – скорость чтения существующего файла.
Шестая колонка – reread – скорость чтения файла, который уже был прочитан (reread file).
Седьмая колонка – random read – показывает скорость доступа к случайной части (!) файла.

В целом, этих данных хватит для получения необходимых данных о быстродействии жесткого диска. Более подробные данные можно еполучить на сайте>>> разработчкиа.

Сохранить результаты можно с ключём -b (файл должен быть совсемстим с форматом эл. таблиц):

[simterm]

# iozone -a -b ioresults.xls

[/simterm]

Есть ещё много утилит, однако на этом хочется закончить.

Основная часть этой статьи является вольным переводом (с некоторыми попавками в описаниях) статьи Linux File System Read Write Performance Test.