2024-04-18 13:29:18

by Changbin Du

[permalink] [raw]
Subject: [PATCH 0/4] perf trace beauty: A fix and some improvements for newfstatat,mprotect

Changbin Du (4):
perf trace beauty: Fix statx flags printing
perf trace beauty: Beautify newfstatat flags
perf trace beauty: Always show param if show_zero is set
perf trace beauty: Always show mprotect prot even though PROT_NONE

tools/perf/builtin-trace.c | 15 ++++++++-------
tools/perf/trace/beauty/statx.c | 3 ++-
2 files changed, 10 insertions(+), 8 deletions(-)

--
2.34.1



2024-04-18 13:29:33

by Changbin Du

[permalink] [raw]
Subject: [PATCH 4/4] perf trace beauty: Always show mprotect prot even though PROT_NONE

Do not omit the flags even though it is PROT_NONE.

Signed-off-by: Changbin Du <[email protected]>
---
tools/perf/builtin-trace.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 349550b02f79..7f936f1b5519 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -1042,7 +1042,7 @@ static const struct syscall_fmt syscall_fmts[] = {
[4] = { .scnprintf = SCA_MOVE_MOUNT_FLAGS, /* flags */ }, }, },
{ .name = "mprotect",
.arg = { [0] = { .scnprintf = SCA_HEX, /* start */ },
- [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ }, }, },
+ [2] = { .scnprintf = SCA_MMAP_PROT, .show_zero = true, /* prot */ }, }, },
{ .name = "mq_unlink",
.arg = { [0] = { .scnprintf = SCA_FILENAME, /* u_name */ }, }, },
{ .name = "mremap", .hexret = true,
--
2.34.1


2024-04-18 13:31:36

by Changbin Du

[permalink] [raw]
Subject: [PATCH 1/4] perf trace beauty: Fix statx flags printing

Missed a string specifier '%s' in format string.

Signed-off-by: Changbin Du <[email protected]>
---
tools/perf/trace/beauty/statx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/trace/beauty/statx.c b/tools/perf/trace/beauty/statx.c
index dc5943a6352d..c61f2be53bda 100644
--- a/tools/perf/trace/beauty/statx.c
+++ b/tools/perf/trace/beauty/statx.c
@@ -21,7 +21,7 @@ size_t syscall_arg__scnprintf_statx_flags(char *bf, size_t size, struct syscall_
return scnprintf(bf, size, "%s%s", show_prefix ? "AT_STATX_" : "", "SYNC_AS_STAT");
#define P_FLAG(n) \
if (flags & AT_##n) { \
- printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
+ printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
flags &= ~AT_##n; \
}

--
2.34.1


2024-04-18 14:33:37

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH 4/4] perf trace beauty: Always show mprotect prot even though PROT_NONE

On Thu, Apr 18, 2024 at 09:13:04PM +0800, Changbin Du wrote:
> Do not omit the flags even though it is PROT_NONE.
>
> Signed-off-by: Changbin Du <[email protected]>
> ---
> tools/perf/builtin-trace.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
> index 349550b02f79..7f936f1b5519 100644
> --- a/tools/perf/builtin-trace.c
> +++ b/tools/perf/builtin-trace.c
> @@ -1042,7 +1042,7 @@ static const struct syscall_fmt syscall_fmts[] = {
> [4] = { .scnprintf = SCA_MOVE_MOUNT_FLAGS, /* flags */ }, }, },
> { .name = "mprotect",
> .arg = { [0] = { .scnprintf = SCA_HEX, /* start */ },
> - [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ }, }, },
> + [2] = { .scnprintf = SCA_MMAP_PROT, .show_zero = true, /* prot */ }, }, },


So since syscall_arg__scnprintf_mmap_prot() special cases 0 to print
NONE for prot... Ok, I'll expand a bit the commit log message _and_ the
syscall_fmts entry for mprotect.

- Arnaldo

> { .name = "mq_unlink",
> .arg = { [0] = { .scnprintf = SCA_FILENAME, /* u_name */ }, }, },
> { .name = "mremap", .hexret = true,
> --
> 2.34.1

2024-04-18 15:04:54

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH 1/4] perf trace beauty: Fix statx flags printing

On Thu, Apr 18, 2024 at 09:13:01PM +0800, Changbin Du wrote:
> Missed a string specifier '%s' in format string.

Humm, what branch should this be applied to? I ask because:

⬢[acme@toolbox perf-tools-next]$ git log --oneline tools/perf/trace/beauty/statx.c
f122b3d6d179455e perf beauty: Introduce scrape script for the 'statx' syscall 'mask' argument
3d6cfbaf279ddec9 perf beauty: Introduce scrape script for various fs syscalls 'flags' arguments
a672af9139a843eb tools headers: Remove almost unused copy of uapi/stat.h, add few conditional defines
6652830c87be8446 perf beauty: Use the system linux/fcntl.h instead of a copy from the kernel
690811f0128eb603 tools headers uapi: Sync linux/stat.h with the kernel sources to pick STATX_MNT_ID_UNIQUE
49c75d30b0078d30 tools headers uapi: Sync linux/stat.h with the kernel sources
5d33cbfedb51f732 perf beauty: Add support to STATX_MNT_ID in the 'statx' syscall 'mask' argument
c65c83ffe9045901 perf trace: Allow asking for not suppressing common string prefixes
794f594e0c3be619 perf beauty: Switch from GPL v2.0 to LGPL v2.1
fd5cead23f546973 (tag: perf-core-for-mingo-4.12-20170331) perf trace: Beautify statx syscall 'flag' and 'mask' arguments
⬢[acme@toolbox perf-tools-next]$

⬢[acme@toolbox perf-tools-next]$ tools/perf/trace/beauty/statx_mask.sh
static const char *statx_mask[] = {
[ilog2(0x00000001) + 1] = "TYPE",
[ilog2(0x00000002) + 1] = "MODE",
[ilog2(0x00000004) + 1] = "NLINK",
[ilog2(0x00000008) + 1] = "UID",
[ilog2(0x00000010) + 1] = "GID",
[ilog2(0x00000020) + 1] = "ATIME",
[ilog2(0x00000040) + 1] = "MTIME",
[ilog2(0x00000080) + 1] = "CTIME",
[ilog2(0x00000100) + 1] = "INO",
[ilog2(0x00000200) + 1] = "SIZE",
[ilog2(0x00000400) + 1] = "BLOCKS",
[ilog2(0x00000800) + 1] = "BTIME",
[ilog2(0x00001000) + 1] = "MNT_ID",
[ilog2(0x00002000) + 1] = "DIOALIGN",
[ilog2(0x00004000) + 1] = "MNT_ID_UNIQUE",
};
⬢[acme@toolbox perf-tools-next]$

Can you please try with what is in
https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git,
branch perf-tools-next?

- Arnaldo

> Signed-off-by: Changbin Du <[email protected]>
> ---
> tools/perf/trace/beauty/statx.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/perf/trace/beauty/statx.c b/tools/perf/trace/beauty/statx.c
> index dc5943a6352d..c61f2be53bda 100644
> --- a/tools/perf/trace/beauty/statx.c
> +++ b/tools/perf/trace/beauty/statx.c
> @@ -21,7 +21,7 @@ size_t syscall_arg__scnprintf_statx_flags(char *bf, size_t size, struct syscall_
> return scnprintf(bf, size, "%s%s", show_prefix ? "AT_STATX_" : "", "SYNC_AS_STAT");
> #define P_FLAG(n) \
> if (flags & AT_##n) { \
> - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
> + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
> flags &= ~AT_##n; \
> }
>
> --
> 2.34.1

2024-04-19 01:40:08

by Changbin Du

[permalink] [raw]
Subject: Re: [PATCH 1/4] perf trace beauty: Fix statx flags printing

On Thu, Apr 18, 2024 at 11:35:05AM -0300, Arnaldo Carvalho de Melo wrote:
> On Thu, Apr 18, 2024 at 09:13:01PM +0800, Changbin Du wrote:
> > Missed a string specifier '%s' in format string.
>
> Humm, what branch should this be applied to? I ask because:
>
> ⬢[acme@toolbox perf-tools-next]$ git log --oneline tools/perf/trace/beauty/statx.c
> f122b3d6d179455e perf beauty: Introduce scrape script for the 'statx' syscall 'mask' argument
> 3d6cfbaf279ddec9 perf beauty: Introduce scrape script for various fs syscalls 'flags' arguments
> a672af9139a843eb tools headers: Remove almost unused copy of uapi/stat.h, add few conditional defines
> 6652830c87be8446 perf beauty: Use the system linux/fcntl.h instead of a copy from the kernel
> 690811f0128eb603 tools headers uapi: Sync linux/stat.h with the kernel sources to pick STATX_MNT_ID_UNIQUE
> 49c75d30b0078d30 tools headers uapi: Sync linux/stat.h with the kernel sources
> 5d33cbfedb51f732 perf beauty: Add support to STATX_MNT_ID in the 'statx' syscall 'mask' argument
> c65c83ffe9045901 perf trace: Allow asking for not suppressing common string prefixes
> 794f594e0c3be619 perf beauty: Switch from GPL v2.0 to LGPL v2.1
> fd5cead23f546973 (tag: perf-core-for-mingo-4.12-20170331) perf trace: Beautify statx syscall 'flag' and 'mask' arguments
> ⬢[acme@toolbox perf-tools-next]$
>
> ⬢[acme@toolbox perf-tools-next]$ tools/perf/trace/beauty/statx_mask.sh
> static const char *statx_mask[] = {
> [ilog2(0x00000001) + 1] = "TYPE",
> [ilog2(0x00000002) + 1] = "MODE",
> [ilog2(0x00000004) + 1] = "NLINK",
> [ilog2(0x00000008) + 1] = "UID",
> [ilog2(0x00000010) + 1] = "GID",
> [ilog2(0x00000020) + 1] = "ATIME",
> [ilog2(0x00000040) + 1] = "MTIME",
> [ilog2(0x00000080) + 1] = "CTIME",
> [ilog2(0x00000100) + 1] = "INO",
> [ilog2(0x00000200) + 1] = "SIZE",
> [ilog2(0x00000400) + 1] = "BLOCKS",
> [ilog2(0x00000800) + 1] = "BTIME",
> [ilog2(0x00001000) + 1] = "MNT_ID",
> [ilog2(0x00002000) + 1] = "DIOALIGN",
> [ilog2(0x00004000) + 1] = "MNT_ID_UNIQUE",
> };
> ⬢[acme@toolbox perf-tools-next]$
>
> Can you please try with what is in
> https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git,
> branch perf-tools-next?
>
No problem, let me rebase on perf-tools-next. This patchset was created on
mainline.

> - Arnaldo
>
> > Signed-off-by: Changbin Du <[email protected]>
> > ---
> > tools/perf/trace/beauty/statx.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/tools/perf/trace/beauty/statx.c b/tools/perf/trace/beauty/statx.c
> > index dc5943a6352d..c61f2be53bda 100644
> > --- a/tools/perf/trace/beauty/statx.c
> > +++ b/tools/perf/trace/beauty/statx.c
> > @@ -21,7 +21,7 @@ size_t syscall_arg__scnprintf_statx_flags(char *bf, size_t size, struct syscall_
> > return scnprintf(bf, size, "%s%s", show_prefix ? "AT_STATX_" : "", "SYNC_AS_STAT");
> > #define P_FLAG(n) \
> > if (flags & AT_##n) { \
> > - printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
> > + printed += scnprintf(bf + printed, size - printed, "%s%s%s", printed ? "|" : "", show_prefix ? prefix : "", #n); \
> > flags &= ~AT_##n; \
> > }
> >
> > --
> > 2.34.1
>

--
Cheers,
Changbin Du

2024-04-19 03:49:17

by Changbin Du

[permalink] [raw]
Subject: Re: [PATCH 1/4] perf trace beauty: Fix statx flags printing

Hi, Arnaldo,

On Thu, Apr 18, 2024 at 11:35:05AM -0300, Arnaldo Carvalho de Melo wrote:
> On Thu, Apr 18, 2024 at 09:13:01PM +0800, Changbin Du wrote:
> > Missed a string specifier '%s' in format string.
>
> Humm, what branch should this be applied to? I ask because:
>
> ⬢[acme@toolbox perf-tools-next]$ git log --oneline tools/perf/trace/beauty/statx.c
> f122b3d6d179455e perf beauty: Introduce scrape script for the 'statx' syscall 'mask' argument
> 3d6cfbaf279ddec9 perf beauty: Introduce scrape script for various fs syscalls 'flags' arguments
> a672af9139a843eb tools headers: Remove almost unused copy of uapi/stat.h, add few conditional defines
> 6652830c87be8446 perf beauty: Use the system linux/fcntl.h instead of a copy from the kernel
> 690811f0128eb603 tools headers uapi: Sync linux/stat.h with the kernel sources to pick STATX_MNT_ID_UNIQUE
> 49c75d30b0078d30 tools headers uapi: Sync linux/stat.h with the kernel sources
> 5d33cbfedb51f732 perf beauty: Add support to STATX_MNT_ID in the 'statx' syscall 'mask' argument
> c65c83ffe9045901 perf trace: Allow asking for not suppressing common string prefixes
> 794f594e0c3be619 perf beauty: Switch from GPL v2.0 to LGPL v2.1
> fd5cead23f546973 (tag: perf-core-for-mingo-4.12-20170331) perf trace: Beautify statx syscall 'flag' and 'mask' arguments
> ⬢[acme@toolbox perf-tools-next]$
>
> ⬢[acme@toolbox perf-tools-next]$ tools/perf/trace/beauty/statx_mask.sh
> static const char *statx_mask[] = {
> [ilog2(0x00000001) + 1] = "TYPE",
> [ilog2(0x00000002) + 1] = "MODE",
> [ilog2(0x00000004) + 1] = "NLINK",
> [ilog2(0x00000008) + 1] = "UID",
> [ilog2(0x00000010) + 1] = "GID",
> [ilog2(0x00000020) + 1] = "ATIME",
> [ilog2(0x00000040) + 1] = "MTIME",
> [ilog2(0x00000080) + 1] = "CTIME",
> [ilog2(0x00000100) + 1] = "INO",
> [ilog2(0x00000200) + 1] = "SIZE",
> [ilog2(0x00000400) + 1] = "BLOCKS",
> [ilog2(0x00000800) + 1] = "BTIME",
> [ilog2(0x00001000) + 1] = "MNT_ID",
> [ilog2(0x00002000) + 1] = "DIOALIGN",
> [ilog2(0x00004000) + 1] = "MNT_ID_UNIQUE",
> };
> ⬢[acme@toolbox perf-tools-next]$
>
> Can you please try with what is in
> https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git,
> branch perf-tools-next?
>
> - Arnaldo
>
This code has been refactored and the old bug is gone. Could you just pick up
the last two changes?

perf trace beauty: Always show param if show_zero is set
perf trace beauty: Always show mprotect prot even though PROT_NONE

--
Cheers,
Changbin Du