From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yw1-x112b.google.com (mail-yw1-x112b.google.com [IPv6:2607:f8b0:4864:20::112b]) by sourceware.org (Postfix) with ESMTPS id 388DB3858D32; Sun, 11 Sep 2022 20:24:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 388DB3858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-yw1-x112b.google.com with SMTP id 00721157ae682-333a4a5d495so78045967b3.10; Sun, 11 Sep 2022 13:24:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=oO9+Z4o3EIor2NGQWpccXnDnC4oQ4UrPMjUmW5KT8+4=; b=fAAZyRhcL5gVs8x7s0mnyqaW9rOfLWDwahBcgKYFMnrWtKGH4sFzJ0EK+vDcZlpOQ6 FNv/Evm8IOR5Q15BfuLHtYjdKkxy2oV6ayH2IrEeF7hi9Np3+Py10UIvEQPjcVDA5/Oh 4BfJkf54Ql6ogal0db3rfOXS0GpmthYy1uH2oxo/RarqHwc/bLkUYulRql/BNvCACXQo cp+Kz2gb76OLp0ysqicotNN/gZQ8wIrJQGNMI5YRBNgCiyZWxgUK04cP65EQWdL6NBdX GmPN5V6eBpEtpNwmE+W8SP3/4YdnC8zE7hMBqEpIYtUz0kpNRcXuEnWenFNBY90xYB7y wmdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=oO9+Z4o3EIor2NGQWpccXnDnC4oQ4UrPMjUmW5KT8+4=; b=BQ4XFyOR6VifCeaB65MCsrG2sJuFnD0y4quRewyr0vkFbzpIKwL7c91VkaWmcBk1s6 5ymiwHazMZsyoL/XiZwkOdNKFh7dxKl6/L75ZNYKGAHeBT4GihCoJIgH9KemVwfdVfBB efduu4ro9asW0jpKjiqW2xi1FEDAcjUoIDX7hTOPboNM6tKENOwrI7X9FppSNjbJdrQc A06VAilVAZEUbF02nO6Ilq6KtC89wcKWPBojAGj48ezBR6OPD7tVyVPkXhOA0mEGe/l2 AMKim0K7v6Ev2oyehvfIkZ6b/Z7AQuQpei+TrT6dX4ABIvpn5Ap5y/BTr8sFv+qNGaPy LN+Q== X-Gm-Message-State: ACgBeo1jRTuNcohq/UTB/Q5SKUu9nM8HtNLsnwOggdOwP/P/OCK98yFD FMyvaihG1+PlMvPCX/lwYEm7G5Q2PAu5xX/GbEI= X-Google-Smtp-Source: AA6agR7Ztdb6avqCwmrD0cP9K+KDlJXOe3hAH83lIpYEEgjdbWTX8Dnu3IMTRKrN8iQzyC9nXK1Javyx6vFWvBcQCSQ= X-Received: by 2002:a81:48d5:0:b0:348:81c3:83c7 with SMTP id v204-20020a8148d5000000b0034881c383c7mr16274875ywa.301.1662927857657; Sun, 11 Sep 2022 13:24:17 -0700 (PDT) MIME-Version: 1.0 References: <20211214123051.800-1-6812skiii@gmail.com> In-Reply-To: From: Sunil Pandey Date: Sun, 11 Sep 2022 13:23:41 -0700 Message-ID: Subject: Re: [PATCH v4] nptl: Effectively skip CAS in spinlock loop To: "H.J. Lu" , Libc-stable Mailing List , Florian Weimer Cc: Jangwoong Kim <6812skiii@gmail.com>, GNU C Library Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,GIT_PATCH_0,HK_RANDOM_ENVFROM,HK_RANDOM_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Thu, Jan 20, 2022 at 5:08 AM H.J. Lu via Libc-alpha wrote: > > On Thu, Jan 20, 2022 at 04:53:27AM -0800, H.J. Lu wrote: > > On Tue, Dec 14, 2021 at 4:31 AM Jangwoong Kim via Libc-alpha > > wrote: > > > > > > The commit: > > > "Add LLL_MUTEX_READ_LOCK [BZ #28537]" > > > SHA1: d672a98a1af106bd68deb15576710cd61363f7a6 > > > > > > introduced LLL_MUTEX_READ_LOCK, to skip CAS in spinlock loop > > > if atomic load fails. But, "continue" inside of do-while loop > > > does not skip the evaluation of escape expression, thus CAS > > > is not skipped. > > > > > > Replace do-while with while and skip LLL_MUTEX_TRYLOCK if > > > LLL_MUTEX_READ_LOCK fails. > > > --- > > > nptl/pthread_mutex_lock.c | 5 +---- > > > 1 file changed, 1 insertion(+), 4 deletions(-) > > > > > > diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c > > > index 47b88a6b5b..06274c68e4 100644 > > > --- a/nptl/pthread_mutex_lock.c > > > +++ b/nptl/pthread_mutex_lock.c > > > @@ -138,7 +138,7 @@ PTHREAD_MUTEX_LOCK (pthread_mutex_t *mutex) > > > int cnt = 0; > > > int max_cnt = MIN (max_adaptive_count (), > > > mutex->__data.__spins * 2 + 10); > > > - do > > > + while (LLL_MUTEX_READ_LOCK (mutex) != 0 || LLL_MUTEX_TRYLOCK (mutex) != 0) > > > { > > > if (cnt++ >= max_cnt) > > > { > > > @@ -146,10 +146,7 @@ PTHREAD_MUTEX_LOCK (pthread_mutex_t *mutex) > > > break; > > > } > > > atomic_spin_nop (); > > > - if (LLL_MUTEX_READ_LOCK (mutex) != 0) > > > - continue; > > > } > > > - while (LLL_MUTEX_TRYLOCK (mutex) != 0); > > > > > > mutex->__data.__spins += (cnt - mutex->__data.__spins) / 8; > > > } > > > -- > > > 2.25.1 > > > > > > > LGTM. > > > > Reviewed-by: H.J. Lu > > > > Thanks. > > > > This is the v4 patch I am checkinng in. > > H.J. > --- > From: Jangwoong Kim <6812skiii@gmail.com> > Date: Tue, 14 Dec 2021 21:30:51 +0900 > > The commit: > "Add LLL_MUTEX_READ_LOCK [BZ #28537]" > SHA1: d672a98a1af106bd68deb15576710cd61363f7a6 > > introduced LLL_MUTEX_READ_LOCK, to skip CAS in spinlock loop > if atomic load fails. But, "continue" inside of do-while loop > does not skip the evaluation of escape expression, thus CAS > is not skipped. > > Replace do-while with while and skip LLL_MUTEX_TRYLOCK if > LLL_MUTEX_READ_LOCK fails. > > Reviewed-by: H.J. Lu > --- > nptl/pthread_mutex_lock.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c > index 31dfc7f1d7..d2e652d151 100644 > --- a/nptl/pthread_mutex_lock.c > +++ b/nptl/pthread_mutex_lock.c > @@ -146,10 +146,9 @@ PTHREAD_MUTEX_LOCK (pthread_mutex_t *mutex) > break; > } > atomic_spin_nop (); > - if (LLL_MUTEX_READ_LOCK (mutex) != 0) > - continue; > } > - while (LLL_MUTEX_TRYLOCK (mutex) != 0); > + while (LLL_MUTEX_READ_LOCK (mutex) != 0 > + || LLL_MUTEX_TRYLOCK (mutex) != 0); > > mutex->__data.__spins += (cnt - mutex->__data.__spins) / 8; > } > -- > 2.34.1 > I would like to backport this patch to release branch 2.33 and 2.34 Any comments/suggestions or objections on this. commit 6b8dbbd03ac88f169b65b5c7d7278576a11d2e44 Author: Jangwoong Kim <6812skiii@gmail.com> Date: Tue Dec 14 21:30:51 2021 +0900 nptl: Effectively skip CAS in spinlock loop The commit: "Add LLL_MUTEX_READ_LOCK [BZ #28537]" SHA1: d672a98a1af106bd68deb15576710cd61363f7a6