Re: [PATCH RFC 2/2] kvm: set affinity hint for assigned device msi

From: Avi Kivity
Date: Thu Jan 12 2012 - 09:09:29 EST


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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/