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

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

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

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

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

164 голоса | спросил Peter Krumins 27 Maypm09 2009, 13:52:46

7 ответов


89
  

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

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

  

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

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

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

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

  • убедитесь, что у вас есть свободная физическая память, поэтому ОС может кэшировать блоки диска в памяти
  • сохраните дисковое пространство вашей файловой системы ниже 80%, чтобы избежать чрезмерной фрагментации.
  • настроить вашу файловую систему
  • использовать контроллер с поддержкой батареи.
  • выберите хорошие размеры буфера при выполнении операций io
ответил Dave Cheney 27 Maypm09 2009, 14:28:43
41

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

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

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

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

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

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

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

См. сообщения от Дэйва Чейни и Ксеркса

Но и простой top будет отображаться в % wa.

Уменьшение значения IOWait

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

ответил Grumpy 25 TueEurope/Moscow2012-12-25T16:45:13+04:00Europe/Moscow12bEurope/MoscowTue, 25 Dec 2012 16:45:13 +0400 2012, 16:45:13
34

iowait

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

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

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

Инструменты

  • sar (из пакета sysstat, доступного на большинстве машин * nix)
  • IOSTAT
  • sarface (front-end для sar)
ответил Xerxes 27 Maypm09 2009, 14:32:52
24

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

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

  

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

     

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

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

  

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

И вот пример:

  

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

Полный текст стоит прочитать. Вот зеркало этой страницы , если оно не работает.

ответил Xerxes 27 Maypm09 2009, 14:32:52
1

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

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

ответил Milner 27 Maypm09 2009, 16:34:26
0

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

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

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

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

ответил Jeremy French 27 Maypm09 2009, 14:01:56
0

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

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

http://bencane.com/2012/08/06 /устранение неисправностей высокого-IO-ждать-в-Linux /

ответил Singo 1 Jpm1000000pmWed, 01 Jan 2014 19:50:34 +040014 2014, 19:50:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132