• David Woodhouse's avatar
    KVM: x86/xen: Add support for vCPU runstate information · 30b5c851
    David Woodhouse authored
    
    
    This is how Xen guests do steal time accounting. The hypervisor records
    the amount of time spent in each of running/runnable/blocked/offline
    states.
    
    In the Xen accounting, a vCPU is still in state RUNSTATE_running while
    in Xen for a hypercall or I/O trap, etc. Only if Xen explicitly schedules
    does the state become RUNSTATE_blocked. In KVM this means that even when
    the vCPU exits the kvm_run loop, the state remains RUNSTATE_running.
    
    The VMM can explicitly set the vCPU to RUNSTATE_blocked by using the
    KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_CURRENT attribute, and can also use
    KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADJUST to retrospectively add a given
    amount of time to the blocked state and subtract it from the running
    state.
    
    The state_entry_time corresponds to get_kvmclock_ns() at the time the
    vCPU entered the current state, and the total times of all four states
    should always add up to state_entry_time.
    
    Co-developed-by: default avatarJoao Martins <joao.m.martins@oracle.com>
    Signed-off-by: default avatarJoao Martins <joao.m.martins@oracle.com>
    Signed-off-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
    Message-Id: <20210301125309.874953-2-dwmw2@infradead.org>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    30b5c851