New We are sorting MAX channels into categories and territories. Read the news

🐧 Linux может показать, какие процессы действительно тормозят диск, даже если iostat не объясняет задержки



👁 Высокая загрузка диска не всегда означает, что именно диск стал узким местом. Процессы могут надолго зависать в ожидании ввода-вывода, а средняя загрузка устройства не показывает, какие задачи испытывают задержки и как это отражается на системе. Для диагностики пригодятся PSI и трассировка блочного ввода-вывода.

📝 Проверяем давление из-за дисковых операций:

PSI показывает, сколько времени задачи теряют из-за ожидания ресурсов. Файл io позволяет быстро проверить, есть ли заметное давление ввода-вывода.



cat /proc/pressure/io
watch -n 1 cat /proc/pressure/io

📝 Находим процессы с накопленным временем ожидания I/O:

В /proc/PID/stat поле 42 — delayacct_blkio_ticks — содержит задержку процесса из-за блочного ввода-вывода в тактах ядра, если доступен соответствующий учёт задержек. Для быстрой диагностики можно посмотреть это значение у процессов с большим временем ожидания.



sudo bash -c '
for f in /proc/[0-9]*/stat; do
[ -r "$f" ] || continue
read -r line < "$f" || continue
rest=${line##*) }
set -- $rest
delay=${40}
pid=${f#/proc/}
pid=${pid%/stat}
printf "%12s %s\n" "$delay" "$pid"
done
' | sort -nr | head

📝 Записываем реальные задержки блочных запросов:

Если установлен bpftrace, можно посмотреть распределение времени выполнения операций на блочном уровне. Это помогает понять, возникают ли отдельные долгие запросы, которые теряются в средних показателях.



sudo bpftrace -e '
tracepoint:block:block_rq_issue {
@start[args->dev, args->sector] = nsecs;
}
tracepoint:block:block_rq_complete {
$key = (args->dev, args->sector);
if (@start[$key]) {
@latency_ms = hist((nsecs - @start[$key]) / 1000000);
delete(@start[$key]);
}
}'

❗️ Главное: PSI быстро показывает влияние I/O на задачи, а трассировка помогает исследовать задержки на уровне блочных запросов. Учитывайте, что доступность полей /proc зависит от конфигурации ядра, а привязка запросов по устройству и сектору в упрощённом BPF-примере не является надёжным способом сопоставления всех операций на нагруженном устройстве.

tags: #linux #производительность

🧭 @recura_tech
Views: 231
Open in MAX Report an inaccuracy

Report an inaccuracy

Describe what needs fixing. If you have a source, add a link.

You are leaving datool.ru

The link leads to an external website. datool.ru is not responsible for its content — check the address before entering passwords or payment details.

Redirecting in 10 s

Go