Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp1038660iob; Fri, 13 May 2022 20:38:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyCYu0N/lnY6cbryDpWHneDKYyu/BlFzHXgponc+fKd99k/aLbIVhFmJxOvwl3z5s05LVtM X-Received: by 2002:a7b:c3c7:0:b0:394:1aaa:1256 with SMTP id t7-20020a7bc3c7000000b003941aaa1256mr7180637wmj.172.1652499490461; Fri, 13 May 2022 20:38:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652499490; cv=none; d=google.com; s=arc-20160816; b=UoMTg9osiCW7SKrR0Hz4qCw8YjnC+vgK23QvNKdE+NWp+OSxwXZWbjKUN3s75F0st1 VFrd+pwXO8I7WBK87Z1dOSp0tNQQI695piJec7IpTxajnwQtSfQtk1/vX9/8H7uJzC9I IHn629CzFACzTpaZKVgx0bLJfply3YDDisnswg3/NRV0+hURm6u74qjm0CkIGvUIED/Z C9UtcaQIqHT4GLqP0EZIw3ZvyubmvDJiP5V9JCv+7eHyzYcx+Ryph7OsZLFJfb3yR686 dahHlyqH/aadsSvt8OWNDFwbGGbL/Xlv1SkKDLXfcm1xYkpQPIjBhvgoL1VtaVIsyPXt rynw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=bHzsThEfHxaNmel/u9r4gwh3WpQ6qL+JBgig6ZXmpp4=; b=ugD5QpjpKCPQXXjJ5Op+rTRHkeN5M9AMiv+w04OVuUWJiWePXaC8zg7RDF2nOqrUN0 nRZ977Vlibpe0WwLB/rMUBZX7rXlqAtCC91xdIceTrikqhH48xLH4piKNXdQFk0MAf4/ A4QF9Ii6juQ8kHFLRuTB1ecHo9j91hLSyX1+rO43k3DoXCv7NYKR+KHoYw1fAKd1Y4ju M0IiZCpcJhTbg8F6L7TZhLymQCwKigVgD1lXaa1lE4jwLZG1FSPEd2dgm7ObU8HA4MtO G+rYS+jtTNl+aAYEGeUwoupo9qj1Mx/2EbcAAXWY0+Tzj26wN5oFv5QFf2xDL7IJtLKU Qp+w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id o2-20020a5d6842000000b0020aa9a24b54si3252338wrw.929.2022.05.13.20.38.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 May 2022 20:38:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 7B568445CE9; Fri, 13 May 2022 17:13:46 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1380538AbiEMNEB (ORCPT + 99 others); Fri, 13 May 2022 09:04:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240402AbiEMND6 (ORCPT ); Fri, 13 May 2022 09:03:58 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id EE4624614C; Fri, 13 May 2022 06:03:55 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A6D44143D; Fri, 13 May 2022 06:03:55 -0700 (PDT) Received: from [10.57.5.218] (unknown [10.57.5.218]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6363C3F5A1; Fri, 13 May 2022 06:03:54 -0700 (PDT) Message-ID: <95ede14c-8dc2-d285-9f5b-8d6ee6797f00@arm.com> Date: Fri, 13 May 2022 14:03:52 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Subject: Re: [PATCH] perf test arm-spe: Check if perf-record hangs when recording workload with forks Content-Language: en-US To: German Gomez , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, acme@kernel.org Cc: Mark Rutland , Alexander Shishkin , Jiri Olsa , Namhyung Kim References: <20220228165655.3920-1-german.gomez@arm.com> From: James Clark In-Reply-To: <20220228165655.3920-1-german.gomez@arm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.8 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A, RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 28/02/2022 16:56, German Gomez wrote: > Add shell test to check if perf-record hangs when recording an arm_spe > event with forks. > > The test FAILS if the Kernel is not patched with Commit 961c391217 ("perf: > Always wake the parent event"). > > Unpatched Kernel: > > $ perf test -v 90 > 90: Check Arm SPE doesn't hang when there are forks > --- start --- > test child forked, pid 14232 > Recording workload with fork > Log lines = 90 /tmp/__perf_test.stderr.0Nu0U > Log lines after 1 second = 90 /tmp/__perf_test.stderr.0Nu0U > SPE hang test: FAIL > test child finished with -1 > ---- end ---- > Check Arm SPE trace data in workload with forks: FAILED! > > Patched Kernel: > > $ perf test -v 90 > 90: Check Arm SPE doesn't hang when there are forks > --- start --- > test child forked, pid 2930 > Compiling test program... > Recording workload... > Log lines = 478 /tmp/__perf_test.log.026AI > Log lines after 1 second = 557 /tmp/__perf_test.log.026AI > SPE hang test: PASS > Cleaning up files... > test child finished with 0 > ---- end ---- > Check Arm SPE trace data in workload with forks: Ok > > Signed-off-by: German Gomez Reviewed-by: James Clark > --- > tools/perf/tests/shell/test_arm_spe_fork.sh | 92 +++++++++++++++++++++ > 1 file changed, 92 insertions(+) > create mode 100755 tools/perf/tests/shell/test_arm_spe_fork.sh > > diff --git a/tools/perf/tests/shell/test_arm_spe_fork.sh b/tools/perf/tests/shell/test_arm_spe_fork.sh > new file mode 100755 > index 000000000..c920d3583 > --- /dev/null > +++ b/tools/perf/tests/shell/test_arm_spe_fork.sh > @@ -0,0 +1,92 @@ > +#!/bin/sh > +# Check Arm SPE doesn't hang when there are forks > + > +# SPDX-License-Identifier: GPL-2.0 > +# German Gomez , 2022 > + > +skip_if_no_arm_spe_event() { > + perf list | egrep -q 'arm_spe_[0-9]+//' && return 0 > + return 2 > +} > + > +skip_if_no_arm_spe_event || exit 2 > + > +# skip if there's no compiler > +if ! [ -x "$(command -v cc)" ]; then > + echo "failed: no compiler, install gcc" > + exit 2 > +fi > + > +TEST_PROGRAM_SOURCE=$(mktemp /tmp/__perf_test.program.XXXXX.c) > +TEST_PROGRAM=$(mktemp /tmp/__perf_test.program.XXXXX) > +PERF_DATA=$(mktemp /tmp/__perf_test.perf.data.XXXXX) > +PERF_RECORD_LOG=$(mktemp /tmp/__perf_test.log.XXXXX) > + > +cleanup_files() > +{ > + echo "Cleaning up files..." > + rm -f ${PERF_RECORD_LOG} > + rm -f ${PERF_DATA} > + rm -f ${TEST_PROGRAM_SOURCE} > + rm -f ${TEST_PROGRAM} > +} > + > +trap cleanup_files exit term int > + > +# compile test program > +cat << EOF > $TEST_PROGRAM_SOURCE > +#include > +#include > +#include > +#include > +#include > + > +int workload() { > + while (1) > + sqrt(rand()); > + return 0; > +} > + > +int main() { > + switch (fork()) { > + case 0: > + return workload(); > + case -1: > + return 1; > + default: > + wait(NULL); > + } > + return 0; > +} > +EOF > + > +echo "Compiling test program..." > +CFLAGS="-lm" > +cc $TEST_PROGRAM_SOURCE $CFLAGS -o $TEST_PROGRAM || exit 1 > + > +echo "Recording workload..." > +perf record -o ${PERF_DATA} -e arm_spe/period=65536/ -vvv -- $TEST_PROGRAM > ${PERF_RECORD_LOG} 2>&1 & > +PERFPID=$! > + > +# Check if perf hangs by checking the perf-record logs. > +sleep 1 > +log0=$(wc -l $PERF_RECORD_LOG) > +echo Log lines = $log0 > +sleep 1 > +log1=$(wc -l $PERF_RECORD_LOG) > +echo Log lines after 1 second = $log1 > + > +kill $PERFPID > +wait $PERFPID > +# test program may leave an orphan process running the workload > +killall $(basename $TEST_PROGRAM) > + > +if [ "$log0" = "$log1" ]; > +then > + echo "SPE hang test: FAIL" > + exit 1 > +else > + echo "SPE hang test: PASS" > +fi > + > +exit 0