* [PATCH v3 0/4] io_uring: text representation of opcode in trace @ 2022-04-26 8:29 Dylan Yudaken 2022-04-26 8:29 ` [PATCH v3 1/4] io_uring: add type to op enum Dylan Yudaken ` (4 more replies) 0 siblings, 5 replies; 6+ messages in thread From: Dylan Yudaken @ 2022-04-26 8:29 UTC (permalink / raw) To: io-uring; +Cc: axboe, asml.silence, Kernel-team, Dylan Yudaken This series adds the text representation of opcodes into the trace. This makes it much quicker to understand traces without having to translate opcodes in your head. Patch 1 adds a type to io_uring opcodes Patch 2 is the translation function. Patch 3 is a small cleanup Patch 4 uses the translator in the trace logic v2: - return "INVALID" rather than UNKNOWN/LAST - add a type to io_uring opcdodes to get the compiler to complain if any are missing v3: - rebase onto for-5.19/io_uring-socket Dylan Yudaken (4): io_uring: add type to op enum io_uring: add io_uring_get_opcode io_uring: rename op -> opcode io_uring: use the text representation of ops in trace fs/io_uring.c | 101 ++++++++++++++++++++++++++++++++ include/linux/io_uring.h | 5 ++ include/trace/events/io_uring.h | 42 +++++++------ include/uapi/linux/io_uring.h | 2 +- 4 files changed, 132 insertions(+), 18 deletions(-) base-commit: 1374e08e2d44863c931910797852589803997668 -- 2.30.2 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v3 1/4] io_uring: add type to op enum 2022-04-26 8:29 [PATCH v3 0/4] io_uring: text representation of opcode in trace Dylan Yudaken @ 2022-04-26 8:29 ` Dylan Yudaken 2022-04-26 8:29 ` [PATCH v3 2/4] io_uring: add io_uring_get_opcode Dylan Yudaken ` (3 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: Dylan Yudaken @ 2022-04-26 8:29 UTC (permalink / raw) To: io-uring; +Cc: axboe, asml.silence, Kernel-team, Dylan Yudaken It is useful to have a type enum for opcodes, to allow the compiler to assert that every value is used in a switch statement. Signed-off-by: Dylan Yudaken <[email protected]> --- include/uapi/linux/io_uring.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h index 5fb52bf32435..49d1f3994f8d 100644 --- a/include/uapi/linux/io_uring.h +++ b/include/uapi/linux/io_uring.h @@ -105,7 +105,7 @@ enum { #define IORING_SETUP_R_DISABLED (1U << 6) /* start with ring disabled */ #define IORING_SETUP_SUBMIT_ALL (1U << 7) /* continue submit on error */ -enum { +enum io_uring_op { IORING_OP_NOP, IORING_OP_READV, IORING_OP_WRITEV, -- 2.30.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 2/4] io_uring: add io_uring_get_opcode 2022-04-26 8:29 [PATCH v3 0/4] io_uring: text representation of opcode in trace Dylan Yudaken 2022-04-26 8:29 ` [PATCH v3 1/4] io_uring: add type to op enum Dylan Yudaken @ 2022-04-26 8:29 ` Dylan Yudaken 2022-04-26 8:29 ` [PATCH v3 3/4] io_uring: rename op -> opcode Dylan Yudaken ` (2 subsequent siblings) 4 siblings, 0 replies; 6+ messages in thread From: Dylan Yudaken @ 2022-04-26 8:29 UTC (permalink / raw) To: io-uring; +Cc: axboe, asml.silence, Kernel-team, Dylan Yudaken In some debug scenarios it is useful to have the text representation of the opcode. Add this function in preparation. Signed-off-by: Dylan Yudaken <[email protected]> --- fs/io_uring.c | 101 +++++++++++++++++++++++++++++++++++++++ include/linux/io_uring.h | 5 ++ 2 files changed, 106 insertions(+) diff --git a/fs/io_uring.c b/fs/io_uring.c index bf95ef9240e5..dfebbf3a272a 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -1285,6 +1285,107 @@ static struct kmem_cache *req_cachep; static const struct file_operations io_uring_fops; +const char *io_uring_get_opcode(u8 opcode) +{ + switch ((enum io_uring_op)opcode) { + case IORING_OP_NOP: + return "NOP"; + case IORING_OP_READV: + return "READV"; + case IORING_OP_WRITEV: + return "WRITEV"; + case IORING_OP_FSYNC: + return "FSYNC"; + case IORING_OP_READ_FIXED: + return "READ_FIXED"; + case IORING_OP_WRITE_FIXED: + return "WRITE_FIXED"; + case IORING_OP_POLL_ADD: + return "POLL_ADD"; + case IORING_OP_POLL_REMOVE: + return "POLL_REMOVE"; + case IORING_OP_SYNC_FILE_RANGE: + return "SYNC_FILE_RANGE"; + case IORING_OP_SENDMSG: + return "SENDMSG"; + case IORING_OP_RECVMSG: + return "RECVMSG"; + case IORING_OP_TIMEOUT: + return "TIMEOUT"; + case IORING_OP_TIMEOUT_REMOVE: + return "TIMEOUT_REMOVE"; + case IORING_OP_ACCEPT: + return "ACCEPT"; + case IORING_OP_ASYNC_CANCEL: + return "ASYNC_CANCEL"; + case IORING_OP_LINK_TIMEOUT: + return "LINK_TIMEOUT"; + case IORING_OP_CONNECT: + return "CONNECT"; + case IORING_OP_FALLOCATE: + return "FALLOCATE"; + case IORING_OP_OPENAT: + return "OPENAT"; + case IORING_OP_CLOSE: + return "CLOSE"; + case IORING_OP_FILES_UPDATE: + return "FILES_UPDATE"; + case IORING_OP_STATX: + return "STATX"; + case IORING_OP_READ: + return "READ"; + case IORING_OP_WRITE: + return "WRITE"; + case IORING_OP_FADVISE: + return "FADVISE"; + case IORING_OP_MADVISE: + return "MADVISE"; + case IORING_OP_SEND: + return "SEND"; + case IORING_OP_RECV: + return "RECV"; + case IORING_OP_OPENAT2: + return "OPENAT2"; + case IORING_OP_EPOLL_CTL: + return "EPOLL_CTL"; + case IORING_OP_SPLICE: + return "SPLICE"; + case IORING_OP_PROVIDE_BUFFERS: + return "PROVIDE_BUFFERS"; + case IORING_OP_REMOVE_BUFFERS: + return "REMOVE_BUFFERS"; + case IORING_OP_TEE: + return "TEE"; + case IORING_OP_SHUTDOWN: + return "SHUTDOWN"; + case IORING_OP_RENAMEAT: + return "RENAMEAT"; + case IORING_OP_UNLINKAT: + return "UNLINKAT"; + case IORING_OP_MKDIRAT: + return "MKDIRAT"; + case IORING_OP_SYMLINKAT: + return "SYMLINKAT"; + case IORING_OP_LINKAT: + return "LINKAT"; + case IORING_OP_MSG_RING: + return "MSG_RING"; + case IORING_OP_FSETXATTR: + return "FSETXATTR"; + case IORING_OP_SETXATTR: + return "SETXATTR"; + case IORING_OP_FGETXATTR: + return "FGETXATTR"; + case IORING_OP_GETXATTR: + return "GETXATTR"; + case IORING_OP_SOCKET: + return "SOCKET"; + case IORING_OP_LAST: + return "INVALID"; + } + return "INVALID"; +} + struct sock *io_uring_get_socket(struct file *file) { #if defined(CONFIG_UNIX) diff --git a/include/linux/io_uring.h b/include/linux/io_uring.h index 1814e698d861..24651c229ed2 100644 --- a/include/linux/io_uring.h +++ b/include/linux/io_uring.h @@ -10,6 +10,7 @@ struct sock *io_uring_get_socket(struct file *file); void __io_uring_cancel(bool cancel_all); void __io_uring_free(struct task_struct *tsk); void io_uring_unreg_ringfd(void); +const char *io_uring_get_opcode(u8 opcode); static inline void io_uring_files_cancel(void) { @@ -42,6 +43,10 @@ static inline void io_uring_files_cancel(void) static inline void io_uring_free(struct task_struct *tsk) { } +static inline const char *io_uring_get_opcode(u8 opcode) +{ + return ""; +} #endif #endif -- 2.30.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 3/4] io_uring: rename op -> opcode 2022-04-26 8:29 [PATCH v3 0/4] io_uring: text representation of opcode in trace Dylan Yudaken 2022-04-26 8:29 ` [PATCH v3 1/4] io_uring: add type to op enum Dylan Yudaken 2022-04-26 8:29 ` [PATCH v3 2/4] io_uring: add io_uring_get_opcode Dylan Yudaken @ 2022-04-26 8:29 ` Dylan Yudaken 2022-04-26 8:29 ` [PATCH v3 4/4] io_uring: use the text representation of ops in trace Dylan Yudaken 2022-04-26 12:51 ` [PATCH v3 0/4] io_uring: text representation of opcode " Jens Axboe 4 siblings, 0 replies; 6+ messages in thread From: Dylan Yudaken @ 2022-04-26 8:29 UTC (permalink / raw) To: io-uring; +Cc: axboe, asml.silence, Kernel-team, Dylan Yudaken do this for consistency with the other trace messages Signed-off-by: Dylan Yudaken <[email protected]> --- include/trace/events/io_uring.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/trace/events/io_uring.h b/include/trace/events/io_uring.h index 05b786f8b0bf..42c7e1a3c6ae 100644 --- a/include/trace/events/io_uring.h +++ b/include/trace/events/io_uring.h @@ -530,7 +530,7 @@ TRACE_EVENT(io_uring_req_failed, ), TP_printk("ring %p, req %p, user_data 0x%llx, " - "op %d, flags 0x%x, prio=%d, off=%llu, addr=%llu, " + "opcode %d, flags 0x%x, prio=%d, off=%llu, addr=%llu, " "len=%u, rw_flags=0x%x, buf_index=%d, " "personality=%d, file_index=%d, pad=0x%llx, addr3=%llx, " "error=%d", -- 2.30.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v3 4/4] io_uring: use the text representation of ops in trace 2022-04-26 8:29 [PATCH v3 0/4] io_uring: text representation of opcode in trace Dylan Yudaken ` (2 preceding siblings ...) 2022-04-26 8:29 ` [PATCH v3 3/4] io_uring: rename op -> opcode Dylan Yudaken @ 2022-04-26 8:29 ` Dylan Yudaken 2022-04-26 12:51 ` [PATCH v3 0/4] io_uring: text representation of opcode " Jens Axboe 4 siblings, 0 replies; 6+ messages in thread From: Dylan Yudaken @ 2022-04-26 8:29 UTC (permalink / raw) To: io-uring; +Cc: axboe, asml.silence, Kernel-team, Dylan Yudaken It is annoying to translate opcodes to textwhen tracing io_uring. Use the io_uring_get_opcode function instead to use the text representation. A downside here might have been that if the opcode is invalid it will not be obvious, however the opcode is already overridden in these cases to 0 (NOP) in io_init_req(). Therefore this is a non issue. Signed-off-by: Dylan Yudaken <[email protected]> --- include/trace/events/io_uring.h | 42 ++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/include/trace/events/io_uring.h b/include/trace/events/io_uring.h index 42c7e1a3c6ae..4d225a6afa1d 100644 --- a/include/trace/events/io_uring.h +++ b/include/trace/events/io_uring.h @@ -7,6 +7,7 @@ #include <linux/tracepoint.h> #include <uapi/linux/io_uring.h> +#include <linux/io_uring.h> struct io_wq_work; @@ -87,9 +88,11 @@ TRACE_EVENT(io_uring_register, __entry->ret = ret; ), - TP_printk("ring %p, opcode %d, nr_user_files %d, nr_user_bufs %d, " + TP_printk("ring %p, opcode %s, nr_user_files %d, nr_user_bufs %d, " "ret %ld", - __entry->ctx, __entry->opcode, __entry->nr_files, + __entry->ctx, + io_uring_get_opcode(__entry->opcode), + __entry->nr_files, __entry->nr_bufs, __entry->ret) ); @@ -169,8 +172,9 @@ TRACE_EVENT(io_uring_queue_async_work, __entry->rw = rw; ), - TP_printk("ring %p, request %p, user_data 0x%llx, opcode %d, flags 0x%x, %s queue, work %p", - __entry->ctx, __entry->req, __entry->user_data, __entry->opcode, + TP_printk("ring %p, request %p, user_data 0x%llx, opcode %s, flags 0x%x, %s queue, work %p", + __entry->ctx, __entry->req, __entry->user_data, + io_uring_get_opcode(__entry->opcode), __entry->flags, __entry->rw ? "hashed" : "normal", __entry->work) ); @@ -205,8 +209,9 @@ TRACE_EVENT(io_uring_defer, __entry->opcode = opcode; ), - TP_printk("ring %p, request %p, user_data 0x%llx, opcode %d", - __entry->ctx, __entry->req, __entry->data, __entry->opcode) + TP_printk("ring %p, request %p, user_data 0x%llx, opcode %s", + __entry->ctx, __entry->req, __entry->data, + io_uring_get_opcode(__entry->opcode)) ); /** @@ -305,9 +310,9 @@ TRACE_EVENT(io_uring_fail_link, __entry->link = link; ), - TP_printk("ring %p, request %p, user_data 0x%llx, opcode %d, link %p", - __entry->ctx, __entry->req, __entry->user_data, __entry->opcode, - __entry->link) + TP_printk("ring %p, request %p, user_data 0x%llx, opcode %s, link %p", + __entry->ctx, __entry->req, __entry->user_data, + io_uring_get_opcode(__entry->opcode), __entry->link) ); /** @@ -389,9 +394,9 @@ TRACE_EVENT(io_uring_submit_sqe, __entry->sq_thread = sq_thread; ), - TP_printk("ring %p, req %p, user_data 0x%llx, opcode %d, flags 0x%x, " + TP_printk("ring %p, req %p, user_data 0x%llx, opcode %s, flags 0x%x, " "non block %d, sq_thread %d", __entry->ctx, __entry->req, - __entry->user_data, __entry->opcode, + __entry->user_data, io_uring_get_opcode(__entry->opcode), __entry->flags, __entry->force_nonblock, __entry->sq_thread) ); @@ -433,8 +438,9 @@ TRACE_EVENT(io_uring_poll_arm, __entry->events = events; ), - TP_printk("ring %p, req %p, user_data 0x%llx, opcode %d, mask 0x%x, events 0x%x", - __entry->ctx, __entry->req, __entry->user_data, __entry->opcode, + TP_printk("ring %p, req %p, user_data 0x%llx, opcode %s, mask 0x%x, events 0x%x", + __entry->ctx, __entry->req, __entry->user_data, + io_uring_get_opcode(__entry->opcode), __entry->mask, __entry->events) ); @@ -470,8 +476,9 @@ TRACE_EVENT(io_uring_task_add, __entry->mask = mask; ), - TP_printk("ring %p, req %p, user_data 0x%llx, opcode %d, mask %x", - __entry->ctx, __entry->req, __entry->user_data, __entry->opcode, + TP_printk("ring %p, req %p, user_data 0x%llx, opcode %s, mask %x", + __entry->ctx, __entry->req, __entry->user_data, + io_uring_get_opcode(__entry->opcode), __entry->mask) ); @@ -530,12 +537,13 @@ TRACE_EVENT(io_uring_req_failed, ), TP_printk("ring %p, req %p, user_data 0x%llx, " - "opcode %d, flags 0x%x, prio=%d, off=%llu, addr=%llu, " + "opcode %s, flags 0x%x, prio=%d, off=%llu, addr=%llu, " "len=%u, rw_flags=0x%x, buf_index=%d, " "personality=%d, file_index=%d, pad=0x%llx, addr3=%llx, " "error=%d", __entry->ctx, __entry->req, __entry->user_data, - __entry->opcode, __entry->flags, __entry->ioprio, + io_uring_get_opcode(__entry->opcode), + __entry->flags, __entry->ioprio, (unsigned long long)__entry->off, (unsigned long long) __entry->addr, __entry->len, __entry->op_flags, -- 2.30.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v3 0/4] io_uring: text representation of opcode in trace 2022-04-26 8:29 [PATCH v3 0/4] io_uring: text representation of opcode in trace Dylan Yudaken ` (3 preceding siblings ...) 2022-04-26 8:29 ` [PATCH v3 4/4] io_uring: use the text representation of ops in trace Dylan Yudaken @ 2022-04-26 12:51 ` Jens Axboe 4 siblings, 0 replies; 6+ messages in thread From: Jens Axboe @ 2022-04-26 12:51 UTC (permalink / raw) To: io-uring, dylany; +Cc: Kernel-team, asml.silence On Tue, 26 Apr 2022 01:29:03 -0700, Dylan Yudaken wrote: > This series adds the text representation of opcodes into the trace. This > makes it much quicker to understand traces without having to translate > opcodes in your head. > > Patch 1 adds a type to io_uring opcodes > Patch 2 is the translation function. > Patch 3 is a small cleanup > Patch 4 uses the translator in the trace logic > > [...] Applied, thanks! [1/4] io_uring: add type to op enum (no commit info) [2/4] io_uring: add io_uring_get_opcode (no commit info) [3/4] io_uring: rename op -> opcode (no commit info) [4/4] io_uring: use the text representation of ops in trace (no commit info) Best regards, -- Jens Axboe ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2022-04-26 12:51 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-04-26 8:29 [PATCH v3 0/4] io_uring: text representation of opcode in trace Dylan Yudaken 2022-04-26 8:29 ` [PATCH v3 1/4] io_uring: add type to op enum Dylan Yudaken 2022-04-26 8:29 ` [PATCH v3 2/4] io_uring: add io_uring_get_opcode Dylan Yudaken 2022-04-26 8:29 ` [PATCH v3 3/4] io_uring: rename op -> opcode Dylan Yudaken 2022-04-26 8:29 ` [PATCH v3 4/4] io_uring: use the text representation of ops in trace Dylan Yudaken 2022-04-26 12:51 ` [PATCH v3 0/4] io_uring: text representation of opcode " Jens Axboe
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox