Почему процессор потратил время на IO (ва)?

18

Я знаю watop) измеряет время процессора при ожидании ввода / вывода. Многие статьи говорят об этом.

Но я смущен тем, что, основываясь на 2 точках знаний:

  1. если процесс использует системный вызов для чтения диска, процесс блокируется.
  2. Если процесс заблокирован, его нельзя запланировать на CPU.

Правильно?

Кажется, нет времени для ожидания процессора при вводе / выводе ... Что происходит?

Если мне порекомендуют книги или статьи для дальнейшего чтения, тем лучше.

ХУА Ди
источник
Я вошел и написал правильный ответ. Извините, я не был там, когда вы нуждались во мне ;-)
Алек Тил

Ответы:

22

Состояние простоя ЦП делится на два «подсостояния»: iowaitи idle.

Если процессор простаивает, ядро ​​затем определяет, выполняется ли в настоящее время хотя бы один ввод-вывод на локальном диске или на удаленно смонтированном диске (NFS), который был инициирован с этого процессора. Если есть, то процессор в состоянии iowait. Если нет ввода-вывода, который был запущен из этого ЦП, ЦП находится в idleсостоянии.

Таким образом, iowaitэто процент времени, в течение которого процессор простаивает И, по крайней мере, один ввод-вывод выполняется из этого процессора.

iowaitСчетчик утверждает , что система может работать с более вычислительной работы. Тот iowaitфакт, что процессор находится в состоянии, не означает, что он не может запускать другие потоки или процессы на этом процессоре.

Итак, iowaitэто просто форма простоя.

хаос
источник
Это на самом деле неверно. Также NFS - процессор даже не имеет понятия об этом. В основном это время, которое процессор потратил, неспособный сделать что-то еще, потому что он имеет дело с некоторыми низкоуровневыми операциями ввода-вывода - в смысле доступа к чему-то связанному с ним, НЕ обрабатывает ввод-вывод, который обычно читает файлы и еще много чего. Например, на Raspberry Pi нет контроллера DMA, поэтому процессор не может перейти: «Эй, материнская плата, прочитайте мне столько байтов, начиная с карты, и поместите их в RAM, начиная с этого», - он должен сделать это вручную
Алек Тил
таким образом, он тратит МНОГО времени, ПОСТОЯННО ожидая ввода и завершения считывания карты. Вы заставляете это звучать так, как если бы ошибка кэша могла быть измерена этим «ожиданием ввода-вывода » (которое, конечно, не учитывается), ожидание ввода-вывода определяется следующим образом: время, которое ядро ​​провело внутри процедуры ввода-вывода устройства низкого уровня, например RPi, он буквально должен выполнить процедуру чтения с карты, а ЦП (будучи чурбаном без DMA) должен ждать данных на шине ввода-вывода. С контроллером DMA он обращается к контроллеру и говорит: «Скажите мне, когда вы закончите», оставляя его для других дел, пока контроллер DMA выполняет IO устройства
Алек Тил
Используйте dstat, чтобы увидеть IOwaiting BTW, а также iowait и время, потраченное на работу с ядром, не может быть измерено для каждого процесса. Например, есть два процесса, «записывающих» в «файлы», первый быстро завершается, ФС выбрала для кэширования записи по любой причине, второй вызывает сброс кеша, нечестно считать намного более длительное время возврата от записи к процессу, который вызвал запись. То же самое с ожиданием ввода / вывода, поэтому они не измеряются для каждого процесса.
Алек Тил
4
@AlecTeal: Нет, это правильно, а ваши комментарии неверны. iowait считает время заблокированным на вводе / выводе, не обслуживая ввод / вывод. Если вы не хотите подтверждать это, прочитав исходный код ядра, попробуйте провести эксперимент: подключите сетевую файловую систему, начните чтение файла, а затем включите брандмауэр на удаленной машине. время iowait все еще будет высоким, даже если процессор полностью простаивает.
Дэвид
1
Я сделал тест на этот ответ. dd if=/dev/sda of=/dev/nullсделать высокий wa. Затем запустите код while-true, waвместо us. Спасибо, хаос.
HUA Di
-2

Я не уверен на 100%, что понимаю вопрос, но есть некоторые идеи.

Здесь есть еще один вопрос, который задал этот вопрос и имеет несколько хороших ответов: может кто-нибудь объяснить точно, что такое IOWait?

Здесь есть хороший пост: http://veithen.github.io/2013/11/18/iowait-linux.html

Майк Фидлер
источник
7
Майк, желательно, чтобы ответы включали контент, а не только ссылки на контент. Предоставляя контент здесь, вы гарантируете, что ваш ответ по-прежнему будет иметь значение, когда эти ссылки исчезнут.
EEAA
1
@ EEAA, тогда ответ нужно редактировать, а не трижды понизить? Или это может быть перемещено в комментарий. Он по-прежнему содержит полезную информацию. Понижающие голоса означают, что информация бесполезна, в том числе делает ее почти невидимой? Я не говорю, что вы понизили голос, я просто интересуюсь подходом, который люди используют здесь.
Роланд Пихлакас
3
@RolandPihlakas Это вопрос мотивации. Downvote + комментарий в этой ситуации дают пользователю мотивацию исправить свой ответ. Я с удовольствием уберу свой DVD после того, как ответ будет исправлен. Редактирование их неэффективно, так как допускает плохое поведение. За прошедшие годы у нас было несколько пользователей, которые только когда-либо публиковали ответы только по ссылкам, несмотря на то, что их просили не делать этого. Если пользователи не могут потрудиться над ответами, я не собираюсь помогать им, исправляя их работу.
EEAA
@EEAA Спасибо за подробный ответ. Ваш подход понятен, и через Ваши комментарии Вы также даете мотивационный подталкиватель автору ответа. Напротив, я боюсь, что молчаливые отрицательные голоса в основном не дают никакой практической мотивации, поскольку они неясны. Но я был немного неточен - меня больше всего интересовало, почему ответ был настолько недооценен, что он стал серым? Твой комментарий с одним или двумя отрицательными голосами должен был быть достаточным?
Роланд Пихлакас
2
@RolandPihlakas Люди думали, что ответ бесполезен, поэтому они проголосовали. Они проголосовали, потому что сегодня вторник. Они понизили голосование, потому что в Миннеаполисе сегодня идет снег (действительно, так и должно быть не так поздно весной). Кто знает.
EEAA