From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Benjamin Peterson <benjamin@python.org>
Cc: peterz@infradead.org, mingo@redhat.com,
alexander.shishkin@linux.intel.com, jolsa@redhat.com,
namhyung@kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] perf trace beautify: Beautify flags of mount(2) and umount(2).
Date: Thu, 30 Aug 2018 15:28:48 -0300 [thread overview]
Message-ID: <20180830182848.GE6097@kernel.org> (raw)
In-Reply-To: <20180828035344.31500-1-benjamin@python.org>
Em Mon, Aug 27, 2018 at 08:53:44PM -0700, Benjamin Peterson escreveu:
> Example output of perf trace -e mount,umount2:
>
> 6243.930 ( 0.052 ms): mount/30976 mount(dev_name: 0x55dc541bb920, dir_name: 0x55dc541bc960, type: 0x55dc541b9c40, flags: BIND) = 0
> 7851.821 (26.015 ms): umount/30983 umount2(name: 0x558daa82cf50, flags: MNT_FORCE ) = 0
>
> Signed-off-by: Benjamin Peterson <benjamin@python.org>
So, I tried:
Before your patch:
# perf trace -e *mount* mount /dev/mapper/fedora-home /s
0.000 ( 4.335 ms): mount/3126 mount(dev_name: 0x55deecc4d480, dir_name: 0x55deecc4d4a0, type: 0x55deecc53880, flags: 3236757504) = 0
#
# perf trace -e *mount* umount /dev/mapper/fedora-home /s
? ( ): umount/3138 ... [continued]: umount2()) = 0
11.576 (umount: 0.004 ms): /s: not mounted.umount/
3138 umount2(arg0: 94501956754656, arg1: 0, arg2: 1, arg3: 140051050083104, arg4: 4, arg5: 94501956755136) = -1 EINVAL Invalid argument
#
After:
[root@jouet ~]# perf trace -e *mount* mount /dev/mapper/fedora-home /s
0.000 ( 1.213 ms): mount/5244 mount(dev_name: 0x5558c1169480, dir_name: 0x5558c11694a0, type: 0x5558c116f880, flags: ) = 0
[root@jouet ~]# perf trace -e *mount* umount /s
0.000 ( 9.241 ms): umount/5251 umount2(name: 0x55f74a986480 ) = 0
The flags for mount got empty? Can you pleaes check that? I.e. using the
default mount options, not specifying a 'bind' mount like you did.
I'm splitting this patch so that the aliasing of 'umount2' to 'umount'
gets merged now,
Check my perf/core branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git
- Arnaldo
> ---
> tools/perf/builtin-trace.c | 5 ++
> tools/perf/trace/beauty/mount_flags.c | 79 +++++++++++++++++++++++++++
> 2 files changed, 84 insertions(+)
> create mode 100644 tools/perf/trace/beauty/mount_flags.c
>
> diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
> index 22ab8e67c760..3cffb25d1928 100644
> --- a/tools/perf/builtin-trace.c
> +++ b/tools/perf/builtin-trace.c
> @@ -603,6 +603,7 @@ static size_t syscall_arg__scnprintf_getrandom_flags(char *bf, size_t size,
> #include "trace/beauty/futex_val3.c"
> #include "trace/beauty/mmap.c"
> #include "trace/beauty/mode_t.c"
> +#include "trace/beauty/mount_flags.c"
> #include "trace/beauty/msg_flags.c"
> #include "trace/beauty/open_flags.c"
> #include "trace/beauty/perf_event_open.c"
> @@ -722,6 +723,8 @@ static struct syscall_fmt {
> .arg = { [0] = { .scnprintf = SCA_HEX, /* addr */ },
> [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ },
> [3] = { .scnprintf = SCA_MMAP_FLAGS, /* flags */ }, }, },
> + { .name = "mount",
> + .arg = { [3] = { .scnprintf = SCA_MOUNT_FLAGS, /* flags */ }, }, },
> { .name = "mprotect",
> .arg = { [0] = { .scnprintf = SCA_HEX, /* start */ },
> [2] = { .scnprintf = SCA_MMAP_PROT, /* prot */ }, }, },
> @@ -830,6 +833,8 @@ static struct syscall_fmt {
> .arg = { [2] = { .scnprintf = SCA_SIGNUM, /* sig */ }, }, },
> { .name = "tkill",
> .arg = { [1] = { .scnprintf = SCA_SIGNUM, /* sig */ }, }, },
> + { .name = "umount2", .alias = "umount",
> + .arg = { [1] = { .scnprintf = SCA_UMOUNT_FLAGS, /* flags */ }, }, },
> { .name = "uname", .alias = "newuname", },
> { .name = "unlinkat",
> .arg = { [0] = { .scnprintf = SCA_FDAT, /* dfd */ }, }, },
> diff --git a/tools/perf/trace/beauty/mount_flags.c b/tools/perf/trace/beauty/mount_flags.c
> new file mode 100644
> index 000000000000..86790b82c869
> --- /dev/null
> +++ b/tools/perf/trace/beauty/mount_flags.c
> @@ -0,0 +1,79 @@
> +// SPDX-License-Identifier: GPL-2.0
> +#include <sys/mount.h>
> +
> +static size_t syscall_arg__scnprintf_mount_flags(char *bf, size_t size, struct syscall_arg *arg)
> +{
> + size_t printed = 0;
> + int flags = arg->val;
> +
> + if ((flags & MS_MGC_MSK) == MS_MGC_VAL)
> + flags &= ~MS_MGC_MSK;
> +
> +#define P_FLAG(n) \
> + if (flags & MS_##n) { \
> + printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
> + flags &= ~MS_##n; \
> + }
> +
> + P_FLAG(RDONLY);
> + P_FLAG(NOSUID);
> + P_FLAG(NODEV);
> + P_FLAG(NOEXEC);
> + P_FLAG(SYNCHRONOUS);
> + P_FLAG(REMOUNT);
> + P_FLAG(MANDLOCK);
> + P_FLAG(DIRSYNC);
> + P_FLAG(NOATIME);
> + P_FLAG(NODIRATIME);
> + P_FLAG(BIND);
> + P_FLAG(MOVE);
> + P_FLAG(REC);
> + P_FLAG(SILENT);
> + P_FLAG(POSIXACL);
> + P_FLAG(UNBINDABLE);
> + P_FLAG(PRIVATE);
> + P_FLAG(SLAVE);
> + P_FLAG(SHARED);
> + P_FLAG(RELATIME);
> + P_FLAG(KERNMOUNT);
> + P_FLAG(I_VERSION);
> + P_FLAG(STRICTATIME);
> + P_FLAG(LAZYTIME);
> + P_FLAG(ACTIVE);
> + P_FLAG(NOUSER);
> +
> +#undef P_FLAG
> +
> + if (flags)
> + printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
> +
> + return printed;
> +}
> +
> +#define SCA_MOUNT_FLAGS syscall_arg__scnprintf_mount_flags
> +
> +static size_t syscall_arg__scnprintf_umount_flags(char *bf, size_t size, struct syscall_arg *arg)
> +{
> + size_t printed = 0;
> + int flags = arg->val;
> +
> +#define P_FLAG(n) \
> + if (flags & n) { \
> + printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \
> + flags &= ~n; \
> + }
> +
> + P_FLAG(MNT_FORCE);
> + P_FLAG(MNT_DETACH);
> + P_FLAG(MNT_EXPIRE);
> + P_FLAG(UMOUNT_NOFOLLOW);
> +
> +#undef P_FLAG
> +
> + if (flags)
> + printed += scnprintf(bf + printed, size - printed, "%s%#x", printed ? "|" : "", flags);
> +
> + return printed;
> +}
> +
> +#define SCA_UMOUNT_FLAGS syscall_arg__scnprintf_umount_flags
> --
> 2.17.1
next prev parent reply other threads:[~2018-08-30 18:29 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-28 3:53 [PATCH] perf trace beautify: Beautify flags of mount(2) and umount(2) Benjamin Peterson
2018-08-30 18:28 ` Arnaldo Carvalho de Melo [this message]
2018-08-30 21:50 ` Benjamin Peterson
2018-10-10 3:52 ` Benjamin Peterson
2018-10-10 12:55 ` Arnaldo Carvalho de Melo
2018-10-10 12:56 ` Arnaldo Carvalho de Melo
2018-10-23 2:40 ` Benjamin Peterson
2018-10-24 20:18 ` Arnaldo Carvalho de Melo
2018-10-26 6:23 ` Benjamin Peterson
2018-09-06 13:44 ` [tip:perf/core] perf trace beauty: Alias 'umount' to 'umount2' tip-bot for Benjamin Peterson
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=20180830182848.GE6097@kernel.org \
--to=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=benjamin@python.org \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.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.