2016-11-07 4 views
6

я могу тянуть следующие значения CPU от Libvirt:Что означает «cpu_time» точно в libvirt?

virsh domstats vm1 --cpu-total 
Domain: 'vm1' 
    cpu.time=6173016809079111 
    cpu.user=26714880000000 
    cpu.system=248540680000000 

virsh cpu-stats vm1 --total 
Total: 
    cpu_time  6173017.263233824 seconds 
    user_time  26714.890000000 seconds 
    system_time  248540.700000000 seconds 

Что делает cpu_time фигуры представляют здесь именно?

Я ищу, чтобы вычислить загрузку процессора в процентах, используя эти данные.

Thanks

ответ

9

Это был удивительно сложный вопрос, на который нужно ответить! После того, как я пролил код ядра, я понял, что здесь происходит, и довольно приятно узнать, что происходит.

Обычно для процесса в Linux общее использование ЦП - это просто сумма времени, затраченного на использование в пространстве пользователей, и время, затрачиваемое на пространство ядра. Поэтому наивно можно было бы ожидать user_time + system_time равным cpu_time. Я обнаружил, что Linux отслеживает время, затраченное на потоки vCPU, выполняющие гостевой код отдельно от пользовательского пространства или времени ядра.

Таким образом cpu_time == user_time + system_time + guest_time

Таким образом, вы можете думать о system_time + user_time как предоставление накладных расходов QEMU/KVM на стороне хоста. И cpu_time - (user_time + guest_time) - как фактическое количество времени, в течение которого гостевая ОС запускала свои процессоры.

Чтобы вычислить использование ЦП, вы, вероятно, просто хотите записать cpu_time каждые N секунд и рассчитать дельта между двумя образцами. например usage % = 100 * (cpu_time 2 - cpu_time 1)/N

+0

Фанастический ответ на мой взгляд! –

Смежные вопросы