Cpu steal time

Steal time - кількість процесорного часу, протягом якого, віртуальна машина не мала доступу до ресурсів CPU. Актуально тільки для гостьових ОС у віртуальному середовищі.

Внаслідок того, що віртуальні машини на одному фізичному хості поділяють ресурси CPU, host-платформі необхідно розділяти ресурси CPU між усіма гостьовими OC. І то процесорний час, яке було 'відібрано' у гостьовій OC, на потреби сусідів або самої host-платформи - називають Steal time.

Як дізнатися Steal time?

У Linux поточне значення лічильників процесорного часу можна дізнатися з '/ proc / stat'

формат:
  • Перший рядок 'cpu' - ​​сума процесорного час для всіх можливих CPU.
  • Рядки 'cpu [0-9] *' - процесорний час для доступних гостьовий ОС CPU.

Процесорний час - кількість часу, витрачений процесором на виконання певних завдань c моменту включення ОС. Одиницею виміру зазвичай є 1/100 секунди.

Порахувавши різницю процесорного часу за певний період, і знайшовши відношення steal time до суми всього процесорного часу - знайдемо відсоток 'вкрадених' ресурсів - як це робить 'top' і інші системи моніторингу:

Складнощі інтерпретації свідчень

Принцип підрахунку витраченого процесорного часу заснований на періодичному (переривання від системного таймера - IRQ0) визначенні поточної працює, в момент переривання, програми. Наприклад, між періодами обробки IRQ0. процесор може обробляти інструкції якийсь невеликої програми, тоді як в момент переривання процесор може перебувати в стані 'idle' - відповідно лічильником витраченого процесорного часу не буде врахована час на обробку цієї нетривалої програми. Тобто значення витраченого процесорного часу не 100%, але прийнято вважати, що в реальності, значення досить точні.
Для підрахунку ж Steal time - Linux ядро ​​може ще якихось цифри: як довго віртуальній машині не надавалися ресурси процесора. У разі KVM. як довго віртуальна машина чекала своєї черги на виконання в 'Kernel scheduler' (Треба б це перевірити ще раз - але виглядає що так і є).

На що це впливає

Чим більше CPU steal time за одиницю часу, тим частіше host-платформа забирала ресурси CPU (частіше переривала роботу процесора для обробки команд сусідніх гостьових ОС або самої host-платформи).
У разі web-сервера - тим частіше переривалася обробка запитів користувачів. І як наслідок - зростання response time. Але заздалегідь передбачити поведінку сервера і додатків досить складно - залежить від безлічі інших чинників, наприклад, від кількості Idle time. кількості доступних CPU, кол-ву запитів в секунду і т.п. Якщо Idle time малий, а steal time високий - тоді думаю можна говорити про те, що гостьовий ОС не вистачає ресурсів CPU для обробки своїх команд через частого 'відбирання' процесорного часу.