Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp3340915ybt; Mon, 29 Jun 2020 23:41:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyjX2pbC84p32N62gKXGs5nN62Iu2jpalbCfxbzXDK3rV6pKfWfQ/zThGjrt4z3yESE14yx X-Received: by 2002:aa7:d802:: with SMTP id v2mr14396451edq.77.1593499266996; Mon, 29 Jun 2020 23:41:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1593499266; cv=none; d=google.com; s=arc-20160816; b=Jt5mFMSOP4Ja5Yv4yYSabKjWeKrdXYnbgsppyZ+ftMjtJNrUArxVpR8l7O/kWPvqA1 wk3eHiEz1hsQp8QHBJLwW+ffEjfoXPOh2481QIb/RsaUj1ZkPavej2XxrScHZ3n+s4BG CX+TredwswxG3yxJ19P5eXbreD1R+NtCprG3fnqR5XxzkVW2wMDmE6qD62LzlkshFtIo 5vRRPmCBTUd3m0yVzYvQcWp+7vlv3H0uQQUzqOb4JDSIZVgAfXognu/6jkEFki4nrrs1 cytGV/KYivdx4Pmq6kmAbl6hiatHVeGmnolOhHnNeHVosuTEwkkcQDpJmrXCN6o4EN2E cBFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=QkjCMEhelPuir6tJNrGPv5JSjPKA0iYWqx+HiSFw4CM=; b=tqcjbdNdWNxFk1zIEnGitn5aFjUzl+y3w7/Vc62AzGbGLLDHgy9ngDTpCfiYV96pPS HmZMZUhgGUaL6VrQPjDt/afxg4cVwGhvLQD4XjEIVMJC1EQz7ByTsQPLovGKmjJ+ae+j 6b+KGhgYHx6xF2g+KlhJRiug0l05ChM2rnn4tqFiJhQO8YodB492k1mkVILn4mdprd4y jIq94keIcQYZzpnJOYIAHmSgeskq0523PjT9Jf6qoT4g3cKA2jcgdBnbOeLZe772Ti7n x0hN780/4bkeqQ30BaYHZH9ulBxXMN7ugjHJCRb5LJqbR5rqu80tZ0uSJLxG0FvLJtre P+zQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sifive.com header.s=google header.b=afwd75JW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q8si1078735ejd.687.2020.06.29.23.40.43; Mon, 29 Jun 2020 23:41:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@sifive.com header.s=google header.b=afwd75JW; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730391AbgF3GhS (ORCPT + 99 others); Tue, 30 Jun 2020 02:37:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37218 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730386AbgF3GhP (ORCPT ); Tue, 30 Jun 2020 02:37:15 -0400 Received: from mail-ot1-x343.google.com (mail-ot1-x343.google.com [IPv6:2607:f8b0:4864:20::343]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CFEADC061755 for ; Mon, 29 Jun 2020 23:37:14 -0700 (PDT) Received: by mail-ot1-x343.google.com with SMTP id 72so17580694otc.3 for ; Mon, 29 Jun 2020 23:37:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=QkjCMEhelPuir6tJNrGPv5JSjPKA0iYWqx+HiSFw4CM=; b=afwd75JWFLA1yb9zL4acHZ7SMaN1NprTUO6FOx4gQfPSiMQowVLZwmxHGRCuy/N0w5 3y0Ld60YONgaGAiyb1g9uhKnN0jdfERPxLDVKJosENeG1C0if/ejAw2VCtUXHPAeoI9X oCMVfQloTHOKh1DFR9mPVOMAkh4pQLKnKobWaXOo6iIC8ctoqD6w7iVfANJXL1KtSKb3 U/ihaO/7xx82qvWt/Qf4vCREEAUkzSqaKtO7lsFZHQ1xGtYvsEcbg9cB+SKJhw6KVSSk 3+XhQxpN422g5ySs7I17x4GKsmc3s9BqPUj29Jl4ixlMLxvewtMmrgQrtMY7TRN+vg80 Aeeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=QkjCMEhelPuir6tJNrGPv5JSjPKA0iYWqx+HiSFw4CM=; b=A9GmjHlxT3LRfnFB6BEaxjPpa+KUVCch7Ww5sZSUhHkiExsk6WVEHwN+bGKZp1aRca dhuZjO1Rtjlaxl1PA876YGAbzPJd4F2T4Cf8FE+u94HIW0BYoQBVzzIqU1+Hx5741oeK 8LfntSh8agSVvxpjyQ7KABsZciUaaza3IkNfcNORJJ/15vJjeFeCR0T2uaqTKS1GRiwf 3XJzumdDwCONCqwiu18mUfxfZNzjqnUPrTfqw7n+1yUq3oV2pe7IFasjOsTOafwvR7K+ HkCKYCkukgmSky/x92R9VzYyixN0qRVRPXObYOxlwv0nb3jpyRcb3ES95eCZbM4JcwGU NaJw== X-Gm-Message-State: AOAM533dgugs0E0qIe/TFpO0ROYkBpgIAzrjz08naMysXpSPOxDJlKUt fupmfASoi/2Uz4ve4CZVAbcpZummQoTo3ZLiaI5W79dzwl8= X-Received: by 2002:a9d:186:: with SMTP id e6mr16894916ote.33.1593499034050; Mon, 29 Jun 2020 23:37:14 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Zong Li Date: Tue, 30 Jun 2020 14:37:02 +0800 Message-ID: Subject: Re: [RFC PATCH 0/6] Support raw event and DT for perf on RISC-V To: Anup Patel Cc: Alan Kao , Palmer Dabbelt , Paul Walmsley , linux-riscv , "linux-kernel@vger.kernel.org List" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 29, 2020 at 9:23 PM Anup Patel wrote: > > On Mon, Jun 29, 2020 at 6:23 PM Zong Li wrote: > > > > On Mon, Jun 29, 2020 at 4:28 PM Anup Patel wrote: > > > > > > On Mon, Jun 29, 2020 at 11:22 AM Zong Li wrote: > > > > > > > > On Mon, Jun 29, 2020 at 12:53 PM Anup Patel wrote: > > > > > > > > > > On Mon, Jun 29, 2020 at 8:49 AM Zong Li wrote: > > > > > > > > > > > > This patch set adds raw event support on RISC-V. In addition, we > > > > > > introduce the DT mechanism to make our perf more generic and common. > > > > > > > > > > > > Currently, we set the hardware events by writing the mhpmeventN CSRs, it > > > > > > would raise an illegal instruction exception and trap into m-mode to > > > > > > emulate event selector CSRs access. It doesn't make sense because we > > > > > > shouldn't write the m-mode CSRs in s-mode. Ideally, we should set event > > > > > > selector through standard SBI call or the shadow CSRs of s-mode. We have > > > > > > prepared a proposal of a new SBI extension, called "PMU SBI extension", > > > > > > but we also discussing the feasibility of accessing these PMU CSRs on > > > > > > s-mode at the same time, such as delegation mechanism, so I was > > > > > > wondering if we could use SBI calls first and make the PMU SBI extension > > > > > > as legacy when s-mode access mechanism is accepted by Foundation? or > > > > > > keep the current situation to see what would happen in the future. > > > > > > > > > > > > This patch set also introduces the DT mechanism, we don't want to add too > > > > > > much platform-dependency code in perf like other architectures, so we > > > > > > put the mapping of generic hardware events to DT, then we can easy to > > > > > > transfer generic hardware events to vendor's own hardware events without > > > > > > any platfrom-dependency stuff in our perf. > > > > > > > > > > Please re-write this series to have RISC-V PMU driver as a regular > > > > > platform driver as drivers/perf/riscv_pmu.c. > > > > > > > > > > The PMU related sources will have to be removed from arch/riscv. > > > > > > > > > > Based on implementation of final drivers/perf/riscv_pmu.c we will > > > > > come-up with drivers/perf/riscv_sbi_pmu.c driver for SBI perf counters. > > > > > > > > > > > > > There are some different ways to implement perf, and current > > > > implementation seems to be consensus when perf was introduced at the > > > > beginning [0][1]. I don't persist to which one, I could change the > > > > implementation as you mentioned if it is a new consensus one. > > > > > > > > [0] https://github.com/riscv/riscv-linux/pull/124#issuecomment-367563910 > > > > > > I would not recommend taking the original RISC-V linux fork as reference. > > > > > > Rather we should study how things are done on other architectures. > > > > > > I really appreciate the attempt to make RISC-V PMU driver depend on DT > > > but if we are going this route then we should maximize the use of Linux > > > platform driver framework. In fact, whenever possible we should integrate > > > RISC-V features as platform drivers under the drivers/ directory. > > > > > > > OK, I would change the implementation to platform driver if there is no > > other voice. > > > > > I thought about SBI PMU counters as well. In future, we can easily > > > expose SBI PMU counters as RAW events in the same RISC-V PMU > > > driver. The sbi_probe_extension() can be used in RISC-V PMU driver > > > to check for SBI PMU counters so no special provisions needed in DT > > > for SBI PMU counters. > > > > > > > I thought about probing raw events by SBI extension too, I'm interested if you > > have more detail about this. > > > > It seems to me that it is a little bit hard to return all events > > through one SBI call, > > so I thought we could map the generic hardware events and maintain their own > > raw events by each platform in OpenSBI. But eventually, I thought the > > DT mechanism > > is more clear and easy than that. Let me know if you have any ideas about > > probe function. Thanks. > > We can design SBI calls such that no SBI call is required to read > the perf counter. > > The sbi_probe_extension() will only be used to check whether > underlying SBI implementation supports SBI PMU extension. > > As-per my initial thoughts, we can potentially have the following SBI calls: > > 1. SBI_PMU_NUM_COUNTERS > This call will return the number of SBI PMU counters > 2. SBI_PMU_COUNTER_DESCRIBE > This call takes two parameters: 1) physical address 2) counter index > It will write the description of SBI PMU counter at specified > physical address. > The details of the SBI PMU counter will include name, type, etc The main things are that we need to pass the information of raw events and the information of mapping of generic hardware events. Maybe this information could be passed by this SBI call. > 3. SBI_PMU_COUNTER_START > This call takes two parameters: 1) physical address 2) counter index > It will inform SBI implementation to start counting specified counter on the > calling HART. The counter value will be written to the specified physical > address whenever it changes. I would prefer to read the counter directly on s-mode. Spec already defines the mechanism to allow that. But this way would still work if we couldn't read counters on s-mode. > 4. SBI_PMU_COUNTER_STOP > This call takes one parameter: 1) counter index > It will inform SBI implementation to stop counting specified counters on > the calling HART. > > The above calls are generic enough to support any number of counters > and we don't need any SBI call to read the counter. We can also assume > all counters to be of fixed 64bit width. In fact, even Hypervisors can support > it's own SBI PMU counters with SBI PMU extension. > > We still need to think more about the above calls because above SBI > calls are just initial ideas. > We also need a SBI call to set the event selector to specify which event is monitored. > Maybe you can refine the above ideas and send a proposal to the > UnixPlatformSpec mailing list ?? > Ok, let us talk about the details in that. > Regards, > Anup > > > > > > Also, the RISC-V PMU driver can be implemented such that it will > > > work for RV32, RV64, NoMMU RV32, and NoMMU RV64. > > > > > > Regards, > > > Anup > > > > > > > [1] https://groups.google.com/a/groups.riscv.org/g/sw-dev/c/f19TmCNP6yA > > > > > > > > > Regards, > > > > > Anup > > > > > > > > > > > > > > > > > Zong Li (6): > > > > > > dt-bindings: riscv: Add YAML documentation for PMU > > > > > > riscv: dts: sifive: Add DT support for PMU > > > > > > riscv: add definition of hpmcounter CSRs > > > > > > riscv: perf: Add raw event support > > > > > > riscv: perf: introduce DT mechanism > > > > > > riscv: remove PMU menu of Kconfig > > > > > > > > > > > > .../devicetree/bindings/riscv/pmu.yaml | 59 +++ > > > > > > arch/riscv/Kconfig | 13 - > > > > > > arch/riscv/boot/dts/sifive/fu540-c000.dtsi | 13 + > > > > > > arch/riscv/include/asm/csr.h | 58 +++ > > > > > > arch/riscv/include/asm/perf_event.h | 100 ++-- > > > > > > arch/riscv/kernel/Makefile | 2 +- > > > > > > arch/riscv/kernel/perf_event.c | 471 +++++++++++------- > > > > > > 7 files changed, 471 insertions(+), 245 deletions(-) > > > > > > create mode 100644 Documentation/devicetree/bindings/riscv/pmu.yaml > > > > > > > > > > > > -- > > > > > > 2.27.0 > > > > > >