Linux анализ дисковой подсистемы

Команда iostat – анализ обмена данными с дисками

При оценке производительности системы, анализ дисковой подсистемы является не просто важным, но и обязательным этапом в совокупности мероприятий по оптимизации системы в целом. На практике довольно часто случается так, что именно из-за некорректной работы этого программно-аппаратного компонента не удаётся добиться заявленного или приблизиться к потенциальному уровню производительности. Дисковая подсистема — далеко не самый надёжный компонент в высоконагруженной системе и требует довольно тщательного обслуживания. Которое в свою очередь может определяться в результате умелого мониторинга и анализа работы дисков. Да и вообще устройств хранения. Стандартным инструментом, предоставляющим исчерпывающий функционал для задач анализа производительности дисковой подсистемы в Linux является утилита iostat – первоочередное средство для решения подобных задач в системном администрировании.

Установка утилиты iostat

В большинстве дистрибутивов Linux команда iostat недоступна, пока не установлен пакет systat.

$ sudo apt-get install sysstat

Синтаксис и основные опции команды iostat

Синтаксис команды iostat предполагает использование трёх основных опций. Среди которых: интервал замера (в секундах), количество отчётов, а также устройство. В общем виде синтаксис следующий:

iostat [-опции] [device […]] интервал количество_отчётов

В качестве параметра device задаётся анализируемое устройство хранения. Параметры интервал и количество_отчётов задают периодичность замеров и количество выводимых отчётов соответственно.

Среди дополнительных опций самыми полезными являются следующие:

Опция Значение
-p Показывает статистику для указанного устройства с детализацией по его разделам.
-s Выводит отчёты в кратком виде.
-x Выводит отчёты в подробном виде.
-t Выводит значение времени, в которое выполнялся/формировался каждый отчёт.

Остальные опции используются довольно редко. Об их назначении можно более подробно узнать из справочного руководства команды iostat: man iostat.

Примеры использования iostat

Если дать команду iostat без аргументов и опций, то по-умолчанию будет выведен стандартный отчёт для всех имеющихся в системе устройств хранения:

Как можно видеть, iostat выводит также и информацию об использовании центрального процессора. Параметрами же, характеризующими работу дисковой подсистемы для каждого устройства хранения являются:

  • tps – количество операций ввода/вывода в секунду;
  • kB_read/s – количество операций чтения в секунду;
  • kB_wrtn/s – количество операций записи в секунду;
  • kB_read – суммарный объём считанных данных;
  • kB_wrtn – суммарный объём записанных данных.
Читайте также:  Grub rescue при загрузке linux

Следует отметить, что при анализе значений tps, следует учитывать тот факт, что при одном запросе на пересылку данных может одновременно выполняться несколько запросов для ввода/вывода для сразу нескольких секторов. Поэтому данные результаты нужно сопоставлять с характеристиками самого устройства хранения (жёсткого диска) для получения объективной оценки. Ведь количество секторов может быть разным (в зависимости от используемого диска). И даже, если предположить, что обращение всегда происходит сразу ко всем секторам, то значение tps представляется довольно размытым.

Производительность дисковой подсистемы и её оптимизация

Главным параметром, заметно влияющим на производительность дисков является время, затрачиваемое на поиск требуемых блоков данных. Причём частота вращения самих дисков, а также пропускная способность шины данных диска решающей роли в производительности не играют. Хотя и несколько влияют на неё. На практике для поиска информации на диске выполняется от 100 до 300 операций поиска в секунду. Когда обращение происходит сразу к нескольким секторам диска, то скорость пересылки данных может исчисляться сотнями мегабайт в секунду. Однако, если происходит чтение всего с одного сектора после каждой операции поиска данных. То в этом случае может быть задействовано 5% (и менее) от максимально возможной пропускной способности диска.

Чем большие расстояния преодолевает головка жёсткого диска, тем меньше его производительность. Такое случается например, когда происходит одновременное обращение к нескольким файлам, которые расположены на разных разделах одного диска. Это обстоятельство необходимо учитывать при разметке диска и делать это таким образом, чтобы файлы, к которым происходит одновременное обращение, находились в одной файловой системе/разделе.

Положительно сказывается на производительности дисковой подсистемы также и размещение файловых систем (особенно тех, к которым очень часто происходит одновременное обращение) на отдельные физические диски. Это и понятно, ведь каждое устройство управляется и работает независимо друг от друга. Такой подход часто применяют в веб-хостинге, размещая файлы данных и файлы журналов веб-сервера и/или СУБД (системы управления базами данных) таким образом, чтобы они находились на разных дисках.

Также хорошо сказывается на производительности применение виртуальных дисков. Когда в системе работает специальный драйвер. Который ведёт себя как драйвер устройства хранения. Но на самом деле производит чтение/запись непосредственно в память. Конечно, данный способ применим разве что ко всякого рода временным данным. Вроде кешей, буферов демонов и т. д. Однако, если максимально избавить систему от «бремени» обработки временных файлов через диски. То в результате можно получить ощутимый прирост в производительности дисковой подсистемы. И как следствие — всей системы в целом.

Заключение

В заключение следует отметить, что использование команды iostat – более, чем достаточно для оценки производительности дисков. А вот реализация мер по оптимизации и повышению эффективности дисковой подсистемы требует скрупулёзной подготовки и трудоёмкой работы по программно-аппаратной организации всей системы.

Читайте также:  Узнать свой дистрибутив linux

Похожие записи:

Источник

Тестирование IOPS дисков в Linux

date

30.04.2020

user

VyacheslavK

directory

CentOS, Linux, Ubuntu

comments

Комментариев пока нет

В этой статье рассмотрим способы тестирования производительности IOPS дисков или дискового массива в Linux. IOPS (input/output operations per second) – количество операций ввода-вывода, выполняемые системой хранения данных за одну секунду (это может быть как один диск, RAID массив или LUN на системе хранения). Условно IOPS можно считать количество блоков, которые успевает считаться или записаться на носитель.

Для большинства дисков производители указывают номинальные значения IOPS, но такие значение на практике не гарантируются. Для понимания производительности вашей дисковой подсистемы перед запуском проекта желательно получить значения IOPS.

Установка утилиты fio для тестирования IOPS в Linux

Для замера производительности IOPS дисков в Linux можно использовать утилиту fio (утилита доступна для CentOS в репозитории EPEL). Соотвественно для установки fio в RHEL, CentOS используется пакетный менеджер yum (dnf):

# yum install epel-release -y
# yum install fio -y

Либо apt-get в Debian, Ubuntu :

yum install fio в centos

Затем вам нужно определить диски для тестирования. Тестирование выполняется путев выполнения операций записи/чтения в той директории, в которую примонтирован диск или LUN.

Измерение производительности дисков в IOPS с помощью fio

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

Тест случайных операций на чтение/запись

При запуске такого теста, будет создан файл размером 8 Гб. Затем утилита fio выполнит чтение/запись блока 4КБ (стандартный размер блока) с разделением на 75/25% по количеству операций чтения и записи и замерит производительность. Команда выглядит следующим образом:

# fio —randrepeat=1 —ioengine=libaio —direct=1 —gtod_reduce=1 —name=fiotest —filename=testfio —bs=4k —iodepth=64 —size=8G —readwrite=randrw —rwmixread=75

fio утилита тести iops в linux centos

Первую проверку я запустил на массиве из двух SSD дисков и результаты получились хорошие:

READ: bw=328MiB/s (344MB/s), 328MiB/s-328MiB/s (344MB/s-344MB/s), io=6141MiB (6440MB), run=18721-18721msec WRITE: bw=110MiB/s (115MB/s), 110MiB/s-110MiB/s (115MB/s-115MB/s), io=2051MiB (2150MB), run=18721-18721msec
  • Чтение: ~ 328MiB/s, 83000 IOPS
  • Запись: ~ 110MiB/s, 28000 IOPS

Так как мы запустили тест на чтение/запись, показатели по отдельным проверкам, будут чуть выше.

Для сравнения, я замерил скорость на обычном SATA диске:

iops sata диска

Для HDD диска результаты, конечно гораздо хуже, чем для SSD.

Тест случайных операций на чтение

Чтобы замерить производительность дисков только для случайных операций на чтение, нужно выполнить следующую команду:

# fio —randrepeat=1 —ioengine=libaio —direct=1 —gtod_reduce=1 —name=fiotest —filename=testfio —bs=4k —iodepth=64 —size=8G —readwrite=randread

Читайте также:  Linux create links to all files

Команда поменялась в самом конце на —readwrite=randread .

iops ssd диска на случайные операции чтения

Как ранее я уже говорил, скорость по отдельным замерам будет выше:

READ: bw=584MiB/s (612MB/s), 584MiB/s-584MiB/s (612MB/s-612MB/s), io=8192MiB (8590MB), run=14027-14027msec, IOPS - 150000

Если запустить тест только на чтение, разница со смешанным тестом достигает (200-250 MiB/s и 67000 IOPS), что достаточно ощутимо.

Тест случайных операций на запись

Для замера производительности диска для случайных операций записи, выполните команду:

# fio —randrepeat=1 —ioengine=libaio —direct=1 —gtod_reduce=1 —name=fiotest —filename=fiotest —bs=4k —iodepth=64 —size=8G —readwrite=randwrite

fio тестирование iops диска на random запись в linux

WRITE: bw=331MiB/s (347MB/s), 331MiB/s-331MiB/s (347MB/s-347MB/s), io=8192MiB (8590MB), run=24767-24767msec, IOPS 84700

Производительность операций записи на хороших SSD дисках тоже очень высокая. Как и в случае с чтением, разница со смешанным тестом достигает 200-250 MiB/s, а в IOPS 56000.

Если опираться на официальную документацию по дискам от производителя (это SSD диски от Intel), можно смело сказать, что в данном случае они не обманули.

Тестирование производительности дисков с помощью файлов.

Утилита fio позволяет проверять диски не только с помощью интерактивного запуска команд, но и запускать заранее подготовленные конфигурационные файлы для тестов. Чтобы воспользоваться данным вариантом, создайте файл:

И добавьте в него содержимое:

[global] rw=randread size=8G filename=/tmp/testfio ioengine=libaio iodepth=4 invalidate=1 direct=1 [bgread] rw=randread iodepth=64

Данный тест замерит скорость чтения диска. Чтобы выполнить проверку производительности для операций записи, используйте такой конфиг:

[global] rw=randwrite size=8G filename=/tmp/testfio ioengine=libaio iodepth=4 invalidate=1 direct=1 [bgwrite] rw=randwrite iodepth=64

Проверка latency диска с помощью ioping

Помимо IOPS есть еще один важный параметр, характеризующий качество вашей дисковой подсистемы – latency. Latency – это время задержки выполнения запроса ввода/вывода и характеризуют время доступа к системе хранения (измеряется в миллисекундах). Чем выше latency, тем больше приходится ждать вашему приложения данных от дисковой подсистемы. Для типовых систем хранения значения latency более 20 мс считаются плохими.

Для проверки latency диска используется утилита ioping:

Запустите тест latency для диска (выполняется 20 запросов):

Среднее значение 298.7 us (микросекунд), т.е. средняя latency диска в нашем случае 0.3 ms, что очень хорошо.

Значение latency может быть указано в us (микросекундах) или в ms (миллисекундах). Т.е. для получения из us значения в ms нужно разделить его на 1000.

Таким образом, вы можете провести нагрузочное тестирование дисковой подсистемы на вашем сервере до запуска проекта и получить максимальную производительность. Конечно такой тест не дает гарантий, что дисковый массив или диск будет постоянно гарантировать такую производительность, но на начальном этапе это тест, который обязательно нужно выполнить. Методика тестирования IOPS в Windows описана в этой статье.

Предыдущая статьяПредыдущая статья Следующая статья Следующая статья

Источник

Оцените статью
Adblock
detector