====== IOPS. Проверка дисков в Linux ====== IOPS (input/output operations per second - количество операций ввода-вывода в секунду) - количество операций ввода-вывода, выполняемых системой хранения данных, за одну секунду. Для замера IOPS дисков в Linux есть утилита fio. Чтобы её установить, например, в ОС Alt Linux нужно ввести команду ''apt-get install fio'' Теперь можно приступать к тестированию IOPS диска. Для примера я выбрал NVME диск на своём ПК. Для теста случайной записи в файл создаём файл randwrite.cfg (имя любое): ''[writetest]'' ''size=4G'' ''blocksize=4k'' ''filename=/tmp/test_fio'' ''rw=randwrite'' ''direct=1'' ''buffered=0'' ''ioengine=libaio'' ''iodepth=32'' И запускаем тест командой ''fio /<путь к файлу>/randwrite.cfg'' Получаем следующие результаты: количество операций ввода/вывода в секунду - 68.7k скорость передачи данных - 268MiB/s {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/857a0638dd8b7e2d4a81699c296a7886.png?nolink&}} Для теста случайного чтения файла создаём файл randread.cfg: ''[readtest]'' ''size=4G'' ''blocksize=4k'' ''filename=/tmp/test_fio'' ''rw=randread'' ''direct=1'' ''buffered=0'' ''ioengine=libaio'' ''iodepth=32'' И запускаем тест командой ''fio /<путь к файлу>/randread.cfg'' Получаем следующие результаты: количество операций ввода/вывода в секунду - 154k скорость передачи данных - 600MiB/s {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/551acbe7ea6d4ee2ce5a03934c7e8d36.png?nolink&}} Эти показатели считаются неплохими для твердотельных накопителей. В конфигурационных файлах параметры означают следующее: //rw=randwrite// - режим теста (случайная запись); //rw=randread// - режим теста (случайное чтение); //blocksize=4k// - размер блока данных для теста (4 КБ); //size=4G// - размер файла для теста (4 ГБ, чем больше, тем дольше будет проводиться тест); //filename=/tmp/test_fio// - каталог и файл, на которых будет проводиться тест (если дисков несколько, то должен быть на нужном для тестирования диске); //ioengine=libaio// - асинхронный ввод-вывод; //iodepth=32// - глубина очереди (32 запроса одновременно); //direct=1// - использование прямого доступа к устройству (чтобы избежать кеширования данных); //buffered=0// - без буфера. Также можно ещё указать параметр //runtime=120// - время выполнения теста (в данном случае 120 секунд, но можно указать любое время). Его хорошо использовать, если нужно точно представлять, когда закончится тест. Например, на обычном SATA диске без этого параметра тест случайной записи в файл 4 Гб может длиться очень долго (я его прервал через час на 10%). А с параметром runtime всё проходит в запланированные временные рамки. Для сравнения на SATA диске за 2 минуты у меня получились следующие значения: - тест случайной записи в файл: количество операций ввода/вывода в секунду - 438 скорость передачи данных - 1752KiB/s - тест случайного чтения файла (здесь я взял реальный файл размером 1 Гб, так как за 2 минуты не создался нужный временный файл): количество операций ввода/вывода в секунду - 365 скорость передачи данных - 1464KiB/s {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/9a335ead6595c370ae1f58f3f306b351.png?nolink&}} В выводе команды fio есть ещё пара интересных показателей: //cpu// - процентное использование процессора (usr - используется для пользовательских задач, sys - для системных задач), если процент использования процессора относительно низкий, то CPU не является узким местом в тесте; //util// - занятость диска в процентах, значение около 100% может указывать на высокую загрузку диска при выполнении теста. Сравнительная таблица результатов выполнения команды fio на разных дисках: {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/4a325efd6597c370ae1f58f3f306b351.png?nolink&}} Не всегда есть возможность выполнять тест дисков на серверах рабочей зоны. В этом случае получить статистику по операциям ввода-вывода для дисков можно при помощи команды iostat, которая входит в состав пакета sysstat: ''apt-get install sysstat'' В этом случае синтаксис команды будет следующим: ''iostat -dm'' или для более подробного вывода: ''iostat -dmx'' Первый отчет генерируется командой с момента загрузки системы, а последующий отчет - с момента предыдущего отчета. {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/184/bd3b608530cbf8f56b8ec3405512d238.png?nolink&}} Здесь: //tps// - количество запросов на чтение или запись к устройству в секунду; //r/s// - количество запросов на чтение в секунду; //MB_read/s (rMB/s)// - скорость чтения с диска (количество мегабайт, прочитанных с устройства за секунду); //w/s// - количество запросов на запись в секунду; //MB_wrtn/s (wMB/s)// - скорость записи на диск (количество мегабайт, записанных на устройство в секунду); //MB_read// - общее количество данных, прочитанных с диска; //MB_wrtn// - общее количество данных, записанных на диск; //r_await// - среднее время (миллисекунды) на обработку запросов чтения к диску (включает в себя время, потраченное в очереди на обработку, и время на обработку запроса); //w_await// - среднее время (миллисекунды) на обработку запросов записи к диску (включает в себя время, потраченное в очереди на обработку, и время на обработку запроса).