/proc/PID/io: логические байты и обращения к хранилищу
Сравните rchar и read_bytes, снимите два показания счётчиков I/O и оцените разницу без смешения кеша, системных вызовов и реального хранилища.
Прочитанные байты не всегда пришли с диска
Приложение разобрало большой файл, а счётчик чтения с устройства почти не изменился. Это не обязательно ошибка наблюдения. Данные могли быть доступны из кеша; кроме того, разные показатели описывают разные уровни ввода-вывода.
Для расследования сначала выберите вопрос: сколько данных получила программа через операции чтения или сколько пришлось получать из слоя хранения. Снимки io помогают разделить эти величины и перестать сравнивать несопоставимые цифры.
Что именно накоплено в счётчиках
rchar и wchar связаны с байтами успешных операций чтения и записи, а read_bytes и write_bytes — с учётом слоя хранения. Файл содержит статистику процесса и дочерних процессов, которых он дождался. Это накопленные значения, не готовая скорость за секунду.
cancelled_write_bytes учитывает отменённую запись, например при усечении данных до их сброса. Поэтому простое обещание «каждый учтённый байт уже записан на устройство» неверно. Также счётчики не дают атомарного снимка всех операций.
Сравните два чтения одного процесса
Пример наблюдает текущую Bash без искусственной дисковой нагрузки. sleep задаёт паузу, но измеренный интервал будет немного длиннее из-за работы команд.
io_pid=$$
cat "/proc/$io_pid/io"
sleep 2
cat "/proc/$io_pid/io"Отделите разницу от скорости
Сопоставляйте одноимённые поля между снимками. Для собственного арифметического примера: rchar изменился с 8000 до 20000 байт, а read_bytes остался равен нулю. Из этого следует прирост логического чтения на 12000 байт; доказательства нового чтения с хранилища в этих числах нет.
Чтобы получить среднюю скорость, разделите разницу на реально измеренное время между снимками. Если использован только приблизительный интервал sleep, так и назовите оценку приблизительной. Для сравнения двух сервисов сохраняйте одинаковую длительность окна и учитывайте их дочерние процессы.
Проверьте своё рассуждение
Задача: rchar вырос, read_bytes не вырос. Можно ли по этому одному наблюдению утверждать, что файл вообще не читался?
Нет. Логическое чтение произошло, но оно не обязано требовать нового обращения к хранилищу. Для вывода о конкретном файле нужны дополнительные сведения: счётчики io агрегируют операции, а не перечисляют пути.
Наблюдатель тоже влияет на систему
При исследовании своей оболочки дочерние утилиты участвуют в опыте и могут влиять на учёт. Для рабочего расследования выбирайте отдельный процесс приложения. Перезапуск и повторное использование PID делают разность несопоставимых снимков бессмысленной; проверяйте объект перед вычислением.
Технические источники
Использованы для проверки поведения. Объяснения и учебные сценарии созданы для проекта.
- Linux man-pages — proc_pid_io(5)
Проверка текста: 2026-09-11. Нативное исполнение на всей матрице дистрибутивов ещё не подтверждено.
Нужны собственная Linux-система, смонтированный procfs и Bash. Доступность полей зависит от ядра, его конфигурации, прав и пространств имён. Примеры только читают диагностические интерфейсы; браузерный симулятор их не реализует.
От материала к практике
Выберите следующую тему в каталоге Linux или проверьте знакомые команды в учебном терминале.