From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754219AbcGVSBa (ORCPT ); Fri, 22 Jul 2016 14:01:30 -0400 Received: from mail-sn1nam02on0113.outbound.protection.outlook.com ([104.47.36.113]:62096 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751488AbcGVSB3 (ORCPT ); Fri, 22 Jul 2016 14:01:29 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=waiman.long@hpe.com; Message-ID: <57925F6E.5030802@hpe.com> Date: Fri, 22 Jul 2016 14:01:18 -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: Jason Low CC: , Peter Zijlstra , , Ingo Molnar , Chris Wilson , Daniel Vetter , Davidlohr Bueso , Subject: Re: [RFC] Avoid mutex starvation when optimistic spinning is disabled References: <1468858607-20481-1-git-send-email-imre.deak@intel.com> <20160718171537.GC6862@twins.programming.kicks-ass.net> <1468864069.2367.21.camel@j-VirtualBox> <1468947205.31332.40.camel@intel.com> <1468969470.10247.15.camel@j-VirtualBox> <1468989556.10247.22.camel@j-VirtualBox> <578FC4EE.1070000@hpe.com> <1469140171.2344.24.camel@j-VirtualBox> In-Reply-To: <1469140171.2344.24.camel@j-VirtualBox> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [72.71.243.24] X-ClientProxiedBy: BY2PR06CA028.namprd06.prod.outlook.com (10.141.250.146) To DF4PR84MB0315.NAMPRD84.PROD.OUTLOOK.COM (10.162.193.29) X-MS-Office365-Filtering-Correlation-Id: edde9e09-e83d-4cdd-9025-08d3b25a32fc X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0315;2:De+SZU6WqAxmac+faalILP8JvKlnxRpd4PAaDlYeQOqZsQXmWl/0lp647ZKny8wq0XNkkEhlQtXBV5ju+c6OziVeq23TQKVjbv/Jh2Zsa0x12Xc9SmFy2TyodvUejG+VqCfyphL6mXwnBql/jDG1zvqzUQnHv9+Y7l/SrkzFoQlWeEwwCdLpVoHs8xDAnW8G;3:JhsTGYy9sLENhHKV48CbuKE6h2RMhM946GXRuE+TILc9HG5J1fOY5NNHfy96t3LZ4eH+PJ3xnqvr6yJ0B4v+XuNA3SU7zO1P24wpOMgyzW9iX/waqDIXoOKys40+zC2u X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DF4PR84MB0315; X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0315;25:UPNDKjXNkU4HkFZqr0lLla/j5S+7LwkEVtYuZmOTLpO5vOMyX7nV5FYrYWtpinavV0wbenxblsHuMgl84L6JdrU/qu49SRPcPcCGKDSPvVWVNPSKk/ANehTk62CBKEjsTbR9n05/0hCqCP2lx+qb0b4IAP3pJM8vTM/aQy2MiFKkeDwS5Yh9wuQW/jDqNvBw4WklcMG4rQAMegZDRAPu1+BMek2oWEG+5qh53YfETEKNUdqh/Nus+6HeYws9LY6GHotYSTJNL3PBgT1auMrVjKFuXxQUDNBFozpVV9qZftUSOfoAeQSYBshHqGgt1c/s7d6XJoFVbYcnDZm4tQ9hA6HWoWsfiNjn99fIj3aLVHfPRTUjE3gY+IakKh+5RJilF3SmivcRjyixzBzn+ggIOG39mdo6pJbE2dc37pdRNhfwvJ/zhNeP61TK622eEZ0CWApFpLuRxxCceyjvz02v6lYOa1l0gI9SdTcNXe5X9PHrKxM9A6RFWqeKrLybv+sjMD1whKZisjV+C/iTpqkzp5fFy7i1BUNK/sEGn0xSr5aLI4Jy0FVI6FUnjwySI9nCqdAFCfptpnXOMPkWI9q/cRa0H+0K6WjfhF9bcJRDL1ee6vOSh6R+iDu0UL+RdWFwTZaFg1qgt2t5vctJHDPzHxQei9FgWTD4Z10L8FZAyplU15OW9ARraSOAtGTElRflIMJIhowYjrRY2ZbVoaOMWw==;31:MAa8YxgV1VrcLgJi7FTnOmE57duQJ1MEe1kvbf7rabeDSK6lPs98d4EaewiAVm9Z/hK+lbn1dsdn4fOUprPdcoCjr/qj/57bizjF2ZoOfChdVKACt/RkgzeTpcus/8kTKL5h8QpwG42eAHqoSOc+4pI/zCExX7xrLQ56QQtDHqHh0d3svy0yeCzvARLRcJRns7rgnFv8eSNTZz6eOzyexg== X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0315;20:aMM0SwwbkWyNtFFLkGMel7tb23wIf8gSsZlFS2z8zGTomC/UB01oBDKLEp/GjGDf9S/7SI3wSfHSLO3AXCmpRJJqy00VcQSBgHDct+m/i2nb99Dgfy48nbjdM7f5w5WoaPjrb99qMla6lf5A85XXhSMqcAZ9zJkZsWNc96oCP8XQjWBHIlkPVm56dpCgwQFsHP9b5xglZ59qDQnTSeZd9zjli4Ypqb7qojt+aemLKycrnt4AxMcx2ZQChET8Nq56FevUj72U/3poTZmfJBFOqUYTOU9pqXhKZ9qwCngMeGMCapvrb9wv6vaClXbFdk3oJNVRjak/RXZlgIkFbNOPzm4g5Bybxsm0KCMXDnOoVZvXrKz5nezaUJ7gts0Ao0gMUlbc30OAHfMOUXqqZbDsVdnm1TWbVmwn0+5qJ2qVYqU7dByufDnNCNpTVB2NlaxKp6Ex48iuvpaK9cue8dWEsCmjq2vaZ+fCSpL9h8dJ03+4LiI6bGQICCnMzP0Lk8La;4:xrGfNjHB4Jpi2KL88wjctKPERNlFnX7UuOx/vIWM1s1eZZHnIy3HKw1yWmQUakFYkmLxkAX2MnlF6cC8fZFIvoCms5c/5qjfAzCH1uBmrVfdzdhTAGf8pobJMmb9pTD5wFt8tQX8GD3J9KfCYIIpwStj5ZpzsELhJ8mLSsYFKIaN7a9WUg3TzV1rN4FCJ7j9ha2XlpFNl8dmmRQfFQjPa1GRb+C1TEsuLQ3OCMGIOG8HxochgvGC9yhmERynpkT5p0wfyRBoixrFyyIYdv/n37Qe47majNQ3Z85wC3saene6ZOWT0/Jo52wvViWB2PAgnHWJhNJUPYh/M+LiLAz5LZcADWRHM4MbE0NGoJxI49Pbcuzs7Pe3bg/bMkRUDCtKSV63gGwL7Q800vCcRogsfW4qc+ko1eGZ2dALYRUEf6IlXLsVto/jIsz9ybl4S0GT X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(227479698468861); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:DF4PR84MB0315;BCL:0;PCL:0;RULEID:;SRVR:DF4PR84MB0315; X-Forefront-PRVS: 0011612A55 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(7916002)(24454002)(43544003)(377424004)(377454003)(199003)(189002)(586003)(6116002)(3846002)(92566002)(105586002)(68736007)(81166006)(81156014)(83506001)(2906002)(189998001)(93886004)(106356001)(230700001)(8676002)(2950100001)(101416001)(77096005)(110136002)(7846002)(99136001)(64126003)(8666005)(86362001)(7736002)(305945005)(4001350100001)(23676002)(97736004)(50466002)(42186005)(33656002)(80316001)(19580405001)(19580395003)(54356999)(87266999)(65806001)(50986999)(76176999)(66066001)(47776003)(65956001)(65816999)(36756003)(117156001)(59896002)(4326007)(7059030);DIR:OUT;SFP:1102;SCL:1;SRVR:DF4PR84MB0315;H:[192.168.142.176];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtERjRQUjg0TUIwMzE1OzIzOlNUZm9oTHp2T1ROaThHNkxQWkFTTXJIV2dR?= =?utf-8?B?NnBmeWdtNzVJd3pLWnhmc3NuU0dUSnRQVFVDWktramk5OWxNSnh5NmhFSFc0?= =?utf-8?B?emtuSnhpa0YwazY0UzdwQ2ltNlE0UjhEVGVpREs2ZFVPUFJLTEIrOC81RU85?= =?utf-8?B?OUpMaDFEK29HZ29PcXlBQVJxeFpqV1NzWG9YWG9zTEh5czZVN2hmRGRiK3FS?= =?utf-8?B?QjNJZkg3Q2d5bmJTRSszWTlmbTNaZ0k0UW1ZTDdxRitaQ055TzkwZlk4dXVp?= =?utf-8?B?cFE4Q25naTNPd2tqWFdQaWFEUUx0Mnc0MkFja1ZFN24zNUJBZHlIQUFBanov?= =?utf-8?B?Z0ZNdGxabGg5OG1lRE1OS04yUTA4Ri94d2JxUS83cUZFTFVPdHl5Yzc1cW8v?= =?utf-8?B?WVJOVnE3WFQzMDUyUi8vTm1rVGEyZ3F6ZTkvNGZLdm1XR2VIOHMxZTZ0Q0Ra?= =?utf-8?B?eHFOc1NvbGlIMEhTbnRCbklBUTAxVXkwRHNic3hUbHQxTXhwU0tzbG02Yllr?= =?utf-8?B?d1VCeTVpNmdwTTRIbU9WSTlxbE5GTkFjYXZ4b2pWOEhuaVZOL2ozZ0xjc29M?= =?utf-8?B?SHB5MkJ0WWdjR0FBV2phUVZ4U3JrUmFwL3NrMXlkVVErSkg5UnFVSjh1UENt?= =?utf-8?B?amtXczdqWnhjeUdCSmJNdnVwdUZocmhlNDg0WDliRzJZUkRJTUMzNE9PSUh5?= =?utf-8?B?eVBIT1F4ZjdUN2dPRElYZlM1cEthQWlPZHQ2ZHBsUUUrVE1sa2s5UHNiQWhh?= =?utf-8?B?d0pacytDQ1k5eXU4Qk5jWTlML2xBaGVkQTF2Y2RzemQyR3A4djIrSzM0bThx?= =?utf-8?B?eTJKbTViUnNXcUNxWjBrN3BWWVBhWWwvOS9aYkJJNERJcmd2UnJBemVvc3pS?= =?utf-8?B?SjlDeW5DMURDdXM2MmQ3RHdYeVd1UzNYOW9xZzIwMEdhaFFnb01DZ2I4T2ZL?= =?utf-8?B?WFhYQkpaZUpmRU5hdDlHUys1b1VHb1dMcEl5aWpqeEl4L3VpZmNHMXpuUlNN?= =?utf-8?B?TkFQbUFDdDdlclJmLys2bDRyelVPcjVXQkt3QW84RStDenY4VHl0U0NKQktD?= =?utf-8?B?aEhvRlNkYTdsbUgyZ0hONVpweE1aUnJ6SU1SZ2FYVW52M2Q2b2RyWGp0cUJu?= =?utf-8?B?MmZ4Y0s0TERyUi9OZ2NadnUvV3I2ME52Q09oWkJMQ3dVMmJxQ1FIZW13Z2dW?= =?utf-8?B?cWk0OEJxVldHU3h3ejJHT2F2UnpuZmp1SlF0MkRKTmdhdkZPV04xTWUrNjcv?= =?utf-8?B?Ung5enM0dEZOa05xR3pGQ1NLc0pvM3FJeW1rK1lqcGgyUVErYXRWSFpXSVJ1?= =?utf-8?B?Q0pSeEREcVlaSGhVUlZOczhlOXZRcm9DT2ZHWHRPbHJqY2RsZ2hVSnVIeGw2?= =?utf-8?B?U0VPZkhDdlZWWFcvNVVHWFpXWjZaQkZDWnNNa2RIbWJzZEdYQUpiSnNjQmo2?= =?utf-8?B?QVJtWTVpZk9WV0x3OU5vdTY5ZXNBTWhGZnJzU1BPbWJTVWpHeHJML1FlWFRY?= =?utf-8?B?MmZXUnI0b0Z6TFIrQTV5Y3U1L0M1TktTV1lHZDl4RTZhKzdtdjU5eE16Zm9D?= =?utf-8?B?bW1KYU94b05kQjA1NTNMVFlLcjdnaklyWE1wTVREYk03UjN4eG1FMUxhVE1i?= =?utf-8?B?cndocVFSemFjWmRNOEtqeTEwTHoyUHgwMmtvV3B5enowWmJld2tXZEJyNnp5?= =?utf-8?B?NFlwV1NUWGNJNTRsNjJvWjFBcy9UQWRqUWIzLzlVTm9sRWZONURaMlJmcTdJ?= =?utf-8?B?THhzSXovYVRMVTlhcTRTRFRNbWx0MDBEMU8yWCtkeGtwekhDdFlnNTNwREty?= =?utf-8?B?YVpMcUhkcS8zWm5OMUthQ1NiTGRUSXZVakxXaGlPTFpUMitFWVRvcWV0dUt1?= =?utf-8?B?czlhZERwU2RqeXRtdU43c2IzOVhwWlltc2JoUkhsNDFQUExZZlMrM3NPN1hC?= =?utf-8?Q?3Ip1UvdvJkx2Bfo3AzSxVUl1k/Nr9c=3D?= X-Microsoft-Exchange-Diagnostics: 1;DF4PR84MB0315;6:XBXbgcZ+MpinUIpoZspAquWo3k/qdaFJDCkjTmCx5ctLT87RQA7qt9rjVDCk1iDJMJT3k9abRAaSEHVm+K89fDynJEP++rYroYZLDbONlcgyIRMisVdLwqYIK20/+Dxpeuu8MtO2vKObX88u5KNFaBI9vx8Ot/dErMG9zq/UjE9SBrkj6w5mHpbtv5/Nd6PGyBtnKQU/uTfu7Ukpt6e6ZwzjuJI3NO9NMRmPFoFkumVX3nYApBGbW0eLHR5LudNBwELjd7pjB5LcwySGO9ycWY/FBeEbYXNtziSwJrYXfRlRVeUXLzMKxljUCSqGY6ofKWUc8u3x9PqhOS4zGtHb7A==;5:a1okF6Z49GCbmjqqVPW+b1nc65fNpNnMQkEb08Hm8/97O4Z3NQAt9pVIed05JFjIGWNPegHAf9YcrBBPCjOXSrM9IrQxK+V3scmPLCZYUK3rAiVJofPqY5J7yWisuPza1F37+uoU7PEPFl413sJiaQ==;24:xhR9XkGFROhGT8qpVizSzviLMqrgTKfMdRvsD6bH1VbzeXGxSkt88QcBRwaGpjFdXaC0zCNGZ/jG4obkVX2feI9OHaeKzdO+zeLyS5y8jqw=;7:0yKmSSD4YZvMNLTR15nDKSUnJp/oi7KccCpzubAXT7TA6LAdSrO84RCZ6eVSiA0KBifuKC72MG1DoBoGcNExGOHT8wOVu8jlAv0ZDQR8Ds1orbrTK3/vdCJmTnmM7idMGjrJVqEhsHgd+dLn+VGcpva2c1qA9/UPH4oBUX3STJN5U6zCvsFGSBxHLDv2UciZAd1mrnM4e+atPikFPa8ecvUaplTTEbS5CvLpJcn5PMfOz39Ui00moQjQPWwUcL8a SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: hpe.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Jul 2016 18:01:24.5831 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DF4PR84MB0315 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07/21/2016 06:29 PM, Jason Low wrote: > On Wed, 2016-07-20 at 14:37 -0400, Waiman Long wrote: >> On 07/20/2016 12:39 AM, Jason Low wrote: >>> On Tue, 2016-07-19 at 16:04 -0700, Jason Low wrote: >>>> Hi Imre, >>>> >>>> Here is a patch which prevents a thread from spending too much "time" >>>> waiting for a mutex in the !CONFIG_MUTEX_SPIN_ON_OWNER case. >>>> >>>> Would you like to try this out and see if this addresses the mutex >>>> starvation issue you are seeing in your workload when optimistic >>>> spinning is disabled? >>> Although it looks like it didn't take care of the 'lock stealing' case >>> in the slowpath. Here is the updated fixed version: >>> >>> --- >>> Signed-off-by: Jason Low >>> --- >>> include/linux/mutex.h | 2 ++ >>> kernel/locking/mutex.c | 65 ++++++++++++++++++++++++++++++++++++++++++++------ >>> 2 files changed, 60 insertions(+), 7 deletions(-) >>> >>> diff --git a/include/linux/mutex.h b/include/linux/mutex.h >>> index 2cb7531..c1ca68d 100644 >>> --- a/include/linux/mutex.h >>> +++ b/include/linux/mutex.h >>> @@ -57,6 +57,8 @@ struct mutex { >>> #endif >>> #ifdef CONFIG_MUTEX_SPIN_ON_OWNER >>> struct optimistic_spin_queue osq; /* Spinner MCS lock */ >>> +#else >>> + bool yield_to_waiter; /* Prevent starvation when spinning disabled */ >>> #endif >>> #ifdef CONFIG_DEBUG_MUTEXES >>> void *magic; >> You don't need that on non-SMP system. So maybe you should put it under >> #ifdef CONFIG_SMP block. > Right, maybe something like: > > #ifdef CONFIG_MUTEX_SPIN_ON_OWNER > ... > ... > #elif !defined(CONFIG_SMP) /* If optimistic spinning disabled */ > bool yield_to_waiter; > #endif > >>> @@ -556,7 +595,8 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass, >>> * other waiters. We only attempt the xchg if the count is >>> * non-negative in order to avoid unnecessary xchg operations: >>> */ >>> - if (atomic_read(&lock->count)>= 0&& >>> + if ((!need_yield_to_waiter(lock) || loop> 1)&& >>> + atomic_read(&lock->count)>= 0&& >>> (atomic_xchg_acquire(&lock->count, -1) == 1)) >>> >> I think you need to reset the yield_to_waiter variable here when loop> >> 1 instead of at the end of the loop. > So I think in the current state, only the top waiter would be able to > both set and clear the yield_to_waiter variable anyway. However, I agree > that this detail is not obvious and it would be better to reset the > variable here when loop> 1 to make it more readable. You should only reset the variable when loop > 1. You may also need to check in the error exit path as well. Cheers, Longman