2016-11-07 32 views
6

mogę wyciągnąć następujące wartości procesora z libvirt:Co "cpu_time" oznacza dokładnie w 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 

Co ma postać cpu_time stanowią tutaj dokładnie?

Szukam obliczenia wykorzystania procesora jako procent przy użyciu tych danych.

Dzięki

Odpowiedz

9

To było zaskakująco trudne pytanie! Po pewnym czasie wylewu nad kodem jądrowym zorientowałem się, o co tu chodzi i dobrze jest wiedzieć, co się dzieje.

Zwykle dla procesu w systemie Linux całkowite użycie procesora jest po prostu sumą czasu spędzonego w przestrzeni użytkownika i czasu spędzonego na przestrzeni jądra. Tak naiwnie można się było spodziewać, że user_time + system_time będzie równa cpu_time. Odkryłem, że Linux śledzi czas spędzany przez wątki vCPU wykonującego kod gościa oddzielnie od przestrzeni użytkownika lub czasu jądra.

Zatem cpu_time == user_time + system_time + guest_time

Więc można myśleć jako system_time + user_time podając napowietrznej QEMU/KVM po stronie hosta. I cpu_time - (user_time + guest_time) jako podanie rzeczywistej ilości czasu, przez który system operacyjny gościa uruchamiał.

Aby obliczyć użycie procesora, prawdopodobnie chcesz tylko zarejestrować cpu_time co N sekund i obliczyć różnicę między dwiema próbkami. np. usage % = 100 * (cpu_time 2 - cpu_time 1)/N

+0

Fanastyczna odpowiedź w mojej opinii! –