Вопрос: Может ли кто-нибудь объяснить, что такое IOWait?


Насколько я читал об iowait, это все еще остается загадкой для меня.

Я знаю, что время, затраченное на то, чтобы процессор ожидал завершения операций ввода-вывода, но какие именно операции ввода-вывода точно? Я тоже не уверен, почему это так важно? Не может ли процессор сделать что-то еще, пока операция ввода-вывода завершена, а затем вернуться к обработке данных?

Также каковы правильные инструменты для диагностики того, какие процессы (ы) точно подождали IO.

И каковы способы минимизировать время ожидания ввода-вывода?


164
2018-05-27 09:52


Источник


А также, что такое высокий иовайт? - Muhamed Huseinbašić


Ответы:


Я знаю, что время, затраченное на процессор   ожидая операций ввода-вывода для   полный, но какой IO   операции точно? Я тоже   Не уверен, почему это так важно?   Не может процессор просто сделать что-то еще   пока операция ввода-вывода завершена, и   а затем вернуться к обработке данных?

Да, операционная система будет планировать запуск других процессов, пока один из них заблокирован в IO. Однако внутри этого процесса, если он не использует асинхронный ввод-вывод, он не будет прогрессировать, пока не завершится какая-либо операция ввода-вывода.

И какие правильные инструменты для   диагностировать, какие процессы (ы) сделали точно   дождитесь ввода-вывода.

Некоторые инструменты, которые могут вам пригодиться

  • iostat, чтобы отслеживать время обслуживания ваших дисков
  • iotop (если ваше ядро ​​его поддерживает), чтобы отслеживать разбивку запросов ввода-вывода на процесс
  • strace, чтобы посмотреть на фактические операции, выданные процессом

И каковы способы минимизации IO   время ожидания?

  • убедитесь, что у вас есть свободная физическая память, поэтому ОС может кэшировать блоки диска в памяти
  • сохраните дисковое пространство вашей файловой системы ниже 80%, чтобы избежать чрезмерной фрагментации
  • настроить свою файловую систему
  • использовать контроллер с батарейным питанием
  • выбирать хорошие размеры буфера при выполнении операций io

89
2018-05-27 10:28



Не забудьте «убедитесь, что ваше хранилище данных достаточно быстро, чтобы не отставать от нагрузки ввода / вывода». - jgoldschrafe
@Dave Чейни, И когда мой процесс простаивает, это потому, что он ждет на IO. Так в чем же разница между IOWait и простоя? - ctrl-alt-delor
Когда в IOwait процесс находится в режиме «бесперебойного сна», то есть его нельзя убить, чтобы избежать риска повреждения данных на дисках. обычный простой процесс действительно ничего не делает, поэтому есть меньше рисков, убивающих его. - mveroone
Практически это означает, что ваш IO слишком медленный. «Сделать сервер быстрее» отличается от того, ограничен ли процессор или ваш процессор голодает, потому что кто-то решил, что медленного ноутбука достаточно для запуска сервера базы данных, а загрузка ввода-вывода делает процессор использовать только 2% от того, что он может, ожидая, сумасшедший для ввода-вывода. - TomTom
OMG Я не могу поверить, что первые 3 ответа здесь так неправильно, Ответ ниже by haridsv правильный. Никакой процессор не «ждет» для завершения io. Да, некоторые io могут блокировать - часто есть веская причина для этого, и при некоторых обстоятельствах все io могут блокироваться. Но вы также можете увидеть, что iowait происходит для полностью асинхронных операций. - symcbean


Старый вопрос, недавно наткнулся, но чувствовал, что существующих ответов было недостаточно.

Определение и свойства IOWait

IOWait (обычно обозначается как %wa в верхней части) является подкатегорией простоя (%idle обычно выражается как все бездействующие, кроме определенных подкатегорий), то есть процессор ничего не делает. Поэтому, если есть другой процесс, который процессор может обрабатывать, он сделает это. Кроме того, простой, пользовательский, системный, iowait и т. Д. - это измерение по отношению к процессору. Другими словами, вы можете думать о iowait как о простоях, вызванном ожиданием io.

Точно, iowait - это время, потраченное на прием и обработку аппаратных прерываний в процентах от тиков процессора. Программные прерывания обычно передаются отдельно как %si,

Важность и потенциальное заблуждение

IOWait важен, потому что часто это ключевой показатель, чтобы знать, есть ли у вас узкое место в IO. Но отсутствие iowait не обязательно означает, что ваше приложение не узкое место на IO. Рассмотрим два приложения, запущенные в системе. Если программа 1 сильно загрязнена и программа 2 является тяжелым пользователем ЦП, %user + %system CPU все еще может быть примерно на 100% и, соответственно, iowait будет показывать 0. Но это только потому, что программа 2 является интенсивной и относительно не говорит ничего о программе 1, потому что все это с точки зрения процессора.

Инструменты для обнаружения IOWait

Посмотреть сообщения от Dave Cheney и Xerxes

Но и простой top будет показано в %wa,

Уменьшение IOWait

Кроме того, поскольку мы сейчас почти в 2013 году, в дополнение к тому, что говорят другие, мы можем выбрать просто удивительные устройства хранения IO, а именно SSD. SSD - потрясающие !!!


41
2017-12-25 12:45





iowait

iowait это время, когда процессор / процессоры ждут (то есть находится в незанятое состояние и делает ничего), во время которого на самом деле был выдающиеся запросы ввода-вывода диска.

Обычно это означает, что блок-устройства (то есть физические диски, а не память) являются слишком медленными или просто насыщенными.

Поэтому вы должны заметить, что если вы видите среднее значение средней нагрузки в вашей системе и обратите внимание на то, что большинство из них на самом деле связано с ожиданием ввода-вывода, это не обязательно означает, что ваша система находится в затруднении - и это происходит, когда ваш машине просто нечего делать, кроме процессов, связанных с I / O-привязкой (т.е. процессов, которые делают больше ввода-вывода, чем что-либо еще (системные вызовы, не связанные с I / O)). Это также должно быть очевидно из того факта, что все, что вы делаете в системе, все еще очень отзывчиво.

инструменты

  • sar (из sysstat пакет, доступный на большинстве машин * nix)
  • iostat
  • sarface (интерфейсный sar)

34
2018-05-27 10:32



Заметим, что строгое определение времени ожидания ввода-вывода действует только на однопроцессорных системах. Он должен быть несколько усовершенствован для многопроцессорных систем: veithen.blogspot.be/2013/11/iowait-linux.html - Andreas Veithen
До какой степени iowait влияет Load Average? Скажем, 100 потоков, ожидающих сети, будет LA 100? - Ivan Balashov


Я нашел объяснение и примеры из этой ссылки очень полезными: Что такое «iowait»?, BTW, для полноты, здесь I / O относится к дисковым ввода-выводам, но может также включать ввод-вывод на сетевом диске (например, nfs), как описано в это другое сообщение,

Я приведу несколько важных разделов (в случае, если ссылка будет мертвой), некоторые из них будут повторением того, что уже сказали другие, но для меня, по крайней мере, это было яснее:

Чтобы суммировать его в одном предложении, «iowait» - это процент времени   CPU находится в режиме ожидания, и по крайней мере один ввод-вывод выполняется.

Каждый процессор может находиться в одном из четырех состояний: user, sys, idle, iowait.

Мне было интересно, что происходит, когда в системе есть другие процессы, готовые к запуску, пока один процесс ожидает ввода-вывода. Ниже объясняется это:

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

И вот пример:

Предположим, что на процессоре работают две программы. Один - это «дд»   чтение программы с диска. Другая - это программа, которая не выполняет ввода-вывода   но тратит 100% своего времени на выполнение вычислительной работы. Теперь предположим   что существует проблема с подсистемой ввода / вывода и что физические входы / выходы   занимают второе место для завершения. Всякий раз, когда программа 'dd'   спящий, ожидая завершения ввода-вывода, другая программа   способный работать на этом CPU. Когда происходит прерывание часов,   всегда быть программой, работающей в любом режиме пользователя или в системном режиме.   Следовательно, значения% idle и% iowait будут равны 0. Хотя iowait   0, это не означает, что нет проблемы ввода-вывода, потому что   очевидно, является одним, если физические входы / выходы занимают секунду   полный.

Полный текст стоит прочитать. Вот зеркало этой страницы, в случае его снижения.


24
2018-05-27 12:34





Для Solaris я использую DTrace, чтобы посмотреть, что делают процессы, если мне нужно увидеть, какие операции ввода-вывода выполняются. Для Linux существует аналогичная программа, называемая Systemtap который обеспечивает аналогичный уровень воздействия на ядро ​​и вызовы процессов.

Один пример, который я использовал при обучении DTrace, - это сравнить cp команду dd команда. Ты это видишь dd гораздо больше читает для записи, тогда как cp не является, главным образом, из-за размера буфера dd использует по умолчанию (если я правильно помню).


1
2018-05-27 10:01





Какие операции ввода-вывода будут зависеть от ваших приложений и настроек.

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

Чтобы минимизировать время ввода-вывода, купите все больше и быстрее памяти, получите более быстрые диски, дефрагментируйте диски, которые у вас есть.

Если это внутреннее приложение, которое является узким местом, посмотрите, можно ли его оптимизировать для чтения в больших блоках или для ввода IO асинхронно.


0
2018-01-01 15:50



Хорошо, поэтому iowait - это время, проведенное в блокирование IO? - Peter Krumins
Например, если я делаю select () или poll (), и он блокируется, тогда время ожидания до появления дескриптора будет составлять время iowait? - Peter Krumins
Я думаю, что это будет принадлежать SO, поскольку это похоже на вопрос программирования. - Jeremy French
Петерис - да, это хороший способ подумать об этом. - user2278


используя ps aux can print процесс STAT
если stat - D или Ds, процесс находится в режиме бесперебойного сна (обычно IO)
когда процесс переходит в Бесперебойный сон, добавляется nr_iowait runqueue, а если nr_iowait> 0, время простоя CPU сравнивается с iowait

vmstat также показывает, сколько блоков процесса
r: количество процессов, ожидающих времени выполнения.
b: Количество процессов в режиме бесперебойного сна.

http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/


0