[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <alpine.DEB.2.20.1704142232280.2327@nanos>
Date: Fri, 14 Apr 2017 22:36:56 +0200 (CEST)
From: Thomas Gleixner <tglx@...utronix.de>
To: Chen Yu <yu.c.chen@...el.com>
cc: Prarit Bhargava <prarit@...hat.com>,
Ingo Molnar <mingo@...hat.com>,
"H. Peter Anvin" <hpa@...or.com>,
"Rafael J. Wysocki" <rafael.j.wysocki@...el.com>,
Len Brown <len.brown@...el.com>, x86@...nel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH] x86/irq: Do not check available vectors if current CPU
has no irq to migrate
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;
+ }
}
}
Powered by blists - more mailing lists