Глава 4: Анализ дискового I/O
Обзор
Дисковый I/O часто является узким местом, маскирующимся под другие проблемы. DiskCollector использует двухточечное сэмплирование /proc/diskstats и обогащает данные из sysfs.
Функции
| Функция | Что делает | Источник |
|---|---|---|
readDiskStats() |
Парсит счётчики I/O по устройствам (14+ полей) | /proc/diskstats |
readScheduler() |
Читает активный планировщик I/O | /sys/block/DEV/queue/scheduler |
readQueueDepth() |
Максимальная глубина очереди I/O | /sys/block/DEV/queue/nr_requests |
Анализ задержек (Tier 2)
Среднее время ответа (await) из /proc/diskstats часто вводит в заблуждение при смешанной нагрузке.
biolatency
Строит гистограмму задержек ввода-вывода. - Позволяет увидеть хвостовые задержки (p99). - Пример: Среднее 2мс, но p99 = 50мс (фризы).
ext4slower / fileslower
Показывает конкретные операции с файлами, которые заняли больше 10мс. - Видно: PID, имя файла, тип операции (READ/WRITE). - Помогает найти, какой файл тормозит систему.
biosnoop
Трассирует каждый I/O запрос. Внимание: генерирует много вывода!
Конвенция 512-байт секторов
Независимо от реального размера сектора диска (512 или 4096 байт), /proc/diskstats всегда считает в 512-байтных секторах.
I/O планировщики
| Планировщик | Лучше для | Как работает |
|---|---|---|
mq-deadline |
Базы данных, общее | Гарантирует макс. задержку запроса |
bfq |
Десктопы | Справедливое разделение полосы |
kyber |
Быстрые SSD | Минимальные накладные расходы |
none |
NVMe | Без планирования, прямая отправка |
Ключевые метрики
| Метрика | Значение |
|---|---|
| IOTimeMs / 10 | Утилизация (%) |
| IOInProgress > 8 | Насыщение очереди |
| WeightedIOMs | Задержка × глубина |
Далее: Глава 5 — Анализ сети