Received: by 2002:a05:6358:9144:b0:117:f937:c515 with SMTP id r4csp8447853rwr; Thu, 11 May 2023 01:06:19 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6OrcNaksgXgrViffrNJzzggDWz5WvMffVeQoRSd9DOnrcX8zWAeLh2h0CGr1BSCjQc1j6W X-Received: by 2002:a05:6a00:194b:b0:647:f128:c4f5 with SMTP id s11-20020a056a00194b00b00647f128c4f5mr7914140pfk.22.1683792379247; Thu, 11 May 2023 01:06:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1683792379; cv=none; d=google.com; s=arc-20160816; b=MNDBmQ5Ke0vj4HlPJMlmTLVKNjSpg4I4kBaws46nwdR7xez0Kq2zGldhbZk1oiZITx c5Wyf9U+rquzFcHVOmcE8OYukNT5AUScHYrYD/6DcDQEIjRKfoSyRsDV/GfCnJDfjv71 HvId98YfDOiWICvgbmR97mdZ7dsdG6AM1DA5OESq5baM0Gfesg6IJvG58skzPMqK5cTJ uPrswh+PRgdLJK0/aZkW65Yd6/oW2+nuvGMAWpDOqX5PML3RGOfdVstXeuQkgHou1rGG nb8vDJp6lc5iT3Fp1Kh7GLlej4xPVS/p+34CQOBwGres8uL/1lSP/k4R9Uxa25pW7NBw QtCQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :to:subject; bh=iHLsiWYR+xMcUJ7Z9612E42ZG3zHLhYnVE2qbJK2uwE=; b=u3a9HPwf1bkkPFDcIFUGZ9a+C03IWnf+2ypBU/s4PTspB/elRGUyTWD7wcbO5Jlr3z L2FvQBW2kmKGvKvh2bgsdWx3gVQgTn/LkdnfoymJkXNBhNbf67/QnW3Btsx8qDRViAqk UBfzTeUXyjcD/1t2UA0HaqARMtDyvQd1VzwwYX1l1y+Y/yaW2k4ouUlq8rVFVhWyQKZ7 ZGA8wwlAvBNfVcOSjgIRNG9Sx+FB2S2B6P7RMgxWgLgE/gPmhjaZPIBZr7X8dqhL5rDk eeFsqPHDhR6AcVkREMf/FVpJhVhGY24IOvQAv/pLW4YCU9fQqj7QGphp3qJDzBF9d0sB XM+A== 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:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 15-20020a62170f000000b0063b5f25dd95si7253215pfx.391.2023.05.11.01.06.06; Thu, 11 May 2023 01:06:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237194AbjEKHmP (ORCPT + 99 others); Thu, 11 May 2023 03:42:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236654AbjEKHmN (ORCPT ); Thu, 11 May 2023 03:42:13 -0400 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C50F110FD; Thu, 11 May 2023 00:42:10 -0700 (PDT) Received: from kwepemm600003.china.huawei.com (unknown [172.30.72.54]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4QH3dt28HSzpSyK; Thu, 11 May 2023 15:37:54 +0800 (CST) Received: from [10.67.111.205] (10.67.111.205) by kwepemm600003.china.huawei.com (7.193.23.202) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Thu, 11 May 2023 15:42:06 +0800 Subject: Re: [PATCH 3/4] perf tools: Add printing perf_event_attr->type symbol in perf_event_attr__fprintf() To: Adrian Hunter , , , , , , , , , , , , References: <20230419122912.73746-1-yangjihong1@huawei.com> <20230419122912.73746-4-yangjihong1@huawei.com> <09511964-dea6-f078-b24c-fef6b05f5b79@intel.com> <5267232a-05a4-393b-b68e-da6a4f46d5e8@intel.com> From: Yang Jihong Message-ID: Date: Thu, 11 May 2023 15:42:05 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 MIME-Version: 1.0 In-Reply-To: <5267232a-05a4-393b-b68e-da6a4f46d5e8@intel.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.67.111.205] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) To kwepemm600003.china.huawei.com (7.193.23.202) X-CFilter-Loop: Reflected X-Spam-Status: No, score=-6.3 required=5.0 tests=BAYES_00,NICE_REPLY_A, RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_PASS,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 lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello, On 2023/5/10 23:51, Adrian Hunter wrote: > On 10/05/23 11:32, Adrian Hunter wrote: >> On 19/04/23 15:29, Yang Jihong wrote: >>> When printing perf_event_attr, always display attr->type and its symbol >>> to improve the readability of debugging information. >>> >>> Before: >>> >>> # perf --debug verbose=2 record -e cycles,cpu-clock,sched:sched_switch,branch-load-misses,r101 -C 0 true >>> >>> ------------------------------------------------------------ >>> perf_event_attr: >>> size 136 >>> { sample_period, sample_freq } 4000 >>> sample_type IP|TID|TIME|CPU|PERIOD|IDENTIFIER >>> read_format ID >>> disabled 1 >>> inherit 1 >>> freq 1 >>> sample_id_all 1 >>> exclude_guest 1 >>> ------------------------------------------------------------ >>> sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 6 >>> ------------------------------------------------------------ >>> perf_event_attr: >>> type 1 >>> size 136 >>> { sample_period, sample_freq } 4000 >>> sample_type IP|TID|TIME|CPU|PERIOD|IDENTIFIER >>> read_format ID >>> disabled 1 >>> inherit 1 >>> freq 1 >>> sample_id_all 1 >>> exclude_guest 1 >>> ------------------------------------------------------------ >>> sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 7 >>> ------------------------------------------------------------ >>> perf_event_attr: >>> type 2 >>> size 136 >>> config 0x131 >>> { sample_period, sample_freq } 1 >>> sample_type IP|TID|TIME|CPU|PERIOD|RAW|IDENTIFIER >>> read_format ID >>> disabled 1 >>> inherit 1 >>> sample_id_all 1 >>> exclude_guest 1 >>> ------------------------------------------------------------ >>> sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 8 >>> ------------------------------------------------------------ >>> perf_event_attr: >>> type 3 >>> size 136 >>> config 0x10005 >>> { sample_period, sample_freq } 4000 >>> sample_type IP|TID|TIME|CPU|PERIOD|IDENTIFIER >>> read_format ID >>> disabled 1 >>> inherit 1 >>> freq 1 >>> sample_id_all 1 >>> exclude_guest 1 >>> ------------------------------------------------------------ >>> sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 10 >>> ------------------------------------------------------------ >>> perf_event_attr: >>> type 4 >>> size 136 >>> config 0x101 >>> { sample_period, sample_freq } 4000 >>> sample_type IP|TID|TIME|CPU|PERIOD|IDENTIFIER >>> read_format ID >>> disabled 1 >>> inherit 1 >>> freq 1 >>> sample_id_all 1 >>> exclude_guest 1 >>> ------------------------------------------------------------ >>> sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 11 >>> >>> >>> After: >>> >>> # perf --debug verbose=2 record -e cycles,cpu-clock,sched:sched_switch,branch-load-misses,r101 -C 0 true >>> >>> ------------------------------------------------------------ >>> perf_event_attr: >>> type 0 (PERF_TYPE_HARDWARE) >>> size 136 >>> { sample_period, sample_freq } 4000 >>> sample_type IP|TID|TIME|CPU|PERIOD|IDENTIFIER >>> read_format ID >>> disabled 1 >>> inherit 1 >>> freq 1 >>> sample_id_all 1 >>> exclude_guest 1 >>> ------------------------------------------------------------ >>> sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 6 >>> ------------------------------------------------------------ >>> perf_event_attr: >>> type 1 (PERF_TYPE_SOFTWARE) >>> size 136 >>> { sample_period, sample_freq } 4000 >>> sample_type IP|TID|TIME|CPU|PERIOD|IDENTIFIER >>> read_format ID >>> disabled 1 >>> inherit 1 >>> freq 1 >>> sample_id_all 1 >>> exclude_guest 1 >>> ------------------------------------------------------------ >>> sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 7 >>> ------------------------------------------------------------ >>> perf_event_attr: >>> type 2 (PERF_TYPE_TRACEPOINT) >>> size 136 >>> config 0x131 >>> { sample_period, sample_freq } 1 >>> sample_type IP|TID|TIME|CPU|PERIOD|RAW|IDENTIFIER >>> read_format ID >>> disabled 1 >>> inherit 1 >>> sample_id_all 1 >>> exclude_guest 1 >>> ------------------------------------------------------------ >>> sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 8 >>> ------------------------------------------------------------ >>> perf_event_attr: >>> type 3 (PERF_TYPE_HW_CACHE) >>> size 136 >>> config 0x10005 >>> { sample_period, sample_freq } 4000 >>> sample_type IP|TID|TIME|CPU|PERIOD|IDENTIFIER >>> read_format ID >>> disabled 1 >>> inherit 1 >>> freq 1 >>> sample_id_all 1 >>> exclude_guest 1 >>> ------------------------------------------------------------ >>> sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 10 >>> ------------------------------------------------------------ >>> perf_event_attr: >>> type 4 (PERF_TYPE_RAW) >>> size 136 >>> config 0x101 >>> { sample_period, sample_freq } 4000 >>> sample_type IP|TID|TIME|CPU|PERIOD|IDENTIFIER >>> read_format ID >>> disabled 1 >>> inherit 1 >>> freq 1 >>> sample_id_all 1 >>> exclude_guest 1 >>> ------------------------------------------------------------ >>> sys_perf_event_open: pid -1 cpu 0 group_fd -1 flags 0x8 = 11 >>> >>> >>> Signed-off-by: Yang Jihong >>> --- >>> tools/perf/util/perf_event_attr_fprintf.c | 24 ++++++++++++++++++++++- >>> 1 file changed, 23 insertions(+), 1 deletion(-) >>> >>> diff --git a/tools/perf/util/perf_event_attr_fprintf.c b/tools/perf/util/perf_event_attr_fprintf.c >>> index 433029c6afc5..d9d70126d505 100644 >>> --- a/tools/perf/util/perf_event_attr_fprintf.c >>> +++ b/tools/perf/util/perf_event_attr_fprintf.c >>> @@ -71,6 +71,27 @@ static void __p_read_format(char *buf, size_t size, u64 value) >>> __p_bits(buf, size, value, bits); >>> } >>> >>> +static void __p_type_id(char *buf, size_t size, u64 value) >>> +{ >>> + /* sync with enum perf_type_id in perf_event.h */ >>> + switch (value) { >>> +#define PRINT_ENUM_PERF_TYPE_ID_CASE(x) \ >>> + case x: \ >>> + snprintf(buf, size, "%"PRIu64" (%s)", value, #x); \ >>> + return; >>> + PRINT_ENUM_PERF_TYPE_ID_CASE(PERF_TYPE_HARDWARE) >>> + PRINT_ENUM_PERF_TYPE_ID_CASE(PERF_TYPE_SOFTWARE) >>> + PRINT_ENUM_PERF_TYPE_ID_CASE(PERF_TYPE_TRACEPOINT) >>> + PRINT_ENUM_PERF_TYPE_ID_CASE(PERF_TYPE_HW_CACHE) >>> + PRINT_ENUM_PERF_TYPE_ID_CASE(PERF_TYPE_RAW) >>> + PRINT_ENUM_PERF_TYPE_ID_CASE(PERF_TYPE_BREAKPOINT) >>> +#undef PRINT_ENUM_PERF_TYPE_ID_CASE >> >> These are ABI constants so maybe simpler: >> >> const char *fixed_types[] = {"HARDWARE", "SOFTWARE", "TRACEPOINT", >> "HW_CACHE", "RAW", "BREAKPOINT"}; >> >> if (value < ARRAY_SIZE(fixed_types)) { >> snprintf(buf, size, "%"PRIu64" (PERF_TYPE_%s)", >> value, fixed_types[value]); >> } else { >> snprintf(buf, size, "%"PRIu64, value); >> } > > Although it is really the repeated snprintf that seems unnecessary > so maybe use a switch but just to get the stringified name. > Ok, will use switch/case to get stringified name for type and id in v2. Thanks, Yang