From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) by sourceware.org (Postfix) with ESMTPS id 61BCC3858434 for ; Wed, 19 Apr 2023 20:17:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 61BCC3858434 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-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-504eac2f0b2so284195a12.3 for ; Wed, 19 Apr 2023 13:17:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681935419; x=1684527419; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=KwRqHAsK7CDfbglf2XgAL9b7qARv+b2mzM844Mxf1qE=; b=lo/soFwlBke0stjd58csGW+4huT8DeeL6OG5WiqL/tNZpueHqodskWMlRc5qvwxQHN DA8M5Xtqr1J9kEesyrwriNJwuyu59JzIDgfBdhElnt20SHlR0bm0YyfH6mAkmAYAbAjC iuXONQeLPcNaCkVrPgRM8bYbOBvLNeZp6irxNEpvYRONmi2pkC9XdbhBzR0G7LCmJfWt MZ1J6g5RPwTsSC2GVdgPrJFlfOOSa8nHgAkqN7o2x5dXbl44Xn5Br7QxkAo7ze5LeYqN V17DSdnRlGepY0IgNVuHESucxv35eIINJIHmlyrLzbwi0vcd2Ss0IJvi8tz8mjbEi/Ar 2RPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681935419; x=1684527419; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KwRqHAsK7CDfbglf2XgAL9b7qARv+b2mzM844Mxf1qE=; b=RratHY6DxB66hASst2GfIvTRq5rC/Grtge0vcSDDiTz8NTEQS5Xo91bUCcoiS9Bo7v 7YDw2+SNywrK0jpKEmXfR2XUI685uTkbHy5I1Cnp0+9ewiBiY/AYkjYcj/AmsUJ1olZy yxiLxdMZyPmWt9v9Va4JspZlXzhvDf7oE/TSYN3VuIfDfMmKAiQ1Zc1a8Deln2tmmH+l D92giTlBgUrBdpM019v6eaeMZabFPaDa75AHmq627PlNLd7XIx4NQ9XLMkTGEaFA42qT 7Nc/SfbuFLVG6+LXRn/Sb0v38ScRJxlmwV/4bXiDcgL3v3TXUh7iurE4XEtmNSJGFSJX Lb/A== X-Gm-Message-State: AAQBX9cbxwLZDJS0VBnDhJAJtwxvWP3T4SVJ1QAoj3SOL/Ig88q0BDIv +w7a1dE+5t1Mwa8b6timdQdUeXnKFyBoPr/BsZJyQDGu2HU= X-Google-Smtp-Source: AKy350YcLrasZt0BXf6yl307NTg+sR5tThKnMM9rEN2HwE+dOFVwcwitmpMg7jHKnUM3H+20AsWuwhGwMmQdDW2+kRw= X-Received: by 2002:aa7:dd0f:0:b0:504:7fb0:6e40 with SMTP id i15-20020aa7dd0f000000b005047fb06e40mr7129872edv.37.1681935418921; Wed, 19 Apr 2023 13:16:58 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Noah Goldstein Date: Wed, 19 Apr 2023 15:16:47 -0500 Message-ID: Subject: Re: Use adaptive mutex with std::mutex To: "H.J. Lu" Cc: GNU C Library Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-3.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_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 Tue, Apr 18, 2023 at 4:37=E2=80=AFPM H.J. Lu via Libc-alpha wrote: > > Hi, > > Adaptive mutex works much better than normal mutex on machines with many = cores. > However PTHREAD_MUTEX_ADAPTIVE_NP is a GNU extension and not supported > by std::mutex. Is there a way to use adaptive mutex with std::mutex? Gl= ibc has > > #define PTHREAD_MUTEX_INITIALIZER \ > { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_TIMED_NP) } } > #ifdef __USE_GNU > # define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ > { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_RECURSIVE_NP) } } > # define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ > { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_ERRORCHECK_NP) } } > # define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ > { { __PTHREAD_MUTEX_INITIALIZER (PTHREAD_MUTEX_ADAPTIVE_NP) } } > #endif > > Can we add a macro to conditonally define PTHREAD_MUTEX_INITIALIZER with > PTHREAD_MUTEX_ADAPTIVE_NP? I think it would make sense (if its feasible) to make ADAPTIVE_NP the defau= lt std::mutex. They have the same low/no contention case: Just a single CAS. But Adaptive NP covers the most usage cases the best. Rather than just immediately entering the futex (how TIMED_NP which is default handle contention), it attempts to spin <=3D 100 times which can dramatically improve cases where the criti= cal section is small without affecting performance of longer waits. i.e Futex =3D O(10^4) cycles Spin =3D O(10^2) cycles TIMED_NP Short Critical Section uses Futex: O(10^4) Cycles TIMED_NP Long Critical Section uses futex: O(10^4) Cycles ADAPTIVE_NP Short Critical Section uses spin: O(10^2) Cycles ADAPTIVE_NP Long Critical Section uses spin + futex: O(10^2) + O(10^4) =3D O(10^4) Cycles > -- > H.J.