From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20275 invoked by alias); 2 May 2018 08:19:27 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 20262 invoked by uid 89); 2 May 2018 08:19:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.2 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,SPF_HELO_PASS autolearn=no version=3.3.2 spammy=CAS X-HELO: mx1.redhat.com Subject: Re: [PATCH v2 3/3] Mutex: Optimize adaptive spin algorithm To: Kemi Wang , Adhemerval Zanella , Glibc alpha Cc: Dave Hansen , Tim Chen , Andi Kleen , Ying Huang , Aaron Lu , Lu Aubrey References: <1524624988-29141-1-git-send-email-kemi.wang@intel.com> <1524624988-29141-3-git-send-email-kemi.wang@intel.com> From: Florian Weimer Message-ID: <591d1f86-21e8-0a01-721b-4adff26e839b@redhat.com> Date: Wed, 02 May 2018 08:19:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <1524624988-29141-3-git-send-email-kemi.wang@intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-SW-Source: 2018-05/txt/msg00035.txt.bz2 On 04/25/2018 04:56 AM, Kemi Wang wrote: > @@ -124,21 +125,24 @@ __pthread_mutex_lock (pthread_mutex_t *mutex) > if (LLL_MUTEX_TRYLOCK (mutex) != 0) > { > int cnt = 0; … > + int max_cnt = MIN (__mutex_aconf.spin_count, > + mutex->__data.__spins * 2 + 100); > + > + /* MO read while spinning */ > + do > + { > + atomic_spin_nop (); > + } > + while (atomic_load_relaxed (&mutex->__data.__lock) != 0 && > + ++cnt < max_cnt); > + /* Try to acquire the lock if lock is available or the spin count > + * is run out, call into kernel to block if fails > + */ > + if (LLL_MUTEX_TRYLOCK (mutex) != 0) > + LLL_MUTEX_LOCK (mutex); > … > + mutex->__data.__spins += (cnt - mutex->__data.__spins) / 8; > + } The indentation is off. Comments should end with a ”. ” (dot and two spaces). Multi-line comments do not start with “*” on subsequent lines. We don't use braces when we can avoid them. Operators such as “&&” should be on the following line when breaking up lines. Why is the LLL_MUTEX_TRYLOCK call still needed? Shouldn't be an unconditional call to LLL_MUTEX_LOCK be sufficient? But the real question is if the old way of doing CAS in a loop is beneficial on other, non-Intel architectures. You either need get broad consensus from the large SMP architectures (various aarch64 implementations, IBM POWER and Z), or somehow make this opt-in at the source level. Ideally, we would also get an ack from AMD for the x86 change, but they seem not particularly active on libc-alpha, so that may not be realistic. Thanks, Florian