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;
+                       }
                }
        }
 

Reply via email to