[Virtio-fs] [PATCH 1/2][RFC] virtio-fs: add ftrace events
Vivek Goyal
vgoyal at redhat.com
Wed Aug 7 13:23:20 UTC 2019
On Mon, Jul 29, 2019 at 05:34:30PM -0400, Masayoshi Mizuma wrote:
> From: Masayoshi Mizuma <m.mizuma at jp.fujitsu.com>
>
> Introduce the following ftrace events.
>
> - virtiofs_request_dispatched
> - virtiofs_request_done
> - virtiofs_hiprio_request_dispatched
> - virtiofs_hiprio_request_done
>
> Signed-off-by: Masayoshi Mizuma <m.mizuma at jp.fujitsu.com>
> ---
> include/trace/events/virtiofs.h | 195 ++++++++++++++++++++++++++++++++
> 1 file changed, 195 insertions(+)
> create mode 100644 include/trace/events/virtiofs.h
Hi Masayoshi,
How about naming this file vitio_fs.h (instead of virtiofs.h). We name
it fs/fuse/virtio_fs.c in fuse code as well.
Can we easily change trace points later? Or there is resistance to
changing static trace points upstream once introdced.
I can carry tracepoints in devel branch so that its easy to debug
issues. When it comes to sending tracepoints upstream, may be it
is a good idea to first upstream core code and then send tracepoints
in a separate patch series later.
Thanks
Vivek
>
> diff --git a/include/trace/events/virtiofs.h b/include/trace/events/virtiofs.h
> new file mode 100644
> index 000000000..50269d7de
> --- /dev/null
> +++ b/include/trace/events/virtiofs.h
> @@ -0,0 +1,195 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#undef TRACE_SYSTEM
> +#define TRACE_SYSTEM virtiofs
> +
> +#if !defined(_TRACE_VIRTIOFS_H) || defined(TRACE_HEADER_MULTI_READ)
> +#define _TRACE_VIRTIOFS_H
> +
> +#include <linux/tracepoint.h>
> +#include <uapi/linux/fuse.h>
> +
> +#define fuse_opcode_name(opcode) { opcode, #opcode }
> +#define show_opcode_name(val) \
> + __print_symbolic(val, \
> + fuse_opcode_name(FUSE_LOOKUP), \
> + fuse_opcode_name(FUSE_FORGET), \
> + fuse_opcode_name(FUSE_GETATTR), \
> + fuse_opcode_name(FUSE_SETATTR), \
> + fuse_opcode_name(FUSE_READLINK), \
> + fuse_opcode_name(FUSE_SYMLINK), \
> + fuse_opcode_name(FUSE_MKNOD), \
> + fuse_opcode_name(FUSE_MKDIR), \
> + fuse_opcode_name(FUSE_UNLINK), \
> + fuse_opcode_name(FUSE_RMDIR), \
> + fuse_opcode_name(FUSE_RENAME), \
> + fuse_opcode_name(FUSE_LINK), \
> + fuse_opcode_name(FUSE_OPEN), \
> + fuse_opcode_name(FUSE_READ), \
> + fuse_opcode_name(FUSE_WRITE), \
> + fuse_opcode_name(FUSE_STATFS), \
> + fuse_opcode_name(FUSE_RELEASE), \
> + fuse_opcode_name(FUSE_FSYNC), \
> + fuse_opcode_name(FUSE_SETXATTR), \
> + fuse_opcode_name(FUSE_GETXATTR), \
> + fuse_opcode_name(FUSE_LISTXATTR), \
> + fuse_opcode_name(FUSE_REMOVEXATTR), \
> + fuse_opcode_name(FUSE_FLUSH), \
> + fuse_opcode_name(FUSE_INIT), \
> + fuse_opcode_name(FUSE_OPENDIR), \
> + fuse_opcode_name(FUSE_READDIR), \
> + fuse_opcode_name(FUSE_RELEASEDIR), \
> + fuse_opcode_name(FUSE_FSYNCDIR), \
> + fuse_opcode_name(FUSE_GETLK), \
> + fuse_opcode_name(FUSE_SETLK), \
> + fuse_opcode_name(FUSE_SETLKW), \
> + fuse_opcode_name(FUSE_ACCESS), \
> + fuse_opcode_name(FUSE_CREATE), \
> + fuse_opcode_name(FUSE_INTERRUPT), \
> + fuse_opcode_name(FUSE_BMAP), \
> + fuse_opcode_name(FUSE_DESTROY), \
> + fuse_opcode_name(FUSE_IOCTL), \
> + fuse_opcode_name(FUSE_POLL), \
> + fuse_opcode_name(FUSE_NOTIFY_REPLY), \
> + fuse_opcode_name(FUSE_BATCH_FORGET), \
> + fuse_opcode_name(FUSE_FALLOCATE), \
> + fuse_opcode_name(FUSE_READDIRPLUS), \
> + fuse_opcode_name(FUSE_RENAME2), \
> + fuse_opcode_name(FUSE_LSEEK), \
> + fuse_opcode_name(FUSE_COPY_FILE_RANGE), \
> + fuse_opcode_name(FUSE_SETUPMAPPING), \
> + fuse_opcode_name(FUSE_REMOVEMAPPING))
> +
> +#define show_req_flag(flags) __print_flags(flags, "|", \
> + { (1UL << FR_ISREPLY), "ISREPLY"}, \
> + { (1UL << FR_FORCE), "FORCE"}, \
> + { (1UL << FR_BACKGROUND), "BACKGROUND"}, \
> + { (1UL << FR_WAITING), "WAITING"}, \
> + { (1UL << FR_ABORTED), "ABORTED"}, \
> + { (1UL << FR_INTERRUPTED), "INTERRUPTED"}, \
> + { (1UL << FR_LOCKED), "LOCKED"}, \
> + { (1UL << FR_PENDING), "PENDING"}, \
> + { (1UL << FR_SENT), "SENT"}, \
> + { (1UL << FR_FINISHED), "FINISHED"}, \
> + { (1UL << FR_PRIVATE), "PRIVATE"})
> +
> +TRACE_EVENT(virtiofs_request_dispatched,
> +
> + TP_PROTO(uint32_t opcode, uint64_t unique, uint64_t nodeid,
> + uint32_t inlen, unsigned long flags, bool notify),
> +
> + TP_ARGS(opcode, unique, nodeid, inlen, flags, notify),
> +
> + TP_STRUCT__entry(
> + __field(uint32_t, opcode)
> + __field(uint64_t, unique)
> + __field(uint64_t, nodeid)
> + __field(uint32_t, inlen)
> + __field(unsigned long, flags)
> + __field(bool, notify)
> + ),
> +
> + TP_fast_assign(
> + __entry->opcode = opcode;
> + __entry->unique = unique;
> + __entry->nodeid = nodeid;
> + __entry->inlen = inlen;
> + __entry->flags = flags;
> + __entry->notify = notify;
> + ),
> +
> + TP_printk("opcode %s unique %#llx nodeid %#llx in.len %u flags %s notify %d\n",
> + show_opcode_name(__entry->opcode),
> + __entry->unique, __entry->nodeid,
> + __entry->inlen, show_req_flag(__entry->flags),
> + __entry->notify)
> +);
> +
> +TRACE_EVENT(virtiofs_request_done,
> +
> + TP_PROTO(uint32_t opcode, uint64_t unique, uint64_t nodeid,
> + uint32_t inlen, unsigned long flags),
> +
> + TP_ARGS(opcode, unique, nodeid, inlen, flags),
> +
> + TP_STRUCT__entry(
> + __field(uint32_t, opcode)
> + __field(uint64_t, unique)
> + __field(uint64_t, nodeid)
> + __field(uint32_t, inlen)
> + __field(unsigned long, flags)
> + ),
> +
> + TP_fast_assign(
> + __entry->opcode = opcode;
> + __entry->unique = unique;
> + __entry->nodeid = nodeid;
> + __entry->inlen = inlen;
> + __entry->flags = flags;
> + ),
> +
> + TP_printk("opcode %s unique %#llx nodeid %#llx in.len %u flags %s\n",
> + show_opcode_name(__entry->opcode),
> + __entry->unique, __entry->nodeid,
> + __entry->inlen, show_req_flag(__entry->flags))
> +);
> +
> +TRACE_EVENT(virtiofs_hiprio_request_dispatched,
> +
> + TP_PROTO(uint32_t opcode, uint64_t unique, uint64_t nodeid,
> + uint32_t inlen, bool notify),
> +
> + TP_ARGS(opcode, unique, nodeid, inlen, notify),
> +
> + TP_STRUCT__entry(
> + __field(uint32_t, opcode)
> + __field(uint64_t, unique)
> + __field(uint64_t, nodeid)
> + __field(uint32_t, inlen)
> + __field(bool, notify)
> + ),
> +
> + TP_fast_assign(
> + __entry->opcode = opcode;
> + __entry->unique = unique;
> + __entry->nodeid = nodeid;
> + __entry->inlen = inlen;
> + __entry->notify = notify;
> + ),
> +
> + TP_printk("opcode %s unique %#llx nodeid %#llx in.len %u notify %d\n",
> + show_opcode_name(__entry->opcode),
> + __entry->unique, __entry->nodeid,
> + __entry->inlen, __entry->notify)
> +);
> +
> +TRACE_EVENT(virtiofs_hiprio_request_done,
> +
> + TP_PROTO(uint32_t opcode, uint64_t unique, uint64_t nodeid,
> + uint32_t inlen),
> +
> + TP_ARGS(opcode, unique, nodeid, inlen),
> +
> + TP_STRUCT__entry(
> + __field(uint32_t, opcode)
> + __field(uint64_t, unique)
> + __field(uint64_t, nodeid)
> + __field(uint32_t, inlen)
> + ),
> +
> + TP_fast_assign(
> + __entry->opcode = opcode;
> + __entry->unique = unique;
> + __entry->nodeid = nodeid;
> + __entry->inlen = inlen;
> + ),
> +
> + TP_printk("opcode %s unique %#llx nodeid %#llx in.len %u\n",
> + show_opcode_name(__entry->opcode),
> + __entry->unique, __entry->nodeid,
> + __entry->inlen)
> +);
> +
> +#endif /* _TRACE_VIRTIOFS_H */
> +
> +/* This part must be outside protection */
> +#include <trace/define_trace.h>
> --
> 2.18.1
>
> _______________________________________________
> Virtio-fs mailing list
> Virtio-fs at redhat.com
> https://www.redhat.com/mailman/listinfo/virtio-fs
More information about the Virtio-fs
mailing list