Message ID | 78cc154863754a93d88070d1fae9fed6a1ec5f01.1622479161.git.huangy81@chinatelecom.cn (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | support dirtyrate at the granualrity of vcpu | expand |
On Tue, Jun 01, 2021 at 01:04:06AM +0800, huangy81@chinatelecom.cn wrote: > diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h > index 044f668a6e..973c193501 100644 > --- a/include/hw/core/cpu.h > +++ b/include/hw/core/cpu.h > @@ -375,6 +375,8 @@ struct CPUState { > struct kvm_run *kvm_run; > struct kvm_dirty_gfn *kvm_dirty_gfns; > uint32_t kvm_fetch_index; > + uint64_t dirty_pages; > + bool stat_dirty_pages; Shall we make this bool a global one? As I don't think we'll be able to only enable it on a subset of cpus?
在 2021/6/2 7:20, Peter Xu 写道: > On Tue, Jun 01, 2021 at 01:04:06AM +0800, huangy81@chinatelecom.cn wrote: >> diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h >> index 044f668a6e..973c193501 100644 >> --- a/include/hw/core/cpu.h >> +++ b/include/hw/core/cpu.h >> @@ -375,6 +375,8 @@ struct CPUState { >> struct kvm_run *kvm_run; >> struct kvm_dirty_gfn *kvm_dirty_gfns; >> uint32_t kvm_fetch_index; >> + uint64_t dirty_pages; >> + bool stat_dirty_pages; > > Shall we make this bool a global one? As I don't think we'll be able to only > enable it on a subset of cpus? Yes, it's a reasonable advice, i'll apply this on the next version >
On Wed, Jun 02, 2021 at 08:27:19AM +0800, Hyman Huang wrote: > 在 2021/6/2 7:20, Peter Xu 写道: > > On Tue, Jun 01, 2021 at 01:04:06AM +0800, huangy81@chinatelecom.cn wrote: > > > diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h > > > index 044f668a6e..973c193501 100644 > > > --- a/include/hw/core/cpu.h > > > +++ b/include/hw/core/cpu.h > > > @@ -375,6 +375,8 @@ struct CPUState { > > > struct kvm_run *kvm_run; > > > struct kvm_dirty_gfn *kvm_dirty_gfns; > > > uint32_t kvm_fetch_index; > > > + uint64_t dirty_pages; > > > + bool stat_dirty_pages; > > > > Shall we make this bool a global one? As I don't think we'll be able to only > > enable it on a subset of cpus? > Yes, it's a reasonable advice, i'll apply this on the next version Or even drop the bool and do the accounting unconditionally? No need to do +1 for each pfn, but do it once before returning from kvm_dirty_ring_reap_one().
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c index 2e96b77b31..52cba1b094 100644 --- a/accel/kvm/kvm-all.c +++ b/accel/kvm/kvm-all.c @@ -506,6 +506,9 @@ int kvm_init_vcpu(CPUState *cpu, Error **errp) } } + cpu->dirty_pages = 0; + cpu->stat_dirty_pages = false; + ret = kvm_arch_init_vcpu(cpu); if (ret < 0) { error_setg_errno(errp, -ret, @@ -739,6 +742,9 @@ static uint32_t kvm_dirty_ring_reap_one(KVMState *s, CPUState *cpu) cur->offset); dirty_gfn_set_collected(cur); trace_kvm_dirty_ring_page(cpu->cpu_index, fetch, cur->offset); + if (cpu->stat_dirty_pages) { + cpu->dirty_pages++; + } fetch++; count++; } diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index 044f668a6e..973c193501 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -375,6 +375,8 @@ struct CPUState { struct kvm_run *kvm_run; struct kvm_dirty_gfn *kvm_dirty_gfns; uint32_t kvm_fetch_index; + uint64_t dirty_pages; + bool stat_dirty_pages; /* Used for events with 'vcpu' and *without* the 'disabled' properties */ DECLARE_BITMAP(trace_dstate_delayed, CPU_TRACE_DSTATE_MAX_EVENTS);