From: Namhyung Kim <namhyung@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Kan Liang <kan.liang@linux.intel.com>,
Nathan Chancellor <nathan@kernel.org>,
Nick Desaulniers <ndesaulniers@google.com>,
Bill Wendling <morbo@google.com>,
Justin Stitt <justinstitt@google.com>,
Aditya Gupta <adityag@linux.ibm.com>,
"Steinar H. Gunderson" <sesse@google.com>,
Charlie Jenkins <charlie@rivosinc.com>,
Changbin Du <changbin.du@huawei.com>,
"Masami Hiramatsu (Google)" <mhiramat@kernel.org>,
James Clark <james.clark@linaro.org>,
Kajol Jain <kjain@linux.ibm.com>,
Athira Rajeev <atrajeev@linux.vnet.ibm.com>,
Li Huafei <lihuafei1@huawei.com>,
Dmitry Vyukov <dvyukov@google.com>,
Andi Kleen <ak@linux.intel.com>,
Chaitanya S Prakash <chaitanyas.prakash@arm.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
llvm@lists.linux.dev, Song Liu <song@kernel.org>,
bpf@vger.kernel.org, Daniel Xu <dxu@dxuuu.xyz>
Subject: Re: [PATCH v2 00/17] Support dynamic opening of capstone/llvm remove BUILD_NONDISTRO
Date: Thu, 13 Mar 2025 15:24:22 -0700 [thread overview]
Message-ID: <Z9NbFqaDQMjvYxcc@google.com> (raw)
In-Reply-To: <CAP-5=fV_z+Ev=wDt+QDwx8GTNXNQH30H5KXzaUXQBOG1Mb8hJg@mail.gmail.com>
Hi Ian,
On Wed, Mar 12, 2025 at 02:04:30PM -0700, Ian Rogers wrote:
> On Mon, Feb 10, 2025 at 10:06 AM Ian Rogers <irogers@google.com> wrote:
> >
> > On Thu, Jan 23, 2025 at 3:36 PM Ian Rogers <irogers@google.com> wrote:
> > > On Thu, Jan 23, 2025 at 1:59 PM Namhyung Kim <namhyung@kernel.org> wrote:
> > > > I like changes up to this in general. Let me take a look at the
> > > > patches.
> >
> > So it would be nice to make progress with this series given some level
> > of happiness, I don't see any actions currently on the patch series as
> > is. If I may be so bold as to recap the issues that have come up:
> >
> > 1) Andi Kleen mentions that dlopen is inferior to linking against
> > libraries and those libraries aren't a memory overhead if unused.
> >
> > I agree but pointed-out the data center use case means that saving
> > size on binaries can be important to some (me). We've also been trying
> > to reduce perf's dependencies for distributions as perf dragging in
> > say the whole of libLLVM can be annoying for making minimal
> > distributions that contain perf. Perhaps somebody (Arnaldo?) more
> > involved with distributions can confirm or deny the distribution
> > problem, I'm hoping it is self-evident.
> >
> > 2) Namhyung Kim was uncomfortable with the code defining
> > types/constants that were in header files as the two may drift over
> > time
> >
> > I agree but in the same way as a function name is an ABI for dlysym,
> > the types/constants are too. Yes a header file may change, but in
> > doing so the ABI has changed and so it would be an incompatible change
> > and everything would be broken. We'd need to fix the code for this,
> > say as we did when libbpf moved to version 1.0, but using a header
> > file would only weakly guard against this problem. The problem with
> > including the header files is that then the build either breaks
> > without the header or we need to support a no linking against a
> > library and not using dlopen case. I suspect a lot of distributions
> > wouldn't understand the build subtlety in this, the necessary build
> > options and things installed, and we'd end up not using things like
> > libLLVM even when it is known to be a large performance win. I also
> > hope one day we can move from parsing text out of forked commands, as
> > it is slower and more brittle, to just directly using libraries.
> > Making dlopen the fallback (probably with a warning on failure) seems
> > like the right direction for this except we won't get it if we need to
> > drag in extra dependency header files for the build to succeed (well
> > we could have a no library or dlopen option, but then we'd probably
> > find distributions packaging this and things like perf annotate
> > getting broken as they don't even know how to dlopen a library).
> >
> > 3) Namhyung Kim (and I) also raises that the libcapstone patch can be
> > smaller by dropping the print_capstone_detail support on x86
> >
> > Note, given the similarity between capstone and libLLVM for
> > disassembly, it is curious that only capstone gives the extra detail.
> >
> > I agree. Given the capstone disassembly output will be compromised we
> > should warn for this, probably in Makefile.config to avoid running
> > afoul of -Werror. It isn't clear that having a warning is a good move
> > given the handful of structs needed to support print_capstone_detail.
> > I'd prefer to keep the structs so that we haven't got a warning that
> > looks like it needs cleaning up.
> >
> > 4) Namhyung Kim raised concerns over #if placement
> >
> > Namhyung raised that he'd prefer:
> > ```
> > #if HAVE_LIBCAPSTONE_SUPPORT
> > // lots of code
> > #else
> > // lots of code
> > #endif
> > ```
> > rather than the #ifs being inside or around individual functions. I
> > raised that the large #ifs is a problem in the current code as you
> > lose context when trying to understand a function. You may look at a
> > function but not realize it isn't being used because of a #if 10s or
> > 100s of lines above. Namhyung raised that the large #ifs is closer to
> > kernel style, I disagreed as I think kernel style is only doing this
> > when it stubs out a bunch of API functions, not when more context
> > would be useful. Hopefully as the person writing the patches the style
> > choice I've made can be respected.
> >
> > 5) Daniel Xu raised issues with the removal of libbfd for Rust
> > support, as the code implies libbfd C++ demangling is a pre-requisite
> > of legacy rust symbol demangling
> >
> > A separate patch was posted adding Rust v0 symbol demangling with no
> > libbfd dependency:
> > https://lore.kernel.org/lkml/20250129193037.573431-1-irogers@google.com/
> > The legacy support should work with the non-libbfd demanglers as
> > that's what we have today. We should really clean up Rust demangling
> > and have tests. This is blocked on the Rust community responding to:
> > https://github.com/rust-lang/rust/issues/60705
I think #ifdef placements is not a big deal, but I still don't want to
pull libcapstone details into the perf tree.
For LLVM, I think you should to build llvm-c-helpers anyway which means
you still need LLVM headers and don't need to redefine the structures.
Can we do the same for capstone? I think it's best to use capstone
headers directly and add a build option to use dlopen().
Thanks,
Namhyung
next prev parent reply other threads:[~2025-03-13 22:24 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-22 6:23 [PATCH v2 00/17] Support dynamic opening of capstone/llvm remove BUILD_NONDISTRO Ian Rogers
2025-01-22 6:23 ` [PATCH v2 01/17] perf build: Remove libtracefs configuration Ian Rogers
2025-01-22 6:23 ` [PATCH v2 02/17] perf map: Constify objdump offset/address conversion APIs Ian Rogers
2025-01-22 6:23 ` [PATCH v2 03/17] perf capstone: Move capstone functionality into its own file Ian Rogers
2025-01-22 6:23 ` [PATCH v2 04/17] perf llvm: Move llvm " Ian Rogers
2025-01-22 6:23 ` [PATCH v2 05/17] perf capstone: Remove open_capstone_handle Ian Rogers
2025-01-22 6:23 ` [PATCH v2 06/17] perf capstone: Support for dlopen-ing libcapstone.so Ian Rogers
2025-01-22 6:23 ` [PATCH v2 07/17] perf llvm: Support for dlopen-ing libLLVM.so Ian Rogers
2025-01-22 6:23 ` [PATCH v2 08/17] perf llvm: Mangle libperf-llvm.so function names Ian Rogers
2025-01-22 6:23 ` [PATCH v2 09/17] perf dso: Move read_symbol from llvm/capstone to dso Ian Rogers
2025-01-22 6:23 ` [PATCH v2 10/17] perf dso: Support BPF programs in dso__read_symbol Ian Rogers
2025-01-22 6:23 ` [PATCH v2 11/17] perf llvm: Disassemble cleanup Ian Rogers
2025-01-22 6:23 ` [PATCH v2 12/17] perf dso: Clean up read_symbol error handling Ian Rogers
2025-01-22 6:23 ` [PATCH v2 13/17] perf build: Remove libbfd support Ian Rogers
2025-01-22 6:23 ` [PATCH v2 14/17] perf build: Remove libiberty support Ian Rogers
2025-01-22 6:23 ` [PATCH v2 15/17] perf build: Remove unused defines Ian Rogers
2025-01-22 6:23 ` [PATCH v2 16/17] perf disasm: Remove disasm_bpf Ian Rogers
2025-01-22 6:23 ` [PATCH v2 17/17] perf disasm: Make ins__scnprintf and ins__is_nop static Ian Rogers
2025-01-22 15:20 ` [PATCH v2 00/17] Support dynamic opening of capstone/llvm remove BUILD_NONDISTRO Andi Kleen
2025-01-22 16:11 ` Ian Rogers
2025-01-23 18:19 ` Andi Kleen
2025-01-23 21:24 ` Ian Rogers
2025-01-23 21:59 ` Namhyung Kim
2025-01-23 23:36 ` Ian Rogers
2025-02-10 18:06 ` Ian Rogers
2025-03-12 21:04 ` Ian Rogers
2025-03-13 22:24 ` Namhyung Kim [this message]
2025-03-14 5:54 ` Ian Rogers
2025-03-14 17:06 ` Arnaldo Carvalho de Melo
2025-03-14 20:34 ` Ian Rogers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z9NbFqaDQMjvYxcc@google.com \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=adityag@linux.ibm.com \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=atrajeev@linux.vnet.ibm.com \
--cc=bpf@vger.kernel.org \
--cc=chaitanyas.prakash@arm.com \
--cc=changbin.du@huawei.com \
--cc=charlie@rivosinc.com \
--cc=dvyukov@google.com \
--cc=dxu@dxuuu.xyz \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=justinstitt@google.com \
--cc=kan.liang@linux.intel.com \
--cc=kjain@linux.ibm.com \
--cc=lihuafei1@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=mark.rutland@arm.com \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=peterz@infradead.org \
--cc=sesse@google.com \
--cc=song@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.