Message ID | 20241104-perf_syscalltbl-v1-0-9adae5c761ef@rivosinc.com (mailing list archive) |
---|---|
Headers | show |
Series | perf tools: Use generic syscall scripts for all archs | expand |
On Mon, Nov 4, 2024, at 22:06, Charlie Jenkins wrote: > Standardize the generation of syscall headers around syscall tables. > Previously each architecture independently selected how syscall headers > would be generated, or would not define a way and fallback onto > libaudit. Convert all architectures to use a standard syscall header > generation script and allow each architecture to override the syscall > table to use if they do not use the generic table. > > As a result of these changes, no architecture will require libaudit, and > so the fallback case of using libaudit is removed by this series. > > Testing: > > I have tested that the syscall mappings of id to name generation works > as expected for every architecture, but I have only validated that perf > trace compiles and runs as expected on riscv, arm64, and x86_64. > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> Thanks for doing this, I had plans to do this myself, but hadn't completed that bit so far. I'm travelling at the moment, so I'm not sure I have time to look at it in enough detail this week. One problem I ran into doing this previously was the incompatible format of the tables for x86 and s390, which have conflicting interpretations of what the '-' character means. It's possible that this is only really relevant for the in-kernel table, not the version in tools. Arnd
On Mon, Nov 04, 2024 at 10:13:18PM +0100, Arnd Bergmann wrote: > On Mon, Nov 4, 2024, at 22:06, Charlie Jenkins wrote: > > Standardize the generation of syscall headers around syscall tables. > > Previously each architecture independently selected how syscall headers > > would be generated, or would not define a way and fallback onto > > libaudit. Convert all architectures to use a standard syscall header > > generation script and allow each architecture to override the syscall > > table to use if they do not use the generic table. > > > > As a result of these changes, no architecture will require libaudit, and > > so the fallback case of using libaudit is removed by this series. > > > > Testing: > > > > I have tested that the syscall mappings of id to name generation works > > as expected for every architecture, but I have only validated that perf > > trace compiles and runs as expected on riscv, arm64, and x86_64. > > > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> > > Thanks for doing this, I had plans to do this myself, but hadn't > completed that bit so far. I'm travelling at the moment, so I'm > not sure I have time to look at it in enough detail this week. > > One problem I ran into doing this previously was the incompatible > format of the tables for x86 and s390, which have conflicting > interpretations of what the '-' character means. It's possible > that this is only really relevant for the in-kernel table, > not the version in tools. > I don't think that is an issue for this usecase because the only information that is taken from the syscall table is the number and the name of the syscall. '-' doesn't appear in either of these columns! - Charlie > Arnd
On Mon, Nov 4, 2024 at 1:32 PM Charlie Jenkins <charlie@rivosinc.com> wrote: > > On Mon, Nov 04, 2024 at 10:13:18PM +0100, Arnd Bergmann wrote: > > On Mon, Nov 4, 2024, at 22:06, Charlie Jenkins wrote: > > > Standardize the generation of syscall headers around syscall tables. > > > Previously each architecture independently selected how syscall headers > > > would be generated, or would not define a way and fallback onto > > > libaudit. Convert all architectures to use a standard syscall header > > > generation script and allow each architecture to override the syscall > > > table to use if they do not use the generic table. > > > > > > As a result of these changes, no architecture will require libaudit, and > > > so the fallback case of using libaudit is removed by this series. > > > > > > Testing: > > > > > > I have tested that the syscall mappings of id to name generation works > > > as expected for every architecture, but I have only validated that perf > > > trace compiles and runs as expected on riscv, arm64, and x86_64. > > > > > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> > > > > Thanks for doing this, I had plans to do this myself, but hadn't > > completed that bit so far. I'm travelling at the moment, so I'm > > not sure I have time to look at it in enough detail this week. > > > > One problem I ran into doing this previously was the incompatible > > format of the tables for x86 and s390, which have conflicting > > interpretations of what the '-' character means. It's possible > > that this is only really relevant for the in-kernel table, > > not the version in tools. > > > > I don't think that is an issue for this usecase because the only > information that is taken from the syscall table is the number and the > name of the syscall. '-' doesn't appear in either of these columns! This is cool stuff. An area that may not be immediately apparent for improvement is that the x86-64 build only has access to the 64-bit syscall table. Perhaps all the syscall tables should always be built and then at runtime the architecture of the perf.data file, etc. used to choose the appropriate one. The cleanup to add an ELF host #define could help with this: https://lore.kernel.org/linux-perf-users/20241017002520.59124-1-irogers@google.com/ Ultimately I'd like to see less arch code as it inherently makes cross platform worker harder. That doesn't impact this work which I'm happy to review. Thanks, Ian
On Mon, Nov 04, 2024 at 02:03:28PM -0800, Ian Rogers wrote: > On Mon, Nov 4, 2024 at 1:32 PM Charlie Jenkins <charlie@rivosinc.com> wrote: > > > > On Mon, Nov 04, 2024 at 10:13:18PM +0100, Arnd Bergmann wrote: > > > On Mon, Nov 4, 2024, at 22:06, Charlie Jenkins wrote: > > > > Standardize the generation of syscall headers around syscall tables. > > > > Previously each architecture independently selected how syscall headers > > > > would be generated, or would not define a way and fallback onto > > > > libaudit. Convert all architectures to use a standard syscall header > > > > generation script and allow each architecture to override the syscall > > > > table to use if they do not use the generic table. > > > > > > > > As a result of these changes, no architecture will require libaudit, and > > > > so the fallback case of using libaudit is removed by this series. > > > > > > > > Testing: > > > > > > > > I have tested that the syscall mappings of id to name generation works > > > > as expected for every architecture, but I have only validated that perf > > > > trace compiles and runs as expected on riscv, arm64, and x86_64. > > > > > > > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> > > > > > > Thanks for doing this, I had plans to do this myself, but hadn't > > > completed that bit so far. I'm travelling at the moment, so I'm > > > not sure I have time to look at it in enough detail this week. > > > > > > One problem I ran into doing this previously was the incompatible > > > format of the tables for x86 and s390, which have conflicting > > > interpretations of what the '-' character means. It's possible > > > that this is only really relevant for the in-kernel table, > > > not the version in tools. > > > > > > > I don't think that is an issue for this usecase because the only > > information that is taken from the syscall table is the number and the > > name of the syscall. '-' doesn't appear in either of these columns! > > This is cool stuff. An area that may not be immediately apparent for > improvement is that the x86-64 build only has access to the 64-bit > syscall table. Perhaps all the syscall tables should always be built > and then at runtime the architecture of the perf.data file, etc. used > to choose the appropriate one. The cleanup to add an ELF host #define > could help with this: > https://lore.kernel.org/linux-perf-users/20241017002520.59124-1-irogers@google.com/ Oh that's a great idea! I think these changes will make it more seamless to make that a reality. > > Ultimately I'd like to see less arch code as it inherently makes cross > platform worker harder. That doesn't impact this work which I'm happy > to review. Yeah I agree. Reducing arch code was the motivation for this change. There was the issue a couple weeks ago that caused all architectures that used libaudit to break from commit 7a2fb5619cc1fb53 ("perf trace: Fix iteration of syscall ids in syscalltbl->entries"), so this change will eliminate that source of difference between architectures. - Charlie > > Thanks, > Ian
On Mon, Nov 04, 2024 at 03:35:33PM -0800, Charlie Jenkins wrote: > On Mon, Nov 04, 2024 at 02:03:28PM -0800, Ian Rogers wrote: > > On Mon, Nov 4, 2024 at 1:32 PM Charlie Jenkins <charlie@rivosinc.com> wrote: > > > > > > On Mon, Nov 04, 2024 at 10:13:18PM +0100, Arnd Bergmann wrote: > > > > On Mon, Nov 4, 2024, at 22:06, Charlie Jenkins wrote: > > > > > Standardize the generation of syscall headers around syscall tables. > > > > > Previously each architecture independently selected how syscall headers > > > > > would be generated, or would not define a way and fallback onto > > > > > libaudit. Convert all architectures to use a standard syscall header > > > > > generation script and allow each architecture to override the syscall > > > > > table to use if they do not use the generic table. > > > > > > > > > > As a result of these changes, no architecture will require libaudit, and > > > > > so the fallback case of using libaudit is removed by this series. > > > > > > > > > > Testing: > > > > > > > > > > I have tested that the syscall mappings of id to name generation works > > > > > as expected for every architecture, but I have only validated that perf > > > > > trace compiles and runs as expected on riscv, arm64, and x86_64. > > > > > > > > > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> > > > > > > > > Thanks for doing this, I had plans to do this myself, but hadn't > > > > completed that bit so far. I'm travelling at the moment, so I'm > > > > not sure I have time to look at it in enough detail this week. > > > > > > > > One problem I ran into doing this previously was the incompatible > > > > format of the tables for x86 and s390, which have conflicting > > > > interpretations of what the '-' character means. It's possible > > > > that this is only really relevant for the in-kernel table, > > > > not the version in tools. > > > > > > > > > > I don't think that is an issue for this usecase because the only > > > information that is taken from the syscall table is the number and the > > > name of the syscall. '-' doesn't appear in either of these columns! > > > > This is cool stuff. An area that may not be immediately apparent for > > improvement is that the x86-64 build only has access to the 64-bit > > syscall table. Perhaps all the syscall tables should always be built > > and then at runtime the architecture of the perf.data file, etc. used > > to choose the appropriate one. The cleanup to add an ELF host #define > > could help with this: > > https://lore.kernel.org/linux-perf-users/20241017002520.59124-1-irogers@google.com/ > > Oh that's a great idea! I think these changes will make it more seamless > to make that a reality. > > > > > Ultimately I'd like to see less arch code as it inherently makes cross > > platform worker harder. That doesn't impact this work which I'm happy > > to review. > > Yeah I agree. Reducing arch code was the motivation for this change. > There was the issue a couple weeks ago that caused all architectures > that used libaudit to break from commit 7a2fb5619cc1fb53 ("perf trace: > Fix iteration of syscall ids in syscalltbl->entries"), so this change > will eliminate that source of difference between architectures. > > - Charlie > > > > > Thanks, > > Ian Let me know if you have any feedback on this series! - Charlie
Standardize the generation of syscall headers around syscall tables. Previously each architecture independently selected how syscall headers would be generated, or would not define a way and fallback onto libaudit. Convert all architectures to use a standard syscall header generation script and allow each architecture to override the syscall table to use if they do not use the generic table. As a result of these changes, no architecture will require libaudit, and so the fallback case of using libaudit is removed by this series. Testing: I have tested that the syscall mappings of id to name generation works as expected for every architecture, but I have only validated that perf trace compiles and runs as expected on riscv, arm64, and x86_64. Signed-off-by: Charlie Jenkins <charlie@rivosinc.com> --- Charlie Jenkins (16): perf tools: Create generic syscall table support perf tools: arc: Support generic syscall headers perf tools: csky: Support generic syscall headers perf tools: arm: Support syscall headers perf tools: sh: Support syscall headers perf tools: sparc: Support syscall headers perf tools: xtensa: Support syscall header perf tools: x86: Use generic syscall scripts perf tools: alpha: Support syscall header perf tools: parisc: Support syscall header perf tools: arm64: Use syscall table perf tools: loongarch: Use syscall table perf tools: mips: Use generic syscall scripts perf tools: powerpc: Use generic syscall table scripts perf tools: s390: Use generic syscall table scripts perf tools: Remove dependency on libaudit Documentation/admin-guide/workload-tracing.rst | 2 +- tools/build/feature/Makefile | 4 - tools/build/feature/test-libaudit.c | 11 - tools/perf/Documentation/perf-check.txt | 1 - tools/perf/Makefile.config | 28 +- tools/perf/Makefile.perf | 12 +- tools/perf/arch/alpha/entry/syscalls/Kbuild | 2 + .../arch/alpha/entry/syscalls/Makefile.syscalls | 5 + tools/perf/arch/alpha/entry/syscalls/syscall.tbl | 504 ++++++++++++++++++++ tools/perf/arch/alpha/include/syscall_table.h | 2 + tools/perf/arch/arc/entry/syscalls/Kbuild | 2 + .../perf/arch/arc/entry/syscalls/Makefile.syscalls | 3 + tools/perf/arch/arc/include/syscall_table.h | 2 + tools/perf/arch/arm/entry/syscalls/Kbuild | 4 + .../perf/arch/arm/entry/syscalls/Makefile.syscalls | 2 + tools/perf/arch/arm/entry/syscalls/syscall.tbl | 479 +++++++++++++++++++ tools/perf/arch/arm/include/syscall_table.h | 2 + tools/perf/arch/arm64/Makefile | 22 - tools/perf/arch/arm64/entry/syscalls/Kbuild | 3 + .../arch/arm64/entry/syscalls/Makefile.syscalls | 6 + tools/perf/arch/arm64/entry/syscalls/mksyscalltbl | 46 -- .../perf/arch/arm64/entry/syscalls/syscall_32.tbl | 476 +++++++++++++++++++ .../perf/arch/arm64/entry/syscalls/syscall_64.tbl | 1 + tools/perf/arch/arm64/include/syscall_table.h | 8 + tools/perf/arch/csky/entry/syscalls/Kbuild | 2 + .../arch/csky/entry/syscalls/Makefile.syscalls | 3 + tools/perf/arch/csky/include/syscall_table.h | 2 + tools/perf/arch/loongarch/Makefile | 22 - tools/perf/arch/loongarch/entry/syscalls/Kbuild | 2 + .../loongarch/entry/syscalls/Makefile.syscalls | 3 + .../arch/loongarch/entry/syscalls/mksyscalltbl | 45 -- tools/perf/arch/loongarch/include/syscall_table.h | 2 + tools/perf/arch/mips/Makefile | 18 - tools/perf/arch/mips/entry/syscalls/Kbuild | 2 + .../arch/mips/entry/syscalls/Makefile.syscalls | 5 + tools/perf/arch/mips/entry/syscalls/mksyscalltbl | 32 -- tools/perf/arch/mips/include/syscall_table.h | 2 + tools/perf/arch/parisc/entry/syscalls/Kbuild | 3 + .../arch/parisc/entry/syscalls/Makefile.syscalls | 6 + tools/perf/arch/parisc/entry/syscalls/syscall.tbl | 463 +++++++++++++++++++ tools/perf/arch/parisc/include/syscall_table.h | 8 + tools/perf/arch/powerpc/Makefile | 25 - tools/perf/arch/powerpc/entry/syscalls/Kbuild | 3 + .../arch/powerpc/entry/syscalls/Makefile.syscalls | 6 + .../perf/arch/powerpc/entry/syscalls/mksyscalltbl | 39 -- tools/perf/arch/powerpc/include/syscall_table.h | 8 + tools/perf/arch/riscv/entry/syscalls/Kbuild | 2 + .../arch/riscv/entry/syscalls/Makefile.syscalls | 4 + tools/perf/arch/riscv/include/syscall_table.h | 8 + tools/perf/arch/s390/Makefile | 21 - tools/perf/arch/s390/entry/syscalls/Kbuild | 2 + .../arch/s390/entry/syscalls/Makefile.syscalls | 5 + tools/perf/arch/s390/entry/syscalls/mksyscalltbl | 32 -- tools/perf/arch/s390/include/syscall_table.h | 2 + tools/perf/arch/sh/entry/syscalls/Kbuild | 2 + .../perf/arch/sh/entry/syscalls/Makefile.syscalls | 4 + tools/perf/arch/sh/entry/syscalls/syscall.tbl | 468 +++++++++++++++++++ tools/perf/arch/sh/include/syscall_table.h | 2 + tools/perf/arch/sparc/entry/syscalls/Kbuild | 3 + .../arch/sparc/entry/syscalls/Makefile.syscalls | 5 + tools/perf/arch/sparc/entry/syscalls/syscall.tbl | 510 +++++++++++++++++++++ tools/perf/arch/sparc/include/syscall_table.h | 8 + tools/perf/arch/x86/Build | 1 - tools/perf/arch/x86/Makefile | 25 - tools/perf/arch/x86/entry/syscalls/Kbuild | 3 + .../perf/arch/x86/entry/syscalls/Makefile.syscalls | 6 + tools/perf/arch/x86/entry/syscalls/syscalltbl.sh | 42 -- tools/perf/arch/x86/include/syscall_table.h | 8 + tools/perf/arch/xtensa/entry/syscalls/Kbuild | 2 + .../arch/xtensa/entry/syscalls/Makefile.syscalls | 4 + tools/perf/arch/xtensa/entry/syscalls/syscall.tbl | 435 ++++++++++++++++++ tools/perf/arch/xtensa/include/syscall_table.h | 2 + tools/perf/builtin-check.c | 1 - tools/perf/builtin-help.c | 2 - tools/perf/builtin-trace.c | 30 -- tools/perf/check-headers.sh | 9 + tools/perf/perf.c | 6 +- tools/perf/scripts/Makefile.syscalls | 69 +++ tools/perf/scripts/syscalltbl.sh | 86 ++++ tools/perf/tests/make | 7 +- tools/perf/util/env.c | 4 +- tools/perf/util/generate-cmdlist.sh | 4 +- tools/perf/util/syscalltbl.c | 87 +--- tools/scripts/syscall.tbl | 405 ++++++++++++++++ 84 files changed, 4089 insertions(+), 555 deletions(-) --- base-commit: 59b723cd2adbac2a34fc8e12c74ae26ae45bf230 change-id: 20240913-perf_syscalltbl-6f98defcc6f5