lkml.org 
[lkml]   [2012]   [Jan]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH RFC 2/2] kvm: set affinity hint for assigned device msi
On 10/11/2011 08:38 PM, Michael S. Tsirkin wrote:
> To forward an interrupt to a vcpu that runs on
> a host cpu different from the current one,
> we need an ipi which likely will cost us as much
> as delivering the interrupt directly to that cpu would.
>
> Set irq affinity hint to point there, irq balancer
> can then take this into accound and balance
> interrupts accordingly.
>
>
> +static void kvm_vcpu_host_irq_hint(struct kvm_vcpu *vcpu, int host_irq)
> +{
> + const struct cpumask *mask;
> + /* raw_smp_processor_id() is ok here: if we get preempted we can get a
> + * wrong value but we don't mind much. */
> + if (host_irq >= 0 && unlikely(vcpu->cpu != raw_smp_processor_id())) {
> + mask = get_cpu_mask(vcpu->cpu);
> + irq_set_affinity_hint(host_irq, mask);
> + }
> +}
> +
> int kvm_irq_delivery_to_apic(struct kvm *kvm, struct kvm_lapic *src,
> struct kvm_lapic_irq *irq, int host_irq)
> {
> @@ -102,6 +114,7 @@ int kvm_irq_delivery_to_apic(struct kvm *kvm, struct kvm_lapic *src,
> if (r < 0)
> r = 0;
> r += kvm_apic_set_irq(vcpu, irq);
> + kvm_vcpu_host_irq_hint(vcpu, host_irq);

Doing this every time seems excessive. How about doing it every N
interrupts? We can even collect information about which vcpus were
targeted, and then use a mask instead of just one vcpu.

--
error compiling committee.c: too many arguments to function



\
 
 \ /
  Last update: 2012-01-12 15:11    [W:0.066 / U:0.368 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site