Тест диска с помощью fio.
Примеры тестирования производительности дисковой подсистемы с помощью утилиты fio. Заметка периодически дополняется.
Ставим из репозитория EPEL:
# yum install epel-release # yum install fio
Простые тесты.
Тест на случайную запись:
# fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=4k --direct=0 --size=512M --numjobs=2 --runtime=240 --group_reporting
Тест на случайное чтение:
# fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=0 --size=512M --numjobs=4 --runtime=240 --group_reporting
Тест на случайные чтение и запись:
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read_write.fio --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
Создание файлов с тестами.
Утилита fio позволяет использовать для тестирования, заранее написанные файл-тесты. Каждый такой тест — это файл с расширением .fio, разделённый внутри на секции, в рамках которых задаются настройки тестирования. Пример такого теста:
# cat test.fio [global] rw=randread size=256m directory=/tmp/fio.test ioengine=libaio iodepth=4 invalidate=1 direct=1 [bgwriter] rw=randwrite iodepth=32 [queryA] iodepth=1 ioengine=mmap direct=0 thinktime=3 [queryB] iodepth=1 ioengine=mmap direct=0 thinktime=5 [bgupdater] rw=randrw iodepth=16 thinktime=40 size=32m
Тесты от Google Cloud.
Подробнее здесь, по ссылке. В примерах ниже для тестирования используется на порядок меньше места (в документации примеры используют 100Гб), для запуска тестов на небольших инстансах.
Запись на диск:
# fio --name=writefile --size=100G --filesize=8G --filename=/dev/disk/by-id/google-local-ssd-0 --bs=1M --nrfiles=1 --direct=1 --sync=0 --randrepeat=0 --rw=write --refill_buffers --end_fsync=1 --iodepth=200 --ioengine=libaio
Случайное чтение:
# fio --time_based --name=benchmark --size=8G --runtime=30 --filename=/dev/disk/by-id/google-local-ssd-0 --ioengine=libaio --randrepeat=0 --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 --numjobs=4 --rw=randread --blocksize=4k --group_reporting
Случайная запись:
# fio --time_based --name=benchmark --size=8G --runtime=30 --filename=/dev/disk/by-id/google-local-ssd-0 --ioengine=libaio --randrepeat=0 --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 --numjobs=4 --rw=randwrite --blocksize=4k --group_reporting
Протестировать производительность дисков
Для полноценного тестирования производительности дисков облачных серверов (IOPS на чтение и запись и пропускной способности) используйте утилиту fio . Для тестирования можно использовать файл-тесты — подготовленные текстовые файлы с настройками тестирования.
Результаты тестирования можно сравнить с лимитами для локальных дисков и сетевых дисков.
Установить fio
sudo apt update sudo apt install fio
Подготовить диск
Не используйте эту команду для дисков, которые содержат какую-либо информацию — команда уничтожает все данные на диске. В примерах ниже приведены тесты с записью на диск с параметром filename=/dev/sdb — запись также уничтожит данные и файловую систему на диске, если они там есть.
Для исключения влияния сервисов и производительности файловой системы на результат теста мы рекомендуем создать пустой сетевой диск и заполнить его данными:
dd if=/dev/urandom of=/dev/sdX bs=4M
Для тестов вы можете использовать файл, но результат может быть не показателен, особенно если вы используете корневой раздел.
Протестировать производительность
- случайная запись блоками 4 КБ — для тестирования IOPS;
- случайное чтение блоками 4 КБ — для тестирования IOPS;
- случайная запись блоками 4 MБ — для тестирования пропускной способности;
- случайное чтение блоками 4 MБ — для тестирования пропускной способности.
- size — общий размер тестового файла;
- blocksize — размер одного блока, с которым проводится операция чтения или записи;
- filename — файл для записи или чтения. В примерах ниже приведены тесты с записью на диск с параметром filename=/dev/sdb — запись также уничтожит данные и файловую систему на диске, если они там есть;
- iodepth — количество потоков.
Случайная запись блоками 4 КБ
[writetest] size=2000M blocksize=4k filename=/dev/sdb rw=randwrite direct=1 buffered=0 ioengine=libaio iodepth=32
write: IOPS=118, BW=475KiB/s (487kB/s)(2000MiB/4310296msec); 0 zone resets