3.9.24.9 Анализ производительности блочных устройств (blktrace) и построение графиков на основе собранных данных (iowatcher)
Установка
Возможности blktrace
Возможности iowatcher
Примеры использования
Окружение
- Версия РЕД ОС: 8
- Конфигурация: Рабочая станция
- Версия ПО: blktrace-1.0.5-10, iowatcher-1.0-8
blktrace – это инструмент для трассировки событий блочного ввода/вывода, который использует трассировщик blktrace в ядре. Это низкоуровневый инструмент, отображающий множество событий для каждой операции ввода/вывода. blktrace используется в качестве вспомогательного инструмента в программных решениях, предназначенных для анализа и диагностики проблем производительности в системах хранения данных.
iowatcher – утилита, позволяющая анализировать данные, подготовленные с помощью blktrace и строить на основе этих данных графики (в том числе и анимированные). Т.е. инструмент blktrace позволяет записывать события в файлы трассировки для последующей визуализации с помощью утилиты iowatcher. Поэтому работу iowatcher не стоит рассматривать отдельно от blktrace.
С помощью iowatcher также можно запускать blktrace с последующим созданием графика трассировки одной командой.
Установка
Для установки утилит перейдите в сеанс пользователя root:
su -
и выполните команду:
dnf install blktrace iowatcher
Возможности blktrace
Основные возможности:
трассировка событий на уровне драйвера блочного устройства;
результаты можно обработать через
blkparse
или визуализировать сiowatcher
;утилита
btrace
объединяет вызовыblktrace
иblkparse
.
Примеры эквивалентных команд:
blktrace -d /dev/sda -o - | blkparse -i -
btrace /dev/sda
Ниже приведен пример трассировки события «запись в файл на примере команды echo 1 > test.txt
».
btrace /dev/sdb
8,16 5 1 0.000000000 193450 A RM 973080688 + 8 <- (8,17) 973078640
8,16 5 2 0.000000744 193450 Q RM 973080688 + 8 [bash]
8,16 5 3 0.000003993 193450 G RM 973080688 + 8 [bash]
8,16 5 4 0.000004498 193450 P N [bash]
8,16 5 5 0.000005205 193450 UT N [bash] 1
8,16 5 6 0.000005495 193450 I RM 973080688 + 8 [bash]
8,16 5 7 0.000014361 266 D RM 973080688 + 8 [kworker/5:1H]
8,16 3 1 0.001309172 0 C RM 973080688 + 8 [0]
8,16 5 8 0.001354482 193450 A W 976766976 + 8 <- (8,17) 976764928
8,16 5 9 0.001354754 193450 Q W 976766976 + 8 [bash]
8,16 5 10 0.001356122 193450 G W 976766976 + 8 [bash]
8,16 5 11 0.001356303 193450 P N [bash]
8,16 5 12 0.001357581 193450 D W 976766976 + 8 [bash]
8,16 3 2 0.001417097 0 C W 976766976 + 8 [0]
Структура строки вывода
В выводе представлено несколько строк – по одной на каждое действие (событие), связанное с очередью блочного устройства или с самим устройством.
По умолчанию выводится семь столбцов:
1. Старший и младший номер устройства.
2. Идентификатор процессора.
3. Порядковый номер события.
4. Время события в секундах от начала трассировки.
5. Идентификатор процесса.
6. Идентификатор действия: тип события (например, Q — запрос в очередь).
7. Описание RWBS: флаги ввода/вывода.
Расшифровка событий blkparse
Далее приведено описание идентификаторов из страницы справочного руководства для blkparse. Этот список показывает, какие события может наблюдать фреймворк blktrace:
A – ввод/вывод был отображен на другое устройство;
B – дополнительный ввод/вывод;
C – ввод/вывод завершен;
D – запрос передан драйверу;
F – запрос добавлен в начало другого запроса, находившегося в очереди;
G – выделение памяти для запроса;
I – запрос добавлен в очередь планировщика ввода/вывода;
M – запрос добавлен в конец другого запроса, находившегося в очереди;
P – блокировка очереди для накопления нескольких запросов;
Q – ввод/вывод передан коду, который управляет очередью;
S – ожидание освобождения структуры для размещения запроса;
T – разблокировка очереди по тайм-ауту;
U – разблокировка очереди;
X – запрос разделен.
Расшифровка флагов RWBS
Для нужд мониторинга ядро позволяет описать тип каждой операции ввода/вывода с помощью строки символов — rwbs
. Она применяется в blktrace и в других инструментах трассировки, определена в функции ядра blk_fill_rwbs() и использует следующие символы:
R – чтение (read);
W – запись (write);
M – метаданные (metadata);
S – синхронная (synchronous);
A – опережающее чтение (read-ahead);
F – выталкивание на диск или принудительное обращение к блоку (flush or force);
D – отмена (discard);
E – стирание (erase);
N – нет операции (none).
Символы могут комбинироваться. Например, «WM» означает «запись метаданных».
Возможности iowatcher
Наиболее часто используемые параметры запуска:
-d – определяет, какое устройство отслеживать, параметр перенаправляется в blktrace для создания новой трассировки;
-p – инициирует запуск другой программы во время снятия трассировки. Программа и аргументы ее запуска должны быть указаны после всех остальных параметров утилиты iowatcher;
-K – сохраняет файлы SVG для создания анимированного графика;
-t – определяет расположение и имя файла, в котором хранятся трассировки blktrace. Можно указывать только каталог с набором трассировок;
-l – добавляет метки на графике;
-m – создает анимированный график;
-T – задает заголовок, который будет размещен в верхней части графика;
-o – определяет расположение и имя файла для SVG или видео;
-h – задает высоту графика;
-w – задает ширину графика;
-с – количество столбцов в графике;
-x – ограничивает диапазон обрабатываемого времени;
-P – различать процессы в графике ввода/вывода;
-O – позволяет генерировать только необходимые графики (по умолчанию генерируются все);
-N – противоположность параметра -О, определяет тот график, который нужно пропустить.
Поддерживаемые типы графиков
Утилита iowatcher следующие варианты графиков:
io – общая активность ввода/вывода;
tput – пропускная способность;
latency – задержка;
queue_depth – глубина очереди;
iops – количество операций в секунду;
cpu-sys, cpu-io, cpu-irq, cpu-user, cpu-soft – загрузка CPU по видам активности.
Примеры использования
Для того чтобы снять показания с блочного устройства (диска) за определенный интервал времени, необходимо выполнить команду:
blktrace -w 300 -d /dev/sda1 -o- > trace.dump
где:
-w 300 – интервал времени в секундах, в течение которого будут сниматься показания;
-d /dev/sda1 – устройство, с которого будет сниматься статистика ввода-вывода;
-o- – вывод статистики в консоль;
> trace.dump – сохранение вывода в файл trace.dump.
Для создания графиков используется утилита iowatcher.
iowatcher -t trace.dump -o trace.svg
Файл trace.svg можно открыть в браузере или любом другом графическом редакторе.
Для просмотра файла trace.svg в браузере Firefox выполните:
firefox trace.svg
Для просмотра файла в браузере Chromium выполните:
chromium-browser trace.svg
Для просмотра файла в графическом редакторе:
libreoffice --draw trace.svgПосле открытия файла trace.svg отобразятся графики активности ввода/вывода на устройстве.
Device IO – на графике изображены отдельные операции ввода-вывода, выполненные в конкретное время и на определенной позиции на устройстве. Каждая точка на графике представляет собой одну из этих операций: синяя точка указывает на операцию записи, а зеленая — на операцию чтения.
Throughput – на графике представлено количество данных, обработанных устройством в процессе выполнения операций ввода-вывода (синим – объем записанных данных, зеленым – прочитанных).
IO Latency – на графике представлено время, затраченное операциями ввода-вывода от запроса до выполнения. Этот параметр отражает задержку, с которой система обрабатывает запросы на чтение или запись данных.
Queue Depth – на графике изображено количество ожидающих запросов на выполнение операции ввода-вывода.
IOPs – на графике изображено количество операций ввода-вывода в секунду выполняемых системой.
Дополнительные типовые примеры использования:
Создать график из существующего файла трассировки:
iowatcher -t trace
Пропустить график ввода/вывода в создаваемом файле trace.svg:
iowatcher -t trace.dump -o trace.svg -N io
Сгенерировать график только с показаниями latency (задержка):
iowatcher -t trace.dump -o trace.svg -O latency
Запустить тест fio и снять трассировку этого процесса через blktrace на устройстве /dev/sda, при этом fio будет запущен с параметрами, которые указаны в
-p fio some_job_file
:
iowatcher -d /dev/sda -t trace.dump -T 'Fio Benchmark' -p 'fio some_job_file'
Снять трассировку с диска /dev/sdb и сразу создать график:
iowatcher -d /dev/sdb -t trace -o trace.svg
Анимированный график активности ввода/вывода можно получить при помощи команды (перед использованием убедитесь, что установлен пакет ffmpeg):
iowatcher -t trace.dump --movie -o trace.mp4
Дата последнего изменения: 15.05.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.