Это был удивительно сложный вопрос, на который нужно ответить! После того, как я пролил код ядра, я понял, что здесь происходит, и довольно приятно узнать, что происходит.
Обычно для процесса в 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
Фанастический ответ на мой взгляд! –