Я искал iowait
свойство, показанное в выводе верхней утилиты, как показано ниже.
top - 07:30:58 up 3:37, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
iowait
обычно определяется следующим образом:
«Это время, в течение которого процессор простаивает и ожидается некоторое количество операций ввода-вывода».
Насколько я понимаю, процесс выполняется на одном процессоре. После того, как он был перенесен из-за того, что он использовал свой временной интервал, или после того, как он был заблокирован, он может быть снова запланирован снова на любом одном процессоре.
В случае запроса ввода-вывода процессор, который переводит процесс в непрерывный режим сна, отвечает за отслеживание iowait
времени. Другие процессоры будут сообщать о времени простоя на своем конце, поскольку они действительно простаивают. Это предположение верно?
Кроме того, предполагая, что существует длинный запрос ввода-вывода (то есть процесс имел несколько возможностей для планирования, но не был запланирован, потому что ввод-вывод не был завершен), как процессор узнает, что существует «ожидающий ввод-вывод»? Откуда взята такая информация? Как процессор может просто обнаружить, что какой-то процесс был приостановлен на некоторое время для завершения ввода-вывода, поскольку любой из процессоров мог бы перевести этот процесс в спящий режим. Как подтверждается этот статус «ожидающий IO»?
источник
Ответы:
Процессор не знает ничего из этого, планировщик задач знает.
Определение, которое вы цитируете, несколько вводит в заблуждение; текущая
procfs(5)
man-страница имеет более точное определение с предостережениями:iowait
пытается измерить время, потраченное на ожидание ввода / вывода, в общем. Это не отслеживается с помощью конкретного процессора, и не может быть (пункт 2 выше - что также соответствует тому , что вас интересует). Это измеряется на процессор, хотя, насколько это возможно.Планировщик задач «знает», что существует ожидающий ввод-вывод, потому что он знает, что приостановил заданную задачу, потому что он ожидает ввода-вывода. Это отслеживается для каждой задачи в
in_iowait
областиtask_struct
; вы можете искатьin_iowait
в ядре планировщика, чтобы увидеть, как он установлен, отслеживается и очищается. Недавняя статья Брендана Грегга о средних значениях нагрузки для Linux содержит полезную справочную информацию.iowait
Запись в/proc/stat
, которая является то , что в конце концов вtop
, увеличивается всякий раз , когда клещ таймер учитывается и текущий процесс «на» CPU находится в режиме ожидания; Вы можете убедиться в этом, посмотрев код отслеживания времени процессораaccount_idle_time
в планировщике .Таким образом, более точное определение было бы «время, потраченное на этот процессор, ожидая ввода-вывода, когда не было ничего лучше» ...
источник