Команда iostat – анализ обмена данными с дисками
При оценке производительности системы, анализ дисковой подсистемы является не просто важным, но и обязательным этапом в совокупности мероприятий по оптимизации системы в целом. На практике довольно часто случается так, что именно из-за некорректной работы этого программно-аппаратного компонента не удаётся добиться заявленного или приблизиться к потенциальному уровню производительности. Дисковая подсистема — далеко не самый надёжный компонент в высоконагруженной системе и требует довольно тщательного обслуживания. Которое в свою очередь может определяться в результате умелого мониторинга и анализа работы дисков. Да и вообще устройств хранения. Стандартным инструментом, предоставляющим исчерпывающий функционал для задач анализа производительности дисковой подсистемы в Linux является утилита iostat – первоочередное средство для решения подобных задач в системном администрировании.
Установка утилиты iostat
В большинстве дистрибутивов Linux команда iostat недоступна, пока не установлен пакет systat.
Установка в Ubuntu/Debian
Установка в CentOS/RedHat
Синтаксис и основные опции команды iostat
Синтаксис команды iostat предполагает использование трёх основных опций. Среди которых: интервал замера (в секундах), количество отчётов, а также устройство. В общем виде синтаксис следующий:
В качестве параметра device задаётся анализируемое устройство хранения. Параметры интервал и количество_отчётов задают периодичность замеров и количество выводимых отчётов соответственно.
Среди дополнительных опций самыми полезными являются следующие:
Опция | Значение |
-p | Показывает статистику для указанного устройства с детализацией по его разделам. |
-s | Выводит отчёты в кратком виде. |
-x | Выводит отчёты в подробном виде. |
-t | Выводит значение времени, в которое выполнялся/формировался каждый отчёт. |
Остальные опции используются довольно редко. Об их назначении можно более подробно узнать из справочного руководства команды iostat: man iostat.
Примеры использования iostat
Если дать команду iostat без аргументов и опций, то по-умолчанию будет выведен стандартный отчёт для всех имеющихся в системе устройств хранения:
Как можно видеть, iostat выводит также и информацию об использовании центрального процессора. Параметрами же, характеризующими работу дисковой подсистемы для каждого устройства хранения являются:
- tps – количество операций ввода/вывода в секунду;
- kB_read/s – количество операций чтения в секунду;
- kB_wrtn/s – количество операций записи в секунду;
- kB_read – суммарный объём считанных данных;
- kB_wrtn – суммарный объём записанных данных.
Следует отметить, что при анализе значений tps, следует учитывать тот факт, что при одном запросе на пересылку данных может одновременно выполняться несколько запросов для ввода/вывода для сразу нескольких секторов. Поэтому данные результаты нужно сопоставлять с характеристиками самого устройства хранения (жёсткого диска) для получения объективной оценки. Ведь количество секторов может быть разным (в зависимости от используемого диска). И даже, если предположить, что обращение всегда происходит сразу ко всем секторам, то значение tps представляется довольно размытым.
Производительность дисковой подсистемы и её оптимизация
Главным параметром, заметно влияющим на производительность дисков является время, затрачиваемое на поиск требуемых блоков данных. Причём частота вращения самих дисков, а также пропускная способность шины данных диска решающей роли в производительности не играют. Хотя и несколько влияют на неё. На практике для поиска информации на диске выполняется от 100 до 300 операций поиска в секунду. Когда обращение происходит сразу к нескольким секторам диска, то скорость пересылки данных может исчисляться сотнями мегабайт в секунду. Однако, если происходит чтение всего с одного сектора после каждой операции поиска данных. То в этом случае может быть задействовано 5% (и менее) от максимально возможной пропускной способности диска.
Чем большие расстояния преодолевает головка жёсткого диска, тем меньше его производительность. Такое случается например, когда происходит одновременное обращение к нескольким файлам, которые расположены на разных разделах одного диска. Это обстоятельство необходимо учитывать при разметке диска и делать это таким образом, чтобы файлы, к которым происходит одновременное обращение, находились в одной файловой системе/разделе.
Положительно сказывается на производительности дисковой подсистемы также и размещение файловых систем (особенно тех, к которым очень часто происходит одновременное обращение) на отдельные физические диски. Это и понятно, ведь каждое устройство управляется и работает независимо друг от друга. Такой подход часто применяют в веб-хостинге, размещая файлы данных и файлы журналов веб-сервера и/или СУБД (системы управления базами данных) таким образом, чтобы они находились на разных дисках.
Также хорошо сказывается на производительности применение виртуальных дисков. Когда в системе работает специальный драйвер. Который ведёт себя как драйвер устройства хранения. Но на самом деле производит чтение/запись непосредственно в память. Конечно, данный способ применим разве что ко всякого рода временным данным. Вроде кешей, буферов демонов и т. д. Однако, если максимально избавить систему от «бремени» обработки временных файлов через диски. То в результате можно получить ощутимый прирост в производительности дисковой подсистемы. И как следствие — всей системы в целом.
Заключение
В заключение следует отметить, что использование команды iostat – более, чем достаточно для оценки производительности дисков. А вот реализация мер по оптимизации и повышению эффективности дисковой подсистемы требует скрупулёзной подготовки и трудоёмкой работы по программно-аппаратной организации всей системы.
Источник
Нагрузка на диски в Linux
Для измерения текущей нагрузки на диски (что происходит, кто куда копирует и прочее) в Linux можно использовать iotop (и здесь же lsof) и iostat. А для тестирования возможностей дисковой системы fio. Несмотря на то, что первое, о чем можно подумать в плане попугаев — это IOPS или же Мб/сек за чтение или запись, обратите внимание на время ожидания. Примерно как если бы вы стояли в очереди в кассу: вас обслужили бы за 2 минуты, но очередь может быть минут на 30. И со стороны наблюдателя ваш процесс обслуживания будет «висеть». Именно так могут ощущать себя клиенты сервера, если время ожидания будет намного превышать время выполнения конкретной задачи. Поэтому определение длинной очереди и задержек часто бывает более важным, чем знать, что ваш диск «вау, может писать 400 Мбит/с». Нагрузка на диск может оказаться в 4000 Мбит/с в течение длительных периодов времени и все это время клиенты сервера будут недовольны.
Я здесь пишу свой опыт, со своим видением и трактовкой. Пожалуйста, учитывайте это.
IOTOP
Посмотреть, какие процессы в настоящее время создают нагрузку на диск удобно смотреть командой iotop:
Здесь видно, что в данный момент mc что-то пишет (а в это время в другом окне я в самом деле копировал кучу файлов на usb-диск в Midnight Commander (он же mc).
Понять, что коипрует mc в данный момент можно узнать командой:
IOSTAT
Пример вывода iostat на незагруженной в данный момент старенькой системе из двух SATA HDD в soft raid 1 (зеркало) mdadm:
Команда выглядела так:
-x — расширенная статистика
-t — выводить время для каждой порции замеров
-m — результаты в Мбайт
5 — интервал замеров 5 секунд.
Если нужны не история, а динамика процесса, попробуйте так:
watch iostat -x -t -m 1 2
В этом выводе r/s и w/s это отправленные к устройству запросы на выполнение (IOPS, которые хотелось бы, чтобы устройство выполнило).
await — время, включающее ожидание выполнения запроса (как если бы вы встали в очередь в кассу и ждали бы, пока вас обслужат).
svctm — время, реально затраченное на выполнение запроса (время «на самой кассе»).
Для обычных SATA дисков нагрузка IOPS где-то до 100-130 вполне выполнимая. В момент проведения замеров запрошенная нагрузка была 40 IOPS, поэтому запрос практически в очереди и не стоял, его обслужили почти сразу (на «кассе» никого не было). Поэтому await практически равен svctm.
Другое дело, когда нагрузка на диск вырастает:
%iowait — простой процессора (время в процентах) от или процессоров, в то время пока обрабатывались запросы. Т.е. в среднем процессор отдыхал почти 50% времени.
%user — загруженность процессора пользовательскими приложениями. По этому параметру видно, например, что в данный период процессор был почти не занят. Это важно, т.к. может помочь отсечь подозрения в тормозах из-за процессора.
Замер сделан во время переноса большого количества писем из одной папки IMAP в другую. Особо обратите внимание на await и svctm. Налицо длинная очередь (отношение await к svctm). Дисковая система (или чипсет, или медленный контроллер SATA, или. ) не справляется с запрошенной нагрузкой (w/s).. Для пользователей в этот момент все выглядело просто — сервер тупит или даже завис.
Заранее проверить производительность дисков можно с помощью fio. Также можно примерно оценить на одной машине производительность дисков и понимать, какой уровень «в среднем по больнице» вы можете ожидать. Это, конечно же, не правильно, но оценить все же поможет. Глубже анализировать результаты, а, главное, методики тестов мне пока трудно.
# yum install fio
# apt-get install fio
В общем виде запуск выглядит так:
Файл your.cfg (название произвольное) может быть примерно таким (пример рабочего конфига для теста на чтение):
Буферизацию не используем (buffered=0), чтение не последовательное (rw=randread).
Во время выполнения этого теста (а выполняться тест может доооолго, надоест — Ctrl+C, результаты все равно будут) можно запустить iostat и посмотреть, что происходит:
Обратите внимание на отношение await к svctm: await/svctm = 32,11..11, т.е. можно считать 32. Это и есть iodepth из конфига your.cfg. Теперь проще понять смысл iodepth — мы указываем, насколько хотим в тесте имитировать длинную очередь заданий.
Я не стал ждать два дня, Ctrl+C и вот результат:
Получили 109 iops, что в принципе нормально, диск обычный, SATA.
Источник
Команда iostat в Linux с примерами
Команда iostat в Linux используется для мониторинга системной статистики ввода-вывода для устройств и разделов. Он контролирует ввод / вывод системы, наблюдая за временем, в течение которого устройства активны, относительно их средней скорости передачи. Производственные отчеты iostat могут использоваться для изменения конфигурации системы, чтобы повысить баланс ввода / вывода между физическими дисками. iostat входит в пакет sysstat . Если у вас его нет, вам нужно сначала установить.
Команда для установки на разных дистрибутивах:
- На RedHat / CentOS / Fedora
- В Debian / Ubuntu / Linux Mint
Примечание: 10 команд Linux iostat для составления статистики процессора и ввода-вывода перечислены ниже:
- iostat: получить отчет и статистику.
- iostat -x: показать более подробную статистическую информацию.
- iostat -c: показать только статистику процессора.
- iostat -d: показать только отчет об устройстве.
- iostat -xd: Показать расширенную статистику ввода / вывода только для устройства.
- iostat -k: захват статистики в килобайтах или мегабайтах.
- iostat -k 2 3: Показать статистику процессора и устройства с задержкой.
- iostat -j ID mmcbkl0 sda6 -x -m 2 2: Показать статистику постоянных имен устройств.
- iostat -p: Показать статистику для блочных устройств.
- iostat -N: Показать статистическую информацию lvm2.
1) Команда iostat: команда iostat в linux используется для получения отчета и статистики.
Синтаксис:
Пример: вот пример.
Первый раздел содержит отчет о процессоре:
- % user: показывает процент использования ЦП при выполнении на уровне пользователя.
- % nice: показывает процент использования ЦП, произошедшего при выполнении на уровне пользователя с хорошим приоритетом.
- % system: показывает процент использования ЦП, произошедшего при выполнении на уровне системы (ядра).
- % iowait: показывает процент времени, в течение которого ЦП или ЦП находились в режиме ожидания, в течение которого система имела невыполненный запрос дискового ввода-вывода.
- % steal: показывает процент времени, затраченного на принудительное ожидание виртуальным процессором или процессорами, пока гипервизор обслуживал другой виртуальный процессор.
- % незанятости: показывает процент времени, в течение которого ЦП или ЦП находились в состоянии простоя, и система не имела невыполненного запроса дискового ввода-вывода.
Второй раздел вывода содержит отчет об использовании устройства:
- Устройство: имя устройства / раздела указано в каталоге / dev .
- tps: количество передач в секунду, которые были выданы устройству. Более высокое значение tps означает, что процессор загружен.
- Blk_read / s: показывает количество данных, считанных с устройства, выраженное в количестве блоков (килобайт, мегабайт) в секунду.
- Blk_wrtn / s: объем данных, записываемых на устройство, выраженный в количестве блоков (килобайт, мегабайт) в секунду.
- Blk_read: показывает общее количество прочитанных блоков.
- Blk_wrtn: показывает общее количество записанных блоков.
iostat использует файлы, указанные ниже, для создания отчетов:
- /proc/stat Содержит системную статистику.
- /proc/uptime Содержит время работы системы.
- /proc/diskstats Содержит статистику дисков.
- /sys Содержит статистику по блочным устройствам.
- /proc/self/mountstats Содержит статистику для сетевых файловых систем.
- /dev/disk Содержит постоянные имена устройств.
2) Команда iostat -x: эта команда отображает более подробную статистическую информацию. В результате команда iostat выдает отчет об использовании устройств ввода-вывода. Таким образом, можно расширить статистический результат для глубокой диагностики с помощью опции -x .
Синтаксис:
Пример:
- avg-cpu: Он сообщает нам информацию о блоке процессора.
- Devide: он сообщает нам информацию о блоке устройства. Чтобы быть уверенным, что вы находитесь на хорошем устройстве.
- % util : говорит нам о том, сколько времени устройство хранения выполняло выдающуюся работу (было занято).
- svctm : указывает, насколько быстро ваша подсистема ввода-вывода отвечает на запросы в целом, когда занята. На самом деле, чем меньше вы загружаете свою систему, тем выше svctm.
- await : указывает на скорость выполнения запросов. Это просто среднее.
- avgqu-sz : сообщает, сколько запросов в очереди. Низкий = либо ваша система не будет загружена, либо имеет сериализованный ввод-вывод и не может правильно использовать базовое хранилище. Высокий = ваш программный стек достаточно масштабируем, чтобы быть загруженным должным образом в основе ввода / вывода.
- avgrq-sz : это просто средний размер запроса, который может указывать на тип рабочей нагрузки.
- wsec / s & rsec / s : он сообщает нам количество читаемых и записываемых секторов в секунду. Разделите на 2048, и вы получите мегабайт в секунду.
- r / s & w / s : он сообщает нам запросы на чтение и запись в секунду. Эти цифры являются показателями емкости ввода / вывода, хотя, конечно, в зависимости от того, какое давление оказывается на подсистему ввода / вывода (размер очереди!), Они могут варьироваться.
- rrqm / s & wrqm / s : сообщает, сколько запросов было объединено на уровне блоков.
3) Команда iostat -c: эта команда показывает только статистику процессора. Можно показать статистическую информацию и отчет нашего процессора с параметром -c .
Синтаксис:
Пример:
4) Команда iostat -d: эта команда отображает только отчет об устройстве. Отображать статус использования устройства можно только с помощью опции -d . Будет собираться список информации для каждого подключенного устройства.
Синтаксис:
Пример:
5) Команда iostat -xd: эта команда показывает нам расширенную статистику ввода-вывода только для устройства. Мы можем отображать расширенную статистику с одной стороны, а с другой стороны мы можем отображать расширенную статистику. Это означает, что мы можем отображать расширенную статистику только для устройств с помощью опции -xd как -xd ниже:
Синтаксис:
Пример:
6) Команда iostat -k: эта команда записывает статистику в килобайтах или мегабайтах. По умолчанию iostat измеряет систему ввода-вывода в байтах. Чтобы было проще читать, мы можем преобразовать iostat, чтобы он отображал отчеты в килобайтах или мегабайтах.
Синтаксис:
Пример:
7) Команда iostat -m: используется для создания отчета с мегабайтами.
Синтаксис:
Пример:
8) Команда iostat -k 2 3: эта команда отображает статистику процессора и устройства с задержкой. То же самое с vmstat, поскольку инструмент статистики — лучший способ использовать его с параметром задержки. С задержкой, мы можем видеть, какова тенденция. Вот несколько примеров запуска iostat с задержкой.
Синтаксис:
Пример:
9) Команда iostat -c 2 2: Показать отчет только о процессоре с интервалом в 2 секунды и 2 раза.
Синтаксис:
Пример:
10) iostat -d sda7 sda6 2 2 Команда: Показать отчеты только для устройств sda6 и sda7 с интервалом в 2 секунды и 2 раза.
Источник