Message ID | 20130304180206.31281.67229.sendpatchset@codeblue.in.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 3/4/2013 10:02 AM, Raghavendra K T wrote: > From: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com> > > Note that we mark as preempted only when vcpu's task state was > Running during preemption. > > Thanks Jiannan, Avi for preemption notifier ideas. Thanks Gleb, PeterZ > for their precious suggestions. Thanks Srikar for an idea on avoiding > rcu lock while checking task state that improved overcommit numbers. > > Signed-off-by: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com> > --- > include/linux/kvm_host.h | 1 + > virt/kvm/kvm_main.c | 5 +++++ > 2 files changed, 6 insertions(+) > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index cad77fe..0b31e1c 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -252,6 +252,7 @@ struct kvm_vcpu { > bool dy_eligible; > } spin_loop; > #endif > + bool preempted; > struct kvm_vcpu_arch arch; > }; > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index adc68fe..83a804c 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -244,6 +244,7 @@ int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id) > > kvm_vcpu_set_in_spin_loop(vcpu, false); > kvm_vcpu_set_dy_eligible(vcpu, false); > + vcpu->preempted = false; > > r = kvm_arch_vcpu_init(vcpu); > if (r < 0) > @@ -2902,6 +2903,8 @@ struct kvm_vcpu *preempt_notifier_to_vcpu(struct preempt_notifier *pn) > static void kvm_sched_in(struct preempt_notifier *pn, int cpu) > { > struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn); > + if (vcpu->preempted) > + vcpu->preempted = false; > > kvm_arch_vcpu_load(vcpu, cpu); > } > @@ -2911,6 +2914,8 @@ static void kvm_sched_out(struct preempt_notifier *pn, > { > struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn); > > + if (current->state == TASK_RUNNING) > + vcpu->preempted = true; > kvm_arch_vcpu_put(vcpu); > } > > > . > Reviewed-by: Chegu Vinod <chegu_vinod@hp.com> -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 03/05/2013 08:49 PM, Chegu Vinod wrote: > On 3/4/2013 10:02 AM, Raghavendra K T wrote: >> From: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com> >> >> Note that we mark as preempted only when vcpu's task state was >> Running during preemption. >> >> Thanks Jiannan, Avi for preemption notifier ideas. Thanks Gleb, PeterZ >> for their precious suggestions. Thanks Srikar for an idea on avoiding >> rcu lock while checking task state that improved overcommit numbers. >> >> Signed-off-by: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com> >> --- >> include/linux/kvm_host.h | 1 + >> virt/kvm/kvm_main.c | 5 +++++ >> 2 files changed, 6 insertions(+) >> >> diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h >> index cad77fe..0b31e1c 100644 >> --- a/include/linux/kvm_host.h >> +++ b/include/linux/kvm_host.h >> @@ -252,6 +252,7 @@ struct kvm_vcpu { >> bool dy_eligible; >> } spin_loop; >> #endif >> + bool preempted; >> struct kvm_vcpu_arch arch; >> }; >> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c >> index adc68fe..83a804c 100644 >> --- a/virt/kvm/kvm_main.c >> +++ b/virt/kvm/kvm_main.c >> @@ -244,6 +244,7 @@ int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct >> kvm *kvm, unsigned id) >> kvm_vcpu_set_in_spin_loop(vcpu, false); >> kvm_vcpu_set_dy_eligible(vcpu, false); >> + vcpu->preempted = false; >> r = kvm_arch_vcpu_init(vcpu); >> if (r < 0) >> @@ -2902,6 +2903,8 @@ struct kvm_vcpu *preempt_notifier_to_vcpu(struct >> preempt_notifier *pn) >> static void kvm_sched_in(struct preempt_notifier *pn, int cpu) >> { >> struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn); >> + if (vcpu->preempted) >> + vcpu->preempted = false; >> kvm_arch_vcpu_load(vcpu, cpu); >> } >> @@ -2911,6 +2914,8 @@ static void kvm_sched_out(struct >> preempt_notifier *pn, >> { >> struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn); >> + if (current->state == TASK_RUNNING) >> + vcpu->preempted = true; >> kvm_arch_vcpu_put(vcpu); >> } >> >> . >> > Reviewed-by: Chegu Vinod <chegu_vinod@hp.com> Thank you Vinod. Gleb, Marcelo, any comment, concern on the patches? -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index cad77fe..0b31e1c 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h @@ -252,6 +252,7 @@ struct kvm_vcpu { bool dy_eligible; } spin_loop; #endif + bool preempted; struct kvm_vcpu_arch arch; }; diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index adc68fe..83a804c 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -244,6 +244,7 @@ int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id) kvm_vcpu_set_in_spin_loop(vcpu, false); kvm_vcpu_set_dy_eligible(vcpu, false); + vcpu->preempted = false; r = kvm_arch_vcpu_init(vcpu); if (r < 0) @@ -2902,6 +2903,8 @@ struct kvm_vcpu *preempt_notifier_to_vcpu(struct preempt_notifier *pn) static void kvm_sched_in(struct preempt_notifier *pn, int cpu) { struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn); + if (vcpu->preempted) + vcpu->preempted = false; kvm_arch_vcpu_load(vcpu, cpu); } @@ -2911,6 +2914,8 @@ static void kvm_sched_out(struct preempt_notifier *pn, { struct kvm_vcpu *vcpu = preempt_notifier_to_vcpu(pn); + if (current->state == TASK_RUNNING) + vcpu->preempted = true; kvm_arch_vcpu_put(vcpu); }