CPU steal time. Процессорное время

Опубликовано:

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

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

Как узнать Steal time?

В Linux текущее значение счетчиков процессорного времени можно узнать из '/proc/stat'

-> % cat /proc/stat
cpu  1516074272 1711777 383910745 2885113398 5476142 359 124327397 155027109 0 0
cpu0 244061105 333664 61144582 500643726 1016634 0 16086853 25293076 0 0
cpu1 287890724 37591 79442458 389239098 720632 314 55865831 28681120 0 0
cpu2 246298419 325430 60938715 498726635 1014386 0 14305891 25196152 0 0
cpu3 246334944 335873 60815594 498857121 1015607 0 13268470 25178317 0 0
cpu4 245575508 340296 60733273 499034637 853450 18 12736096 25366733 0 0
cpu5 245913569 338920 60836121 498612178 855430 25 12064253 25311710 0 0
Формат:
[CPU*] user nice system idle iowait irq softirq steal guest guest_nice
  • Первая строка 'cpu' – сумма процессорного время для всех возможных CPU.
  • Строки 'cpu[0-9]*' - процессорное время для доступных гостевой ОС CPU.

Процессорное время – количество времени, затраченное процессором на выполнение определенных задач c момента включения ОС. Единицей измерения обычно является 1/100 секунды.

Посчитав разницу процессорного времени за определенный период, и найдя отношение steal time к сумме всего процессорного времени – найдем процент ‘украденных’ ресурсов – как это делает 'top' и другие системы мониторинга:

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 для обработки своих комманд из-за частого 'отбирания' процессорного времени.

Linux

Комментарии

Комментарии остутствуют