Чому процесор витратив час на IO (wa)?


18

Я знаю, що watop) вимірює час процесора на очікування вводу / виводу. Багато статей говорять про це.

Але мене бентежить, що, виходячи з 2 балів знань:

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

Правильно?

Здається, немає часу, щоб процесор очікував на введення / виведення ... Що станеться?

Якщо рекомендувати якісь книги чи статті для подальшого читання, тим краще.


Я ступив і написав належну відповідь. Вибачте, що я не був там, коли ви потребували мене ;-)
Alec Teal

Відповіді:


22

Статус роботи в режимі очікування розділений на дві різні "під" стани: iowaitі idle.

Якщо процесор працює в режимі очікування, то ядро ​​визначає, чи є принаймні один ввід / вивід, який зараз виконується, або на локальний диск, або на віддалено встановлений диск (NFS), який був ініційований із цього процесора. Якщо є, то процесор знаходиться в стані iowait. Якщо в процесі вводу / виводу немає ініціатора, який був ініційований цим процесором, ЦП знаходиться в idleстані.

Отже, iowaitце відсоток часу, коли процесор працює в режимі очікування, і є щонайменше один введення-вивід у процесі роботи, ініційований цим процесором.

У iowaitлічильнику зазначено, що система може виконувати більш обчислювальну роботу. Тільки тому, що ЦП знаходиться в iowaitстані, не означає, що він не може запускати інші потоки або процеси в цьому процесорі.

Отже, iowaitце просто форма простою.


Це насправді помилково. Також NFS - процесор навіть не має цього поняття. Це, в основному, час, який процесор витратив не в змозі зробити щось інше, оскільки він має справу з деякими елементами вводу-виводу низького рівня - у сенсі доступу до чогось підключеного до нього НЕ обробляють введення-виведення, яке зазвичай читає файли та інше. Наприклад, на Raspberry Pi немає контролера DMA, тому процесор не може перейти "ей материнська плата, прочитавши мені це багато байтів, починаючи тут з карти, і поклавши їх в таран, починаючи тут", це потрібно зробити вручну->
Alec Teal

тож він витрачає багато часу, ПОСЛІДНО чекаючи іо, як для картки, прочитаної для завершення. Ви вважаєте, що пропуск кешу може бути виміряний за допомогою цього "іо очікування" (що, звичайно, не враховується), очікування вводу- виводу визначається наступним чином: час, який ядро ​​провів у режимі вводу / виводу пристрою низького рівня - наприклад RPi, він буквально повинен виконувати процедуру зчитування з картки, і процесор (будучи безконтактним DMA) повинен чекати даних на шині IO. З контролером DMA, він розмовляє з контролером і каже "скажи мені, коли ти закінчиш" - залишаючи це робити інші речі, поки контролер DMA робить IO пристрою
Alec Teal

Використовуйте dstat, щоб побачити IOwaiting BTW, а також очікування та час, витрачений на виконання ядер, справді не можна виміряти за кожний процес. Скажімо, є два процеси "запису" у "файли", перший завершується швидко, ФС вирішив кешувати записи з будь-якої причини, другий змушує кеш залишитись, не чесно рахувати набагато довший час повернення від запису до процесу, який спричинив запис. Те саме з очікуванням вводу / виводу, тому вони не вимірюються за кожний процес.
Alec Teal

4
@AlecTeal: Ні, це правильно, а ваші коментарі неправдиві. iowait рахує час, заблокований на вводу / виводу, не обслуговуючи введення / виведення. Якщо ви не хочете підтвердити це, прочитавши джерело ядра, спробуйте експеримент: встановіть мережеву файлову систему, починайте читати файл і потім брандмауер відключити віддалену машину. Час очікування все ще буде великим, хоча процесор повністю працює.
Девід

1
Я зробив тест на цю відповідь. dd if=/dev/sda of=/dev/nullзробити високий wa. Тоді запустіть код true-true, waа не us. Спасибі хаосу.
HUA Di

-2

Я не на 100% впевнений, що розумію питання, але є деякі ідеї.

Тут є ще одне запитання, яке задало це питання, і має кілька хороших відповідей: Чи може хтось точно пояснити, що таке IOWait?

Тут є хороший пост: http://veithen.github.io/2013/11/18/iowait-linux.html


7
Майку, бажано, щоб відповіді містили вміст, а не лише посилання на зміст. Надаючи тут вміст, ви гарантуєте, що ваша відповідь все ж має значення, коли ці посилання відійдуть.
ЄЕАА

1
@EEAA, тоді відповідь потрібно редагувати, а не потрійно звучати? Або його можна перенести в коментар. Він все ще містить корисну інформацію. Нижчі символи означають, що інформація є марною, також роблячи її майже непомітною? Я не кажу, що ви зробили прихильність, я просто цікавлюсь підходом людей тут.
Roland Pihlakas

3
@RolandPihlakas Це питання мотивації. Downvote + коментар у цій ситуації дає мотивацію користувачеві виправити свою відповідь. Я із задоволенням зніму відеокліп після того, як відповідь буде виправлена. Редагування цих контрпродуктивних, оскільки дає можливість погану поведінку. У нас було кілька користувачів на протязі багатьох років , які тільки коли - небудь опублікованих посилань тільки відповіді, незважаючи на те , попросили не робити цього. Якщо користувачі не зможуть докласти трохи зусиль для своїх відповідей, я не збираюся допомагати їм, виправляючи їх роботу.
ЄЕАА

@EEAA Дякую за детальну відповідь. Ваш підхід зрозумілий, і завдяки Вашим коментарям Ви також мотивуєте мотивацію для автора відповіді. На відміну від цього, я боюся, що мовчазні голоси не мають жодної практичної мотивації, оскільки вони незрозумілі. Але я був трохи неточний - мені було цікаво здебільшого, чому відповідь настільки спростовано, що вона стала сірою? Ваш коментар з однією чи двома голосами повинен був бути достатнім?
Roland Pihlakas

2
@RolandPihlakas Люди вважали, що відповідь не є корисною, тому вони схвалили. Вони відмовились, бо вівторок. Вони прихильні, тому що сьогодні в Міннеаполісі сніг (насправді, так і не повинно бути цього пізньої весни). Хто знає.
ЄЕАА
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.