[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Z9LnuXCvK5P5KCiU@thinkpad2024>
Date: Thu, 13 Mar 2025 10:12:09 -0400
From: "John B. Wyatt IV" <jwyatt@...hat.com>
To: Gautam Menghani <gautam@...ux.ibm.com>
Cc: peterz@...radead.org, mingo@...hat.com, acme@...nel.org,
namhyung@...nel.org, mark.rutland@....com,
alexander.shishkin@...ux.intel.com, jolsa@...nel.org,
irogers@...gle.com, adrian.hunter@...el.com,
kan.liang@...ux.intel.com, linux-perf-users@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [RFC PATCH 0/3] Introduce a C extension module to allow libperf
usage from python
Hello Gautam
On Thu, Mar 13, 2025 at 01:21:21PM +0530, Gautam Menghani wrote:
> In this RFC series, we are introducing a C extension module to allow
> python programs to call the libperf API functions. Currently libperf can
> be used by C programs, but expanding the support to python is beneficial
> for python users.
>
> The structure of the patch series is as follows:
> 1. Patch 1 : Create wrappers for the perf structs which are used by
> examples/counting.c
>
> 2. Patch 2: Create the C extension module that maps and exposes the
> libperf functions to python programs
May I ask why you are not using SWIG? With libcpupower the kernel has
already been using SWIG to generate Python bindings for a C user-space API.
This has several advantages including a much smaller footprint (you only
need to copy the header definitions into a .swg file), can generate for
several languages (Perl, Ruby, Java and C#), and SWIG is an active,
tested, and mature piece of software code that has been around for
almost as long as the Linux kernel.
Python bindings including the makefile as an example:
https://elixir.bootlin.com/linux/v6.13.6/source/tools/power/cpupower/bindings/python
How to use the bindings in a script:
https://elixir.bootlin.com/linux/v6.13.6/source/tools/power/cpupower/bindings/python/test_raw_pylibcpupower.py
Original discussion:
https://lore.kernel.org/linux-pm/20240724221122.54601-1-jwyatt@redhat.com/
SWIG has been pretty useful as it helped me find two issues in the
libcpupower API that have been around for over 10 years:
https://lore.kernel.org/linux-pm/20240905021916.15938-1-jwyatt@redhat.com/T/#mf04b4ba93f79fe68c20c1d88d8ed966164a1c7d7
https://lore.kernel.org/linux-pm/20250305210901.24177-1-jwyatt@redhat.com/
>
> 2. Patch 3: A python variant of counting.c - counting.py to demonstrate
> the usage of libperf from python
>
> We have not added support for entire libperf, as we want to get
> community feedback on the approach taken in this series.
>
> Gautam Menghani (3):
> libperf: Introduce wrappers for perf structs to be exposed to python
> libperf: Introduce a C extension module for python
> libperf: Add counting.py example to demonstrate libperf usage from
> python
>
> tools/lib/perf/Build | 1 +
> .../perf/Documentation/examples/counting.py | 74 +++
> tools/lib/perf/Makefile | 12 +-
> tools/lib/perf/include/perf/py_perf.h | 431 ++++++++++++++++++
> tools/lib/perf/libperf.map | 1 +
> tools/lib/perf/py_perf.c | 262 +++++++++++
> 6 files changed, 779 insertions(+), 2 deletions(-)
> create mode 100755 tools/lib/perf/Documentation/examples/counting.py
> create mode 100644 tools/lib/perf/include/perf/py_perf.h
> create mode 100644 tools/lib/perf/py_perf.c
>
> --
> 2.47.0
>
--
Sincerely,
John Wyatt
Software Engineer, Core Kernel
Red Hat
Powered by blists - more mailing lists