Re: [PATCH] x86/irq: Do not check available vectors if current CPU has no irq to migrate

From: Thomas Gleixner
Date: Fri Apr 14 2017 - 16:37:32 EST


On Mon, 10 Apr 2017, Chen Yu wrote:
> I've just done a comparison of the function duration of
> check_irq_vectors_for_cpu_disable() with/without the patch
> (32 online CPUs)
> before patch:
> [001] d..1 264.017803: check_irq_vectors_for_cpu_disable <-native_cpu_disable
> [001] d..1 264.017886: clear_local_APIC <-native_cpu_disable
> after patch:
> [001] d..1 862.011847: check_irq_vectors_for_cpu_disable <-native_cpu_disable
> [001] d..1 862.011850: clear_local_APIC <-native_cpu_disable
> About (83 - 17) = 66 microsecond.

Not really impressive if you subtract the tracer overhead. Though, if you
want to micro optimize that, then you should do it proper and also break
the for_each_cpu_loop() when the count reaches the required vectors.

Thanks,

tglx

--- a/arch/x86/kernel/irq.c
+++ b/arch/x86/kernel/irq.c
@@ -411,8 +411,10 @@ int check_irq_vectors_for_cpu_disable(vo
for (vector = FIRST_EXTERNAL_VECTOR;
vector < first_system_vector; vector++) {
if (!test_bit(vector, used_vectors) &&
- IS_ERR_OR_NULL(per_cpu(vector_irq, cpu)[vector]))
- count++;
+ IS_ERR_OR_NULL(per_cpu(vector_irq, cpu)[vector])) {
+ if (++count == this_count)
+ return 0;
+ }
}
}