Re: [RFC v1] io_uring: add io_uring_link trace event

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> On Tue, Oct 8, 2019 at 2:52 PM Dmitrii Dolgov <9erthalion6@xxxxxxxxx> wrote:
>
> To trace io_uring activity one can get an information from workqueue and
> io trace events, but looks like some parts could be hard to identify.
> E.g. it's not easy to figure out that one work was started after another
> due to a link between them.
>
> For that purpose introduce io_uring_link trace event, that will be fired
> when a request is added to a link_list.
>
> Signed-off-by: Dmitrii Dolgov <9erthalion6@xxxxxxxxx>
> ---
>  fs/io_uring.c                   |  4 ++++
>  include/Kbuild                  |  1 +
>  include/trace/events/io_uring.h | 42 +++++++++++++++++++++++++++++++++
>  3 files changed, 47 insertions(+)
>  create mode 100644 include/trace/events/io_uring.h
>
> diff --git a/fs/io_uring.c b/fs/io_uring.c
> index bfbb7ab3c4e..63e4b592d69 100644
> --- a/fs/io_uring.c
> +++ b/fs/io_uring.c
> @@ -71,6 +71,9 @@
>  #include <linux/sizes.h>
>  #include <linux/hugetlb.h>
>
> +#define CREATE_TRACE_POINTS
> +#include <trace/events/io_uring.h>
> +
>  #include <uapi/linux/io_uring.h>
>
>  #include "internal.h"
> @@ -2488,6 +2491,7 @@ static void io_submit_sqe(struct io_ring_ctx *ctx, struct sqe_submit *s,
>
>                 s->sqe = sqe_copy;
>                 memcpy(&req->submit, s, sizeof(*s));
> +               trace_io_uring_link(&req->work, &prev->work);
>                 list_add_tail(&req->list, &prev->link_list);
>         } else if (s->sqe->flags & IOSQE_IO_LINK) {
>                 req->flags |= REQ_F_LINK;
> diff --git a/include/Kbuild b/include/Kbuild
> index ffba79483cc..61b66725d25 100644
> --- a/include/Kbuild
> +++ b/include/Kbuild
> @@ -1028,6 +1028,7 @@ header-test-                      += trace/events/fsi_master_gpio.h
>  header-test-                   += trace/events/huge_memory.h
>  header-test-                   += trace/events/ib_mad.h
>  header-test-                   += trace/events/ib_umad.h
> +header-test-                   += trace/events/io_uring.h
>  header-test-                   += trace/events/iscsi.h
>  header-test-                   += trace/events/jbd2.h
>  header-test-                   += trace/events/kvm.h
> diff --git a/include/trace/events/io_uring.h b/include/trace/events/io_uring.h
> new file mode 100644
> index 00000000000..56245c31a1e
> --- /dev/null
> +++ b/include/trace/events/io_uring.h
> @@ -0,0 +1,42 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +#undef TRACE_SYSTEM
> +#define TRACE_SYSTEM io_uring
> +
> +#if !defined(_TRACE_IO_URING_H) || defined(TRACE_HEADER_MULTI_READ)
> +#define _TRACE_IO_URING_H
> +
> +#include <linux/tracepoint.h>
> +
> +/**
> + * io_uring_link - called immediately before the io_uring work added into
> + *                                link_list of the another request.
> + * @work:                      pointer to linked struct work_struct
> + * @target_work:       pointer to previous struct work_struct,
> + *                                     that would contain @work
> + *
> + * Allows to track linked requests in io_uring.
> + */
> +TRACE_EVENT(io_uring_link,
> +
> +       TP_PROTO(struct work_struct *work, struct work_struct *target_work),
> +
> +       TP_ARGS(work, target_work),
> +
> +       TP_STRUCT__entry (
> +               __field(  void *,       work                    )
> +               __field(  void *,       target_work             )
> +       ),
> +
> +       TP_fast_assign(
> +               __entry->work                   = work;
> +               __entry->target_work    = target_work;
> +       ),
> +
> +       TP_printk("io_uring work struct %p linked after %p",
> +                         __entry->work, __entry->target_work)
> +);
> +
> +#endif /* _TRACE_IO_URING_H */
> +
> +/* This part must be outside protection */
> +#include <trace/define_trace.h>
> --
> 2.21.0
>

If I'm missing something and it doesn't make sense, then I would be glad to
hear if there are any best practices or ideas, and in general how to look at
io_uring from the tracing point of view.



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux