From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1031211AbcJRQNA (ORCPT ); Tue, 18 Oct 2016 12:13:00 -0400 Received: from mail-bn3nam01on0105.outbound.protection.outlook.com ([104.47.33.105]:51232 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1030230AbcJRQMv (ORCPT ); Tue, 18 Oct 2016 12:12:51 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=waiman.long@hpe.com; Message-ID: <580649F8.2080809@hpe.com> Date: Tue, 18 Oct 2016 12:12:40 -0400 From: Waiman Long User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20130109 Thunderbird/10.0.12 MIME-Version: 1.0 To: Waiman Long CC: Andrew Morton , Ingo Molnar , Oleg Nesterov , Thomas Gleixner , Stas Sergeev , , Scott J Norton , Douglas Hatch Subject: Re: [PATCH v3] signals: Avoid unnecessary taking of sighand->siglock References: <1474979209-11867-1-git-send-email-Waiman.Long@hpe.com> In-Reply-To: <1474979209-11867-1-git-send-email-Waiman.Long@hpe.com> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [71.168.64.155] X-ClientProxiedBy: BY2PR12CA0010.namprd12.prod.outlook.com (10.160.121.20) To TU4PR84MB0318.NAMPRD84.PROD.OUTLOOK.COM (10.162.186.28) X-MS-Office365-Filtering-Correlation-Id: 19c16191-e68f-4d4f-e540-08d3f7719aab X-Microsoft-Exchange-Diagnostics: 1;TU4PR84MB0318;2:bYy+ao8thuqWSqvAsAOu5svCKZFoPGsPMaZYdXYu4kAG3rjqaLrKDvfgpz97Xt7i8mLT4oGb/zrvHBETW907DWktiU3xzNl8HzjP4/dzRKt97nBTjZqvWahz0qniBpV1XxVAp1H4MOMrTThVszvXfSejXZXYrUmCzDNoiP1ns5D1g2Ovq7h9IhVBXHMFtEKUHfd2ueTKWtV9UcrVHeoXLg==;3:dMwlKHe/R4hwh6+5y+wp3VPL90liflL9E7wNKvhGqUfepSIwxiQ53i4NX8SJbpkXf0iNS6l4C6X1kr1Mg3HzrExrBKjMhveeOoL70eqTRSnt2gvH+hNvWef84xA8FkmgqsJB3LgYQr9OQB2IiBIBtg==;25:qNUwRNow3xUxozbpLBN587yEPz3w2y8uUeasOOJCRCT/b4UFkfLpvX7QmLoVrZ66miPsMdZwSmKf80cIwiQfRfUxJ/S6gfOjyDQcO26Lm3IHYKlTfo4S5Pq0rwj57bbWzXhS8YfdxYG3FJKaBXU42FDVhFRcdjE/TZvuw4fp0to9XdmK6w4C8Elkn7Y7HPSs8BjCZ5WwLPl2HPNrmPMuOuVosUvj3hh5qzXLQEA6MCsc0N7ugrDfTA/08A3q+JB4NuYX9GJZdu9ukMhHUE5yyP3y42eZXIGmbqU23AZcBzIl6KcgcEi9kMwBVhc0/LvoDsxDxldfbkYF6mCOldmrFDFfaF6dChCY7mYlAOqoI0cTUoFJ6fcaZzVC0RwdOgj/gveZRiAVDu1b6wz4hyKgfRzCYCsdkTmE22Jn6vTGEtvojxmpiKoiPEmnXqmeG6h5 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:TU4PR84MB0318; X-Microsoft-Exchange-Diagnostics: 1;TU4PR84MB0318;31:lV/H0mvn5IMnnNIwFbTUkf2QOQL3r58+y5p+kWbNHOFX1EHM/g5pfgq15FzTzM9VDFvWsdSK6AyikF4/GJ8J7lX4FvJbZJWPdaADjxYPiHvBYw34ddY9qtrzU3YBPD0l6C4dApLW1qKJXrhUEec+88gl848dJ88pemtAvHlwpEVSVUsg5vZZATy+iIL4XjI1w1NP6ySZzWu96eint/Q5Cp6qIQtuRmLnT/LEjlWaZdN1bKI/clMCAEKBi6+xQr99CRTe0KZXek8xJGADJtlZSA==;20:4VLl6IwSfhXDzNAhxfV0JwwQQe113h9YlBuBud2OVljZKivh5uIVnUBweVGyf2NnaB5IjBAPeXLzIO9hZpPqvVRJJukOe8cY6e2VY1085Mn7MnKx5wouemyVCjlYj+/N9+akQnI0FfdtYXTJriiL05Ed60ZjtePMsxriuBIWjJ5YTbc8vd+ARnC/Ss5RB9RUj+TBScYuCYs/1ita5Z20uagH4maLy3QYMoEcEqiMvb2SMcgfiAWprDTLH665NaJytOdPqhwhwDjAQ91uXoYs5aYZHJz42lIcMdnYzXU6RW0iu2uhLya0b0V8V8x9Smn1U89o2bRnpwYYm4PTuOPT67k/nwDaUg5WM7nXR/GNVoC+8a/bO/1Ikng9TqFNW4up8TE/UmYPO9UeiEkWFJIghJgn+C8mByr7O+198Tt4e3qHEMAPPneVX65F1ZRwv7ZH7Hkx5p8ao5Af6e0632wKZ3Rp4/RWyQ0z93MLTzd0VuC5enouSaTam2smVdsIijfn X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(227479698468861); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:TU4PR84MB0318;BCL:0;PCL:0;RULEID:;SRVR:TU4PR84MB0318; X-Microsoft-Exchange-Diagnostics: 1;TU4PR84MB0318;4:SK8bwoL77Z1P8p16vsEcdVRdoJF7/Ufx6F9Z5QBJAC8giYbbdwA/3eSV7KBrHZBoPtGZIj8qnuZf6+hP9LAb5Xqym3iLmc/dUbn4rnzRtt8w3ZUR8QhOoZaZJMB35e001+ix2gMMnDKeAYmWRnv7t9tUyNVED0C52/6BcwpuszkdXSnP1p0SOg71fT/wWtgtmUNh1u2HVP3fhKkLoFkA+p1TZkkfYVhe2YJ6KozShW5Ii+5U6qHHIL9SlQ6kGRJTV1AemXN0hZgyNsBYDt2k2Cuv5jYgmOaG0Jqzz89y6P21Gk4cxTSTtBJTJZnArMe/UAD9jN4YAVfPiCGvR8MMCJ96jY+Dwclv2WwIAm3JpoLO/p+oL7SE04WaQ0ehYXpUUdojn2h9tMqfLCOApZp3iz8BeUbkckCUjkys+w5VZ+/F4h2mkaC3vugpsQuU6z2LdWlCMP5gN97A+Vu6uHS/gA== X-Forefront-PRVS: 00997889E7 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(7916002)(199003)(24454002)(189002)(377454003)(65806001)(101416001)(86362001)(117156001)(5660300001)(76176999)(2950100002)(50466002)(3846002)(6116002)(42186005)(77096005)(65956001)(2906002)(59896002)(189998001)(110136003)(33656002)(64126003)(36756003)(586003)(47776003)(4001350100001)(6200100001)(4326007)(97736004)(83506001)(8676002)(81156014)(81166006)(23756003)(68736007)(66066001)(106356001)(7736002)(92566002)(7846002)(19580405001)(19580395003)(80316001)(230700001)(105586002)(99136001)(65816999)(305945005)(87266999)(54356999)(50986999)(6666003);DIR:OUT;SFP:1102;SCL:1;SRVR:TU4PR84MB0318;H:[192.168.142.147];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?iso-8859-1?Q?1;TU4PR84MB0318;23:zZck0BfgCj724wKc82k0iz0bwNH7oQc4UVZ5/hy?= =?iso-8859-1?Q?1+arIwNgrgVoesbH6Kwpl8EgJjIoSz40OPOCRmg1HNaQ8AtaCWoDydxpSZ?= =?iso-8859-1?Q?D/bkot/UUopqA4I6GgG8ai3lFKCp+UnkDxVLjcC8UaQN+fXmkhX3fDpwkj?= =?iso-8859-1?Q?0s0CBybFUjpIklurUoIMHRESjABGMA2LwWp1VyhZdlgW8qDvsILNf+SK21?= =?iso-8859-1?Q?OYxagFJyAyCew6/81OwO+ENfuYw8gdITm1T6KCwZEFJmK3odcPPqgw3H2K?= =?iso-8859-1?Q?TtsrKJOI0/6wd14kQzehV9ctejEn5PW+KyslOYTFTEy1GCRCLQDDgrLBPF?= =?iso-8859-1?Q?I3MOAH8j65R5PH7nBdR5ccT8f0eNY/1qaNLZSo/z3iZy6HaaLY2CwSZ6RM?= =?iso-8859-1?Q?8cHuTQqFY5KIwM7vUZ2ty3KZTXDveh4BAQK8oqQBVpKb4P1v55z9yAsWB2?= =?iso-8859-1?Q?WddCnDXkr8LDah47YsTu6F03aA8OQp/wQ1H2BHVroSmYItbjrA3Hm/yAsZ?= =?iso-8859-1?Q?k029a+wJToLvPDpQ76TlDgexuB8GITyHLlILbPh2g+ILklm8rV7jEkFDGf?= =?iso-8859-1?Q?tivY82s5OTX9FlVCnQVr+m1t237XR0HlcUVwEB34b4TsqSghfxmpOZhOPB?= =?iso-8859-1?Q?MxLRmUuIpYxVdWwrO/ignMn48WeZoDTr0YGYZQtzUsj9p7uYtF/xEEpein?= =?iso-8859-1?Q?TjBquEaqKGzGFe7+5VIDS7xsZke7MBKlrCPCB7EwBga4OaJZAYY4mVFdIS?= =?iso-8859-1?Q?5+/SzV7EKAjO0ZZQ77FdXSyMacK3F+Y1yZB3b3bVbcJxG/EyEFEOc1bldP?= =?iso-8859-1?Q?bqzrYI15TZqnkQeCnbAAkzhlHdTXXNHYbydISdAEBmO25gdnkTV2OrKYe/?= =?iso-8859-1?Q?gMiouBmvbeogVDlpUHMo+1wrqUJ4I0YjERHK9QeQovIuN8uR9eP85I5iT1?= =?iso-8859-1?Q?E6kjv4QOqXOxANUs1Gn1ov2tBjpICbw/Mat0krtUZ6QJM241hk7QDn1idS?= =?iso-8859-1?Q?OakJiHmKwAOYIlOd5JCBuJscVaScnIt4c18eev7GrT+LMCg20iFPIs+qFn?= =?iso-8859-1?Q?3B/f/h2mqqFFFiaEwdjuibkALr0I98l+q5Qpbb3fByp9COzZO7aexXDFGJ?= =?iso-8859-1?Q?x9jSFxAkOT6HpAbbvz03UhlrAWzL33jQncCHUaRTbcBwVnD+NcyXZN7z0f?= =?iso-8859-1?Q?xCKM1BkPMlZSJbt1cTUPgMYa2d9uXDqCH7h79SDdjakii4tTVgs0x9fn5o?= =?iso-8859-1?Q?PQ8xIxpNWcjbRefEagCZrRSjCYvX31I9g9v0qeiOZedcw+y3etcKYnqijY?= =?iso-8859-1?Q?LEFviWspanehfuevxP+RUyaxK2nAxCC/7y7+rvSheoVUv9beEbYDiqLVjE?= =?iso-8859-1?Q?J7kzh2ultzKQMzv74njKteXia9v9Xhp3GMG3EPYBl/xk2vkVKVtcJtfUxI?= =?iso-8859-1?Q?xdljF3B/1KX0IYnarUTLTwzLFqzQAk2T5fC?= X-Microsoft-Exchange-Diagnostics: 1;TU4PR84MB0318;6:Qy3mI5dQDNxK/8DaoIKQeyjZfH0xFnogAVoG0RiBrKC6OyOkKF3Y+qBnlS+lInbDaiWbFjlmSr5zyfZ8csIQ1s34XYb/tibpZ5PBDCIMYJ2WlqCLM9W/Ef0B19dj+5xGbibkdAu6CHofYx2ThAvuMtkiuadlJqbYr0KNUT7emL9xtqrhe3OAGFox+Nm6Zbgqtxl/xt9ANPyR7X/T/SlGoJ1n6kkLXhu9V9JPTe1YhFHg1/0OnZ6ZFO/QZrphgAHVk8URXLbxlNGIfYa6kA4h+T0QKyIzygixqmIUIitA3NrCOmfJmWYUApkLwhfz7s/6CifD9iC+tI+RSVSW7c149i2m8m7QvKbq7e/MoKzzdxM=;5:+4oQZljdQqRSBR1PZwBVvg86K7finpC6R2AXdux7kWKzL0cogtRd0hsUVxCJbhsokk4aBUChqTk9mjFuJmG6y+wq6wV3xOSTW4gEfID6yLH7ox7p3S3OKucaTNux6T04jFxKTZHdVsKwv44cMxUwslyxYtxobv0HFPvFj2IhG4Y=;24:oVzgQPTI69SgSJamJier02Sd0s0hvQKzlCV2JoVqsCS+chjDLG7JirvKWUN6djv3PZDGo3e/qlaIfojJpit70ry8cZynkbiJtQDEYObnzx4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;TU4PR84MB0318;7:pCMI5YZVGOqQq9BMcDKU8TURlaC75xF8aRejUb1+kwdZSyebo4M6Ce4DJSWu+FF5/pZdVgdhKzMyCAZsUx7yQse+r6wShOU7PoFF0vblo48qB2xOogaSN/zvIPicjN3J+MF3hQuOg6R/dQWmz43XuuYRjN/IBDdHgEc2iYjNoRW+abLMu55mpOGWDY2XeRWq3YAYtVdgcZt+5RkRiFZsfrUsnaMgan8ICrWksyM0bp6+WTs1Ws3MeMORHAv9uzM0Nk3TWTIriTuP6E8EHGES9LHtEz/Cok3Vy2QP6LucScttqmMBUxscoCBZzS0C8TybOhBa0QCdavy9O+KXUWFFpHBl33sJUPWf3QohjUsl2Tc= X-OriginatorOrg: hpe.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Oct 2016 16:12:47.2970 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: TU4PR84MB0318 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09/27/2016 08:26 AM, Waiman Long wrote: > When running certain database workload on a high-end system with many > CPUs, it was found that spinlock contention in the sigprocmask syscalls > became a significant portion of the overall CPU cycles as shown below. > > 9.30% 9.30% 905387 dataserver /proc/kcore 0x7fff8163f4d2 > [k] _raw_spin_lock_irq > | > ---_raw_spin_lock_irq > | > |--99.34%-- __set_current_blocked > | sigprocmask > | sys_rt_sigprocmask > | system_call_fastpath > | | > | |--50.63%-- __swapcontext > | | | > | | |--99.91%-- upsleepgeneric > | | > | |--49.36%-- __setcontext > | | ktskRun > > Looking further into the swapcontext function in glibc, it was found > that the function always call sigprocmask() without checking if there > are changes in the signal mask. > > A check was added to the __set_current_blocked() function to avoid > taking the sighand->siglock spinlock if there is no change in the > signal mask. This will prevent unneeded spinlock contention when many > threads are trying to call sigprocmask(). > > With this patch applied, the spinlock contention in sigprocmask() was > gone. > > Signed-off-by: Waiman Long > --- > v2->v3: > - Add a sigequalsets() helper in signal.h and use it for comparison. > > v1->v2: > - Fix compiler warning in mips. > > include/linux/signal.h | 17 +++++++++++++++++ > kernel/signal.c | 7 +++++++ > 2 files changed, 24 insertions(+), 0 deletions(-) > > diff --git a/include/linux/signal.h b/include/linux/signal.h > index b63f63e..5308304 100644 > --- a/include/linux/signal.h > +++ b/include/linux/signal.h > @@ -97,6 +97,23 @@ static inline int sigisemptyset(sigset_t *set) > } > } > > +static inline int sigequalsets(const sigset_t *set1, const sigset_t *set2) > +{ > + switch (_NSIG_WORDS) { > + case 4: > + return (set1->sig[3] == set2->sig[3])&& > + (set1->sig[2] == set2->sig[2])&& > + (set1->sig[1] == set2->sig[1])&& > + (set1->sig[0] == set2->sig[0]); > + case 2: > + return (set1->sig[1] == set2->sig[1])&& > + (set1->sig[0] == set2->sig[0]); > + case 1: > + return set1->sig[0] == set2->sig[0]; > + } > + return 0; > +} > + > #define sigmask(sig) (1UL<< ((sig) - 1)) > > #ifndef __HAVE_ARCH_SIG_SETOPS > diff --git a/kernel/signal.c b/kernel/signal.c > index af21afc..04e8f50 100644 > --- a/kernel/signal.c > +++ b/kernel/signal.c > @@ -2485,6 +2485,13 @@ void __set_current_blocked(const sigset_t *newset) > { > struct task_struct *tsk = current; > > + /* > + * In case the signal mask hasn't changed, there is nothing we need > + * to do. The current->blocked shouldn't be modified by other task. > + */ > + if (sigequalsets(&tsk->blocked, newset)) > + return; > + > spin_lock_irq(&tsk->sighand->siglock); > __set_task_blocked(tsk, newset); > spin_unlock_irq(&tsk->sighand->siglock); This is a pretty simple patch. Is that a chance that it can be pulled into 4.10? Cheers, Longman