|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v5 1/1] xen/time: do not decrease steal time after live migration on xen
On 10/30/2017 08:14 PM, Dongli Zhang wrote: Hi Boris, On 10/30/2017 09:34 PM, Boris Ostrovsky wrote:On 10/30/2017 04:03 AM, Dongli Zhang wrote:After guest live migration on xen, steal time in /proc/stat (cpustat[CPUTIME_STEAL]) might decrease because steal returned by xen_steal_lock() might be less than this_rq()->prev_steal_time which is derived from previous return value of xen_steal_clock(). For instance, steal time of each vcpu is 335 before live migration. cpu 198 0 368 200064 1962 0 0 1340 0 0 cpu0 38 0 81 50063 492 0 0 335 0 0 cpu1 65 0 97 49763 634 0 0 335 0 0 cpu2 38 0 81 50098 462 0 0 335 0 0 cpu3 56 0 107 50138 374 0 0 335 0 0 After live migration, steal time is reduced to 312. cpu 200 0 370 200330 1971 0 0 1248 0 0 cpu0 38 0 82 50123 500 0 0 312 0 0 cpu1 65 0 97 49832 634 0 0 312 0 0 cpu2 39 0 82 50167 462 0 0 312 0 0 cpu3 56 0 107 50207 374 0 0 312 0 0 Since runstate times are cumulative and cleared during xen live migration by xen hypervisor, the idea of this patch is to accumulate runstate times to global percpu variables before live migration suspend. Once guest VM is resumed, xen_get_runstate_snapshot_cpu() would always return the sum of new runstate times and previously accumulated times stored in global percpu variables. Similar and more severe issue would impact prior linux 4.8-4.10 as discussed by Michael Las at https://0xstubs.org/debugging-a-flaky-cpu-steal-time-counter-on-a-paravirtualized-xen-guest, which would overflow steal time and lead to 100% st usage in top command for linux 4.8-4.10. A backport of this patch would fix that issue. References: https://0xstubs.org/debugging-a-flaky-cpu-steal-time-counter-on-a-paravirtualized-xen-guest Signed-off-by: Dongli Zhang <dongli.zhang@xxxxxxxxxx> --- Changed since v1: * relocate modification to xen_get_runstate_snapshot_cpu Changed since v2: * accumulate runstate times before live migration Changed since v3: * do not accumulate times in the case of guest checkpointing Changed since v4: * allocate array of vcpu_runstate_info to reduce number of memory allocation --- drivers/xen/manage.c | 2 ++ drivers/xen/time.c | 68 ++++++++++++++++++++++++++++++++++++++++++-- include/xen/interface/vcpu.h | 2 ++ include/xen/xen-ops.h | 1 + 4 files changed, 71 insertions(+), 2 deletions(-) diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c index c425d03..3dc085d 100644 --- a/drivers/xen/manage.c +++ b/drivers/xen/manage.c @@ -72,6 +72,7 @@ static int xen_suspend(void *data) }gnttab_suspend(); I'd probably just say something like si->cancelled = HYPERVISOR_suspend() ? 1 : 0;and keep xen_accumulate_runstate_time() as is (maybe rename it to xen_manage_runstate_time()). And also remove the comment above the hypercall as it is incorrect (but please mention the reason in the commit message)
I was thinking ofu64 **runstate_delta = (u64 **)kmalloc(sizeof(xen_runstate.time) * num_possible_cpus()) and then you should be able to access runstate_delta[cpu][RUNSTATE_*].
That's not what was thinking about. GFP_KERNEL may sleep and I don't know how sleep is handled at this point. Everything is pretty much dead now. Perhaps GFP_ATOMIC might be a better choice. -boris _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |