From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3BA83C282E0 for ; Fri, 19 Apr 2019 18:30:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id EA9E3204EC for ; Fri, 19 Apr 2019 18:30:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=efficios.com header.i=@efficios.com header.b="tmlh2EJF" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728070AbfDSSaG (ORCPT ); Fri, 19 Apr 2019 14:30:06 -0400 Received: from mail.efficios.com ([167.114.142.138]:38606 "EHLO mail.efficios.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728061AbfDSSaD (ORCPT ); Fri, 19 Apr 2019 14:30:03 -0400 Received: from localhost (ip6-localhost [IPv6:::1]) by mail.efficios.com (Postfix) with ESMTP id 450E1AC8BC; Fri, 19 Apr 2019 09:42:28 -0400 (EDT) Received: from mail.efficios.com ([IPv6:::1]) by localhost (mail02.efficios.com [IPv6:::1]) (amavisd-new, port 10032) with ESMTP id L3EGqUWoicih; Fri, 19 Apr 2019 09:42:27 -0400 (EDT) Received: from localhost (ip6-localhost [IPv6:::1]) by mail.efficios.com (Postfix) with ESMTP id 3BD7CAC8AF; Fri, 19 Apr 2019 09:42:27 -0400 (EDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.efficios.com 3BD7CAC8AF DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficios.com; s=default; t=1555681347; bh=mVyt5R+EKHVSpUM1HVyvnU2I5BvTWMpq/btq+jPYs8c=; h=Date:From:To:Message-ID:MIME-Version; b=tmlh2EJFeOXkySeZyYnF+hCAO415fLlvskkt2LXyGI1R0I2JPHWzV9YlGs8Q2/+ej FhA6R3b80OK3C52MSAfamhx0x1+P5vixJ/qLFBSBW7+1lsv9h8UK2ZYCC3gMVSbEeh haJIXOnhqzuAOrzS5uyBZI6ok3Q3h9ylv/4QsIppxp/YX0ms77ScJZK0JJXzXpBRJ4 Sal8NZX8ZA1f/+8GdBegmwGDR9+4qWZhGrvArmLUeRShRl0N80Q3XCBYpfdSo6igvx NG1yVphWmGB9Bl2agVx+DNlT2oVN7uqfliudv336EWuJTz9pAu41nhiNZDhTf1mx8J WOmb2Kw+5aP3Q== X-Virus-Scanned: amavisd-new at efficios.com Received: from mail.efficios.com ([IPv6:::1]) by localhost (mail02.efficios.com [IPv6:::1]) (amavisd-new, port 10026) with ESMTP id 2Tpjxl33e9iM; Fri, 19 Apr 2019 09:42:27 -0400 (EDT) Received: from mail02.efficios.com (mail02.efficios.com [167.114.142.138]) by mail.efficios.com (Postfix) with ESMTP id 17644AC8A5; Fri, 19 Apr 2019 09:42:27 -0400 (EDT) Date: Fri, 19 Apr 2019 09:42:26 -0400 (EDT) From: Mathieu Desnoyers To: Ingo Molnar Cc: Thomas Gleixner , linux-kernel , linux-api , Peter Zijlstra , "Paul E . McKenney" , Boqun Feng , Andy Lutomirski , Dave Watson , Paul Turner , Andrew Morton , Russell King , Ingo Molnar , "H. Peter Anvin" , Andi Kleen , Chris Lameter , Ben Maurer , rostedt , Josh Triplett , Linus Torvalds , Catalin Marinas , Will Deacon , Michael Kerrisk , Joel Fernandes , shuah , linux-kselftest Message-ID: <614774674.134.1555681346941.JavaMail.zimbra@efficios.com> In-Reply-To: <1266612341.87.1555678507226.JavaMail.zimbra@efficios.com> References: <20190305194755.2602-1-mathieu.desnoyers@efficios.com> <20190305194755.2602-4-mathieu.desnoyers@efficios.com> <20190419103847.GA111210@gmail.com> <1444419838.71.1555677682502.JavaMail.zimbra@efficios.com> <1266612341.87.1555678507226.JavaMail.zimbra@efficios.com> Subject: Re: [PATCH for 5.1 3/3] rseq/selftests: Adapt number of threads to the number of detected cpus MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [167.114.142.138] X-Mailer: Zimbra 8.8.12_GA_3794 (ZimbraWebClient - FF66 (Linux)/8.8.12_GA_3794) Thread-Topic: rseq/selftests: Adapt number of threads to the number of detected cpus Thread-Index: YxJQ2i25qH1y+iSOFfTo74MHmwpaOcIwymvLgob8dFQ= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ----- On Apr 19, 2019, at 8:55 AM, Mathieu Desnoyers mathieu.desnoyers@efficios.com wrote: > ----- On Apr 19, 2019, at 8:41 AM, Mathieu Desnoyers > mathieu.desnoyers@efficios.com wrote: > >> ----- On Apr 19, 2019, at 6:38 AM, Ingo Molnar mingo@kernel.org wrote: >> >>> * Mathieu Desnoyers wrote: >>> >>>> On smaller systems, running a test with 200 threads can take a long >>>> time on machines with smaller number of CPUs. >>>> >>>> Detect the number of online cpus at test runtime, and multiply that >>>> by 6 to have 6 rseq threads per cpu preempting each other. >>>> >>>> Signed-off-by: Mathieu Desnoyers >>>> Cc: Shuah Khan >>>> Cc: Thomas Gleixner >>>> Cc: Joel Fernandes >>>> Cc: Peter Zijlstra >>>> Cc: Catalin Marinas >>>> Cc: Dave Watson >>>> Cc: Will Deacon >>>> Cc: Andi Kleen >>>> Cc: linux-kselftest@vger.kernel.org >>>> Cc: "H . Peter Anvin" >>>> Cc: Chris Lameter >>>> Cc: Russell King >>>> Cc: Michael Kerrisk >>>> Cc: "Paul E . McKenney" >>>> Cc: Paul Turner >>>> Cc: Boqun Feng >>>> Cc: Josh Triplett >>>> Cc: Steven Rostedt >>>> Cc: Ben Maurer >>>> Cc: Andy Lutomirski >>>> Cc: Andrew Morton >>>> Cc: Linus Torvalds >>>> --- >>>> tools/testing/selftests/rseq/run_param_test.sh | 7 +++++-- >>>> 1 file changed, 5 insertions(+), 2 deletions(-) >>>> >>>> diff --git a/tools/testing/selftests/rseq/run_param_test.sh >>>> b/tools/testing/selftests/rseq/run_param_test.sh >>>> index 3acd6d75ff9f..e426304fd4a0 100755 >>>> --- a/tools/testing/selftests/rseq/run_param_test.sh >>>> +++ b/tools/testing/selftests/rseq/run_param_test.sh >>>> @@ -1,6 +1,8 @@ >>>> #!/bin/bash >>>> # SPDX-License-Identifier: GPL-2.0+ or MIT >>>> >>>> +NR_CPUS=`grep '^processor' /proc/cpuinfo | wc -l` >>>> + >>>> EXTRA_ARGS=${@} >>>> >>>> OLDIFS="$IFS" >>>> @@ -28,15 +30,16 @@ IFS="$OLDIFS" >>>> >>>> REPS=1000 >>>> SLOW_REPS=100 >>>> +NR_THREADS=$((6*${NR_CPUS})) >>>> >>>> function do_tests() >>>> { >>>> local i=0 >>>> while [ "$i" -lt "${#TEST_LIST[@]}" ]; do >>>> echo "Running test ${TEST_NAME[$i]}" >>>> - ./param_test ${TEST_LIST[$i]} -r ${REPS} ${@} ${EXTRA_ARGS} || exit 1 >>>> + ./param_test ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} ${EXTRA_ARGS} >>>> || exit 1 >>>> echo "Running compare-twice test ${TEST_NAME[$i]}" >>>> - ./param_test_compare_twice ${TEST_LIST[$i]} -r ${REPS} ${@} ${EXTRA_ARGS} || >>>> exit 1 >>>> + ./param_test_compare_twice ${TEST_LIST[$i]} -r ${REPS} -t ${NR_THREADS} ${@} >>>> ${EXTRA_ARGS} || exit 1 >>>> let "i++" >>>> done >>>> } >>> >>> BTW., when trying to build the rseq self-tests I get this build failure: >>> >>> dagon:~/tip/tools/testing/selftests/rseq> make >>> gcc -O2 -Wall -g -I./ -I../../../../usr/include/ -L./ -Wl,-rpath=./ -shared >>> -fPIC rseq.c -lpthread -o >>> /home/mingo/tip/tools/testing/selftests/rseq/librseq.so >>> gcc -O2 -Wall -g -I./ -I../../../../usr/include/ -L./ -Wl,-rpath=./ basic_test.c >>> -lpthread -lrseq -o /home/mingo/tip/tools/testing/selftests/rseq/basic_test >>> gcc -O2 -Wall -g -I./ -I../../../../usr/include/ -L./ -Wl,-rpath=./ >>> basic_percpu_ops_test.c -lpthread -lrseq -o >>> /home/mingo/tip/tools/testing/selftests/rseq/basic_percpu_ops_test >>> /usr/bin/ld: /tmp/ccuHTWnZ.o: in function `rseq_cmpeqv_storev': >>> /home/mingo/tip/tools/testing/selftests/rseq/./rseq-x86.h:84: undefined >>> reference to `.L8' >>> /usr/bin/ld: /home/mingo/tip/tools/testing/selftests/rseq/./rseq-x86.h:84: >>> undefined reference to `.L49' >>> /usr/bin/ld: /tmp/ccuHTWnZ.o: in function `rseq_cmpnev_storeoffp_load': >>> /home/mingo/tip/tools/testing/selftests/rseq/./rseq-x86.h:141: undefined >>> reference to `.L57' >>> /usr/bin/ld: /tmp/ccuHTWnZ.o:(__rseq_failure+0x8): undefined reference to `.L8' >>> /usr/bin/ld: /tmp/ccuHTWnZ.o:(__rseq_failure+0x14): undefined reference to >>> `.L49' >>> /usr/bin/ld: /tmp/ccuHTWnZ.o:(__rseq_failure+0x20): undefined reference to >>> `.L55' >>> collect2: error: ld returned 1 exit status >>> make: *** [Makefile:22: >>> /home/mingo/tip/tools/testing/selftests/rseq/basic_percpu_ops_test] Error 1 >>> >>> Is this a known problem, or do I miss something from my build environment >>> perhaps? Vanilla 64-bit Ubuntu 18.10 (Cosmic). >> >> It works fine with gcc-7 (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) >> but indeed I get the same failure with gcc-8 (gcc version 8.0.1 20180414 >> (experimental) [trunk revision 259383] (Ubuntu 8-20180414-1ubuntu2)). >> >> Thanks for reporting! I will investigate. > > It looks like gcc-8 optimize away the target of asm goto labels when > there are more than one of them on x86-64. I'll try to come up with > a simpler reproducer. It appears to be related to gcc-8 mishandling combination of asm goto and thread-local storage input operands on x86-64. Here is a simple reproducer: __thread int var; static int fct(void) { asm goto ( "jmp %l[testlabel]\n\t" : : [var] "m" (var) : : testlabel); return 0; testlabel: return 1; } int main() { return fct(); } building with gcc-7 -O2 is fine. Building with gcc-8 -O0 is fine too. Building with gcc-8 -O1 and -O2 fails with: /tmp/ccuXTFfs.o: In function `main': test-asm-goto.c:(.text.startup+0x1): undefined reference to `.L2' collect2: error: ld returned 1 exit status With gcc-7 -O2, the assembly of main has the .L2 label: main: .LFB1: .cfi_startproc #APP # 5 "test-asm-goto.c" 1 jmp .L2 # 0 "" 2 #NO_APP .L4: .L3: xorl %eax, %eax ret .L2: movl $1, %eax ret .cfi_endproc However, with gcc-8 -O2, it's missing: main: .LFB1: .cfi_startproc .L3: #APP # 5 "test-asm-goto.c" 1 jmp .L2 # 0 "" 2 #NO_APP xorl %eax, %eax ret .cfi_endproc It looks like we have a compiler issue. :-/ Thanks, Mathieu -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com