[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] xen/smp: Speed up on_selected_cpus()


  • To: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Date: Fri, 4 Feb 2022 20:31:15 +0000
  • Authentication-results: esa6.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Jan Beulich <JBeulich@xxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, "Bertrand Marquis" <bertrand.marquis@xxxxxxx>
  • Delivery-date: Fri, 04 Feb 2022 20:31:51 +0000
  • Ironport-data: A9a23:jeRGMKLaWjI0vGW4FE+RlJMlxSXFcZb7ZxGr2PjKsXjdYENShWEAx 2IdWG+OOf7cZmKje9AlO4y1pEkDscTVzdZiQAZlqX01Q3x08seUXt7xwmUcns+xwm8vaGo9s q3yv/GZdJhcokcxIn5BC5C5xZVG/fjgqoHUVaiUakideSc+EH170Ug7x7Zi6mJVqYPR7z2l6 IuaT/L3YDdJ6xYsWo7Dw/vewP/HlK2aVAIw5jTSV9gS1LPtvyB94KYkDbOwNxPFrrx8RYZWc QphIIaRpQs19z91Yj+sfy2SnkciGtY+NiDW4pZatjTLbrGvaUXe345iXMfwZ3u7hB3QxOhr2 ssQh6W8VC43A/XTs/U8UgdhRnQW0a1uoNcrIFC6uM2XiUbHb2Ht07NlC0Re0Y8wo7gtRzsUr LpBdW5LPkvra+GemdpXTsFFgMg5IdatF4QYonx6lhnSDOo8QICFSKLPjTNd9Glr2pwfQ6eHD yYfQWpuNS7DYjAIBncGCsI5meSi3ljxcxQN/Tp5ooJoujOOnWSdyoPFMsfRe9GMbdVYmACfv G2u13v9KgEXMpqY0zXt2nihnPPVlCX3HocbDqSl9+VCiUeWgGcUDXU+a1y/pvWoj1+kbPhWI UcU5ykGoLA78QqgSdyVdz+SrWOAvxUcc8FNCOB84waIooLE7gDcCmUaQzppbN09qNRwVTEsz kWOnd7iGXpoqrL9YWmG6r6eoDe2OC4UBWwPfykJSU0C+daLiIM8lBXUVf54DbW4yNbyHFnNL yui9XZkwe9J1IhSivv9rQuvby+QSobhF1UN/BfJA1Cc4h5QerP9eKe5yFnF1KMVRGqGdWWps H8BksmYyekBC5CRiSCAKNkw8KGVC+Wta2OF3wM2d3U133H0oiP4I9gMiN1rDBoxaq45lSnVj Fg/UO+7zLtaJzOUYKB+eOpd4Ox6nPG7RbwJuh05B+eig6SdlifapEmChmbKhggBdXTAd4llY v93lu73VR4n5VxPlmbeegvk+eZDKtoC7W3SX4vn6B+szKCTYnWYIZ9cbgfVPrtksv7V+1qOm zq6Cyds408EOAEZSnKPmbP/0HhQdSRrbXwIg5A/mhG/zvpORzh6Vq65LUIJcI15haVF/tokD VnmMnK0PGHX3CWdQS3TMygLQOq2Af5X8CJqVQRxbA3A8yVyPu6HsvxFH7NpJuZPyQCW5aMtJ xXzU57bWaonp/Wu02l1UKQRW6Q7L0Xw3VvVZXL/CNX9FrY5LzH0FhbfVlOH3EEz4uCf7KPSe pWsiVHWR4QtXQNnAJqEYf6j1Qrp73MchPhzTw3DJdwKIBfg941jKirQiP4rIp5TdUWfl2XCj wvGUw0FoeTtopMu9IWbj66zsIr0QfB1GVBXHjeH4O/uZzXa5Geq3aRJTP2MIWLGTGrx9aj7P bdVwvjwPecphlFPt4YgQb9nwbhnv4nkpqNAzxQiF3LONgz5BrRlK3iA/M9OqqwSmeMJ5VroA hqCo4AIN6+INcXpFE8qCDAkNunTh+sJnjTy7OguJBmo7iFA47faA15ZOAOBiXIBIeItYp8l2 +oopOUf9xe71kgxKt+Dgy1ZqzaMI3gHX/l1v50WGta22A8iy1UEap3AEC7mppqIbowUYEUtJ zaVgovEhqhdmRWeIyZiSyCV0LoPn4kKtTBL0EQGdgaAldfyj/Mq2AFcrGYsRQNPwxQbi+9+N wCH7aGuyXliK9uwuPV+Yg==
  • Ironport-hdrordr: A9a23:Gj6SPqxIG5ls4WEMgE1jKrPwIL1zdoMgy1knxilNoRw8SKKlfq eV7ZMmPH7P+VIssR4b+exoVJPtfZq+z+8R3WByB8bAYOCOggLBR+sO0WKL+UyHJ8SUzI9gPM lbHJSWcOeAb2RHsQ==
  • Ironport-sdr: 8G6U1+/d5W+/dXI6+OeobctVbrMFSOCzWNsLdRH/r4BHBnxquu3Fl88+wAij+jYXy5xZrI6AR4 gFPn0d+L8MjdKsDj0Jb/I+9AyD7yNYa41l990Ki6z55XhesAsX45z8pNMQCIcX4AXNkSC7mbOg JQAboNz1XGKacHo+WoHY5fnpRVvySwqcJoig3ikVDjAtQ9KoH4T6LmCwrPw/r/MTln4sVovgF9 2NI0uGLvhRvMlh/0LGoNueDYiPoxRf10POg60YA4h6TBTpkzT/R5xoZA9Roh8LuPq9+znCIMRs y/1b1iK3PYZqPAky50azGGWc
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

cpumask_weight() is a horribly expensive way to find if no bits are set, made
worse by the fact that the calculation is performed with the global call_lock
held.

Switch to using cpumask_empty() instead, which will short circuit as soon as
it find any set bit in the cpumask.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
CC: Wei Liu <wl@xxxxxxx>
CC: Juergen Gross <jgross@xxxxxxxx>
CC: Stefano Stabellini <sstabellini@xxxxxxxxxx>
CC: Julien Grall <julien@xxxxxxx>
CC: Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
CC: Bertrand Marquis <bertrand.marquis@xxxxxxx>

I have not done performance testing, but I would be surprised if this cannot
be measured on a busy or large box.
---
 xen/common/smp.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/xen/common/smp.c b/xen/common/smp.c
index 781bcf2c246c..a011f541f1ea 100644
--- a/xen/common/smp.c
+++ b/xen/common/smp.c
@@ -50,8 +50,6 @@ void on_selected_cpus(
     void *info,
     int wait)
 {
-    unsigned int nr_cpus;
-
     ASSERT(local_irq_is_enabled());
     ASSERT(cpumask_subset(selected, &cpu_online_map));
 
@@ -59,8 +57,7 @@ void on_selected_cpus(
 
     cpumask_copy(&call_data.selected, selected);
 
-    nr_cpus = cpumask_weight(&call_data.selected);
-    if ( nr_cpus == 0 )
+    if ( cpumask_empty(&call_data.selected) )
         goto out;
 
     call_data.func = func;
-- 
2.11.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.