Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1403665
| From | Wanpeng Li <kernellwp@gmail.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | Re: [PATCH] KVM: halt-polling: poll if emulated lapic timer will fire soon |
| Date | 2016-05-19 13:40 +0200 |
| Message-ID | <rAut4-7xJ-21@gated-at.bofh.it> (permalink) |
| References | <rAsrf-6ir-1@gated-at.bofh.it> <rAujn-7ti-7@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
2016-05-19 19:23 GMT+08:00 Christian Borntraeger <borntraeger@de.ibm.com>:
> On 05/19/2016 11:26 AM, Wanpeng Li wrote:
>
> I think in general a good idea to poll if a timer will expire soon.
>
> Some patch comments:
>
> Same for all non-x86 archs:
>> +static inline unsigned int kvm_arch_timer_remaining(struct kvm_vcpu *vcpu) {}
>
> A function returning int, without a return statement?
> That gives at least a compiler warning.
How about return 0 for all non-x86 archs?
>
>> --- a/virt/kvm/kvm_main.c
>> +++ b/virt/kvm/kvm_main.c
>> @@ -78,6 +78,9 @@ module_param(halt_poll_ns_grow, uint, S_IRUGO | S_IWUSR);
>> static unsigned int halt_poll_ns_shrink;
>> module_param(halt_poll_ns_shrink, uint, S_IRUGO | S_IWUSR);
>>
>> +/* lower-end of message passing workload latency TCP_RR's poll time < 10us */
>> +static unsigned int halt_poll_ns_base = 10000;
>> +
>> /*
>> * Ordering of locks:
>> *
>> @@ -1966,7 +1969,7 @@ static void grow_halt_poll_ns(struct kvm_vcpu *vcpu)
>> grow = READ_ONCE(halt_poll_ns_grow);
>> /* 10us base */
>> if (val == 0 && grow)
>> - val = 10000;
>> + val = halt_poll_ns_base;
>> else
>> val *= grow;
>>
>> @@ -2015,11 +2018,15 @@ void kvm_vcpu_block(struct kvm_vcpu *vcpu)
>> DECLARE_SWAITQUEUE(wait);
>> bool waited = false;
>> u64 block_ns;
>> + unsigned int delta, remaining;
>>
>> + remaining = kvm_arch_timer_remaining(vcpu);
>
> and now it causes undefined behaviour, no?
Ditto.
>
>
>> start = cur = ktime_get();
>> - if (vcpu->halt_poll_ns) {
>> - ktime_t stop = ktime_add_ns(ktime_get(), vcpu->halt_poll_ns);
>> + if (vcpu->halt_poll_ns || (remaining < halt_poll_ns_base)) {
>> + ktime_t stop;
>>
>> + delta = vcpu->halt_poll_ns ? vcpu->halt_poll_ns : remaining;
>> + stop = ktime_add_ns(ktime_get(), delta);
>> ++vcpu->stat.halt_attempted_poll;
>> do {
>> /*
>>
>
> So you avoid to shrink/grow for these cases? Probably makes sense
I think my patch also shrink/grow for these cases.
Regards,
Wanpeng Li
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH] KVM: halt-polling: poll if emulated lapic timer will fire soon Wanpeng Li <kernellwp@gmail.com> - 2016-05-19 11:30 +0200
Re: [PATCH] KVM: halt-polling: poll if emulated lapic timer will fire soon Christian Borntraeger <borntraeger@de.ibm.com> - 2016-05-19 13:30 +0200
Re: [PATCH] KVM: halt-polling: poll if emulated lapic timer will fire soon Wanpeng Li <kernellwp@gmail.com> - 2016-05-19 13:40 +0200
Re: [PATCH] KVM: halt-polling: poll if emulated lapic timer will fire soon Christian Borntraeger <borntraeger@de.ibm.com> - 2016-05-19 13:50 +0200
Re: [PATCH] KVM: halt-polling: poll if emulated lapic timer will fire soon Wanpeng Li <kernellwp@gmail.com> - 2016-05-19 13:50 +0200
Re: [PATCH] KVM: halt-polling: poll if emulated lapic timer will fire soon Christian Borntraeger <borntraeger@de.ibm.com> - 2016-05-19 14:00 +0200
Re: [PATCH] KVM: halt-polling: poll if emulated lapic timer will fire soon Wanpeng Li <kernellwp@gmail.com> - 2016-05-19 14:10 +0200
csiph-web