При оценке производительности системы, анализ дисковой подсистемы является не просто важным, но и обязательным этапом в совокупности мероприятий по оптимизации системы в целом. На практике довольно часто случается так, что именно из-за некорректной работы этого программно-аппаратного компонента не удаётся добиться заявленного или приблизиться к потенциальному уровню производительности. Дисковая подсистема — далеко не самый надёжный компонент в высоконагруженной системе и требует довольно тщательного обслуживания. Которое в свою очередь может определяться в результате умелого мониторинга и анализа работы дисков. Да и вообще устройств хранения. Стандартным инструментом, предоставляющим исчерпывающий функционал для задач анализа производительности дисковой подсистемы в Linux является утилита iostat – первоочередное средство для решения подобных задач в системном администрировании.
Установка утилиты iostat
В большинстве дистрибутивов Linux команда iostat недоступна, пока не установлен пакет systat.
Установка в Ubuntu/Debian
$ sudo apt-get install sysstat
Установка в CentOS/RedHat
$ yum install sysstat
Синтаксис и основные опции команды iostat
Синтаксис команды iostat предполагает использование трёх основных опций. Среди которых: интервал замера (в секундах), количество отчётов, а также устройство. В общем виде синтаксис следующий:
iostat [-опции] [device […]] интервал количество_отчётов
В качестве параметра device задаётся анализируемое устройство хранения. Параметры интервал и количество_отчётов задают периодичность замеров и количество выводимых отчётов соответственно.
Среди дополнительных опций самыми полезными являются следующие:
Опция | Значение |
-p | Показывает статистику для указанного устройства с детализацией по его разделам. |
-s | Выводит отчёты в кратком виде. |
-x | Выводит отчёты в подробном виде. |
-t | Выводит значение времени, в которое выполнялся/формировался каждый отчёт. |
Остальные опции используются довольно редко. Об их назначении можно более подробно узнать из справочного руководства команды iostat: man iostat.
Примеры использования iostat
Если дать команду iostat без аргументов и опций, то по-умолчанию будет выведен стандартный отчёт для всех имеющихся в системе устройств хранения:
iostat
Как можно видеть, iostat выводит также и информацию об использовании центрального процессора. Параметрами же, характеризующими работу дисковой подсистемы для каждого устройства хранения являются:
- tps – количество операций ввода/вывода в секунду;
- kB_read/s – количество операций чтения в секунду;
- kB_wrtn/s – количество операций записи в секунду;
- kB_read – суммарный объём считанных данных;
- kB_wrtn – суммарный объём записанных данных.
Следует отметить, что при анализе значений tps, следует учитывать тот факт, что при одном запросе на пересылку данных может одновременно выполняться несколько запросов для ввода/вывода для сразу нескольких секторов. Поэтому данные результаты нужно сопоставлять с характеристиками самого устройства хранения (жёсткого диска) для получения объективной оценки. Ведь количество секторов может быть разным (в зависимости от используемого диска). И даже, если предположить, что обращение всегда происходит сразу ко всем секторам, то значение tps представляется довольно размытым.
Производительность дисковой подсистемы и её оптимизация
Главным параметром, заметно влияющим на производительность дисков является время, затрачиваемое на поиск требуемых блоков данных. Причём частота вращения самих дисков, а также пропускная способность шины данных диска решающей роли в производительности не играют. Хотя и несколько влияют на неё. На практике для поиска информации на диске выполняется от 100 до 300 операций поиска в секунду. Когда обращение происходит сразу к нескольким секторам диска, то скорость пересылки данных может исчисляться сотнями мегабайт в секунду. Однако, если происходит чтение всего с одного сектора после каждой операции поиска данных. То в этом случае может быть задействовано 5% (и менее) от максимально возможной пропускной способности диска.
Чем большие расстояния преодолевает головка жёсткого диска, тем меньше его производительность. Такое случается например, когда происходит одновременное обращение к нескольким файлам, которые расположены на разных разделах одного диска. Это обстоятельство необходимо учитывать при разметке диска и делать это таким образом, чтобы файлы, к которым происходит одновременное обращение, находились в одной файловой системе/разделе.
Положительно сказывается на производительности дисковой подсистемы также и размещение файловых систем (особенно тех, к которым очень часто происходит одновременное обращение) на отдельные физические диски. Это и понятно, ведь каждое устройство управляется и работает независимо друг от друга. Такой подход часто применяют в веб-хостинге, размещая файлы данных и файлы журналов веб-сервера и/или СУБД (системы управления базами данных) таким образом, чтобы они находились на разных дисках.
Также хорошо сказывается на производительности применение виртуальных дисков. Когда в системе работает специальный драйвер. Который ведёт себя как драйвер устройства хранения. Но на самом деле производит чтение/запись непосредственно в память. Конечно, данный способ применим разве что ко всякого рода временным данным. Вроде кешей, буферов демонов и т. д. Однако, если максимально избавить систему от «бремени» обработки временных файлов через диски. То в результате можно получить ощутимый прирост в производительности дисковой подсистемы. И как следствие — всей системы в целом.
Заключение
В заключение следует отметить, что использование команды iostat – более, чем достаточно для оценки производительности дисков. А вот реализация мер по оптимизации и повышению эффективности дисковой подсистемы требует скрупулёзной подготовки и трудоёмкой работы по программно-аппаратной организации всей системы.