From: Damien Le Moal <Damien.LeMoal@wdc.com>
To: Chaitanya Kulkarni <Chaitanya.Kulkarni@wdc.com>,
"axboe@kernel.dk" <axboe@kernel.dk>,
"viro@zeniv.linux.org.uk" <viro@zeniv.linux.org.uk>,
"rostedt@goodmis.org" <rostedt@goodmis.org>,
"mingo@redhat.com" <mingo@redhat.com>,
Johannes Thumshirn <Johannes.Thumshirn@wdc.com>,
"bvanassche@acm.org" <bvanassche@acm.org>,
"dongli.zhang@oracle.com" <dongli.zhang@oracle.com>,
Aravind Ramesh <Aravind.Ramesh@wdc.com>,
"joshi.k@samsung.com" <joshi.k@samsung.com>,
Niklas Cassel <Niklas.Cassel@wdc.com>, "hch@lst.de" <hch@lst.de>,
"osandov@fb.com" <osandov@fb.com>,
"martin.petersen@oracle.com" <martin.petersen@oracle.com>
Cc: "linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>
Subject: Re: [RFC PATCH 05/39] blktrace: add trace note APIs
Date: Fri, 26 Feb 2021 04:39:46 +0000 [thread overview]
Message-ID: <BL0PR04MB651468D6766C8D6A6DAF21B2E79D9@BL0PR04MB6514.namprd04.prod.outlook.com> (raw)
In-Reply-To: 20210225070231.21136-6-chaitanya.kulkarni@wdc.com
No commit message. Add one please.
On 2021/02/25 16:03, Chaitanya Kulkarni wrote:
> Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
> ---
> kernel/trace/blktrace.c | 113 ++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 113 insertions(+)
>
> diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
> index e45bbfcb5daf..4871934b9717 100644
> --- a/kernel/trace/blktrace.c
> +++ b/kernel/trace/blktrace.c
> @@ -114,6 +114,52 @@ static void trace_note(struct blk_trace *bt, pid_t pid, int action,
> }
> }
>
> +static void trace_note_ext(struct blk_trace_ext *bt, pid_t pid, u64 action,
> + const void *data, size_t len, u64 cgid, u32 ioprio)
> +{
> + struct blk_io_trace_ext *t;
> + struct ring_buffer_event *event = NULL;
> + struct trace_buffer *buffer = NULL;
> + int pc = 0;
> + int cpu = smp_processor_id();
> + bool blk_tracer = blk_tracer_enabled;
> + ssize_t cgid_len = cgid ? sizeof(cgid) : 0;
> +
> + if (blk_tracer) {
> + buffer = blk_tr->array_buffer.buffer;
> + pc = preempt_count();
> + event = trace_buffer_lock_reserve(buffer, TRACE_BLK,
> + sizeof(*t) + len + cgid_len,
> + 0, pc);
> + if (!event)
> + return;
> + t = ring_buffer_event_data(event);
> + goto record_it;
> + }
> +
> + if (!bt->rchan)
> + return;
> +
> + t = relay_reserve(bt->rchan, sizeof(*t) + len + cgid_len);
> + if (t) {
> + t->magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION_EXT;
> + t->time = ktime_to_ns(ktime_get());
> +record_it:
> + t->device = bt->dev;
> + t->action = action | (cgid ? __BLK_TN_CGROUP : 0);
> + t->ioprio = ioprio;
> + t->pid = pid;
> + t->cpu = cpu;
> + t->pdu_len = len + cgid_len;
> + if (cgid_len)
> + memcpy((void *)t + sizeof(*t), &cgid, cgid_len);
> + memcpy((void *) t + sizeof(*t) + cgid_len, data, len);
> +
> + if (blk_tracer)
> + trace_buffer_unlock_commit(blk_tr, buffer, event, 0, pc);
> + }
> +}
> +
> /*
> * Send out a notify for this process, if we haven't done so since a trace
> * started
> @@ -132,6 +178,20 @@ static void trace_note_tsk(struct task_struct *tsk)
> spin_unlock_irqrestore(&running_trace_lock, flags);
> }
>
> +static void trace_note_tsk_ext(struct task_struct *tsk, u32 ioprio)
> +{
> + unsigned long flags;
> + struct blk_trace_ext *bt;
> +
> + tsk->btrace_seq = blktrace_seq;
> + spin_lock_irqsave(&running_trace_ext_lock, flags);
> + list_for_each_entry(bt, &running_trace_ext_list, running_ext_list) {
> + trace_note_ext(bt, tsk->pid, BLK_TN_PROCESS_EXT, tsk->comm,
> + sizeof(tsk->comm), 0, ioprio);
> + }
> + spin_unlock_irqrestore(&running_trace_ext_lock, flags);
> +}
> +
> static void trace_note_time(struct blk_trace *bt)
> {
> struct timespec64 now;
> @@ -148,6 +208,22 @@ static void trace_note_time(struct blk_trace *bt)
> local_irq_restore(flags);
> }
>
> +static void trace_note_time_ext(struct blk_trace_ext *bt)
> +{
> + struct timespec64 now;
> + unsigned long flags;
> + u32 words[2];
> +
> + /* need to check user space to see if this breaks in y2038 or y2106 */
> + ktime_get_real_ts64(&now);
> + words[0] = (u32)now.tv_sec;
> + words[1] = now.tv_nsec;
> +
> + local_irq_save(flags);
> + trace_note_ext(bt, 0, BLK_TN_TIMESTAMP, words, sizeof(words), 0, 0);
> + local_irq_restore(flags);
> +}
> +
> void __trace_note_message(struct blk_trace *bt, struct blkcg *blkcg,
> const char *fmt, ...)
> {
> @@ -185,6 +261,43 @@ void __trace_note_message(struct blk_trace *bt, struct blkcg *blkcg,
> }
> EXPORT_SYMBOL_GPL(__trace_note_message);
>
> +void __trace_note_message_ext(struct blk_trace_ext *bt, struct blkcg *blkcg,
> + const char *fmt, ...)
> +{
> + int n;
> + va_list args;
> + unsigned long flags;
> + char *buf;
> +
> + if (unlikely(bt->trace_state != Blktrace_running &&
> + !blk_tracer_enabled))
> + return;
> +
> + /*
> + * If the BLK_TC_NOTIFY action mask isn't set, don't send any note
> + * message to the trace.
> + */
> + if (!(bt->act_mask & BLK_TC_NOTIFY))
> + return;
> +
> + local_irq_save(flags);
> + buf = this_cpu_ptr(bt->msg_data);
> + va_start(args, fmt);
> + n = vscnprintf(buf, BLK_TN_MAX_MSG, fmt, args);
> + va_end(args);
> +
> + if (!(blk_tracer_flags.val & TRACE_BLK_OPT_CGROUP))
> + blkcg = NULL;
> +#ifdef CONFIG_BLK_CGROUP
> + trace_note_ext(bt, 0, BLK_TN_MESSAGE_EXT, buf, n,
> + blkcg ? cgroup_id(blkcg->css.cgroup) : 1, 0);
> +#else
> + trace_note_ext(bt, 0, BLK_TN_MESSAGE_EXT, buf, n, 0, 0);
> +#endif
> + local_irq_restore(flags);
> +}
> +EXPORT_SYMBOL_GPL(__trace_note_message_ext);
> +
> static int act_log_check(struct blk_trace *bt, u32 what, sector_t sector,
> pid_t pid)
> {
>
I fail to see why the xxx_ext functions need the different blk_trcae_ext
structure. It seems that everything should work with a modified blk_trace
structure. With such approach, a lot of the xxx_ext functions in here may not be
necessary at all. Simply change the interface of the existing note functions.
There are not that many call sites to change, right ?
--
Damien Le Moal
Western Digital Research
next prev parent reply other threads:[~2021-02-26 4:40 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-25 7:01 [RFC PATCH 00/39] blktrace: add block trace extension support Chaitanya Kulkarni
2021-02-25 7:01 ` [RFC PATCH 01/39] blktrace_api: add new trace definitions Chaitanya Kulkarni
2021-02-26 4:31 ` Damien Le Moal
2021-02-25 7:01 ` [RFC PATCH 02/39] blktrace_api: add new trace definition Chaitanya Kulkarni
2021-02-26 4:33 ` Damien Le Moal
2021-02-25 7:01 ` [RFC PATCH 03/39] blkdev.h: add new trace ext as a queue member Chaitanya Kulkarni
2021-02-26 4:35 ` Damien Le Moal
2021-02-25 7:01 ` [RFC PATCH 04/39] blktrace: add a new global list Chaitanya Kulkarni
2021-02-26 4:36 ` Damien Le Moal
2021-02-25 7:01 ` [RFC PATCH 05/39] blktrace: add trace note APIs Chaitanya Kulkarni
2021-02-26 4:39 ` Damien Le Moal [this message]
2021-02-25 7:01 ` [RFC PATCH 06/39] blktrace: add act and prio check helpers Chaitanya Kulkarni
2021-02-26 4:41 ` Damien Le Moal
2021-02-25 7:01 ` [RFC PATCH 07/39] blktrace: add core trace API Chaitanya Kulkarni
2021-02-26 4:44 ` Damien Le Moal
2021-02-25 7:02 ` [RFC PATCH 08/39] blktrace: update blk_add_trace_rq() Chaitanya Kulkarni
2021-02-26 4:46 ` Damien Le Moal
2021-02-25 7:02 ` [RFC PATCH 09/39] blktrace: update blk_add_trace_rq_insert() Chaitanya Kulkarni
2021-02-26 4:48 ` Damien Le Moal
2021-02-25 7:02 ` [RFC PATCH 10/39] blktrace: update blk_add_trace_rq_issue() Chaitanya Kulkarni
2021-02-26 4:48 ` Damien Le Moal
2021-02-25 7:02 ` [RFC PATCH 11/39] blktrace: update blk_add_trace_rq_requeue() Chaitanya Kulkarni
2021-02-26 4:48 ` Damien Le Moal
2021-02-25 7:02 ` [RFC PATCH 12/39] blktrace: update blk_add_trace_rq_complete() Chaitanya Kulkarni
2021-02-26 4:48 ` Damien Le Moal
2021-02-25 7:02 ` [RFC PATCH 13/39] blktrace: update blk_add_trace_bio() Chaitanya Kulkarni
2021-02-26 4:49 ` Damien Le Moal
2021-02-25 7:02 ` [RFC PATCH 14/39] blktrace: update blk_add_trace_bio_bounce() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 15/39] blktrace: update blk_add_trace_bio_complete() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 16/39] blktrace: update blk_add_trace_bio_backmerge() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 17/39] blktrace: update blk_add_trace_bio_frontmerge() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 18/39] blktrace: update blk_add_trace_bio_queue() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 19/39] blktrace: update blk_add_trace_getrq() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 20/39] blktrace: update blk_add_trace_plug() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 21/39] blktrace: update blk_add_trace_unplug() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 22/39] blktrace: update blk_add_trace_split() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 23/39] blktrace: update blk_add_trace_bio_remap() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 24/39] blktrace: update blk_add_trace_rq_remap() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 25/39] blktrace: update blk_add_driver_data() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 26/39] blktrace: add trace entry & pdu helpers Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 27/39] blktrace: add a new formatting routine Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 28/39] blktrace: add blk_log_xxx helpers() Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 29/39] blktrace: link blk_log_xxx() to trace action Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 30/39] blktrace: add trace event print helper Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 31/39] blktrace: add trace_synthesize helper Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 32/39] blktrace: add trace print helpers Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 33/39] blktrace: add blkext tracer Chaitanya Kulkarni
2021-02-27 11:44 ` [blktrace] c055908abe: WARNING:at_kernel/trace/trace.c:#create_trace_option_files kernel test robot
2021-02-27 14:49 ` Steven Rostedt
2021-02-27 19:51 ` Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 34/39] blktrace: implement setup-start-stop ioclts Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 35/39] block: update blkdev_ioctl with new trace ioctls Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 36/39] blktrace: add integrity tracking support Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 37/39] blktrace: update blk_fill_rwbs() with new requests Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 38/39] blktrace: track zone appaend completion sector Chaitanya Kulkarni
2021-02-25 7:02 ` [RFC PATCH 39/39] blktrace: debug patch for the demo Chaitanya Kulkarni
2021-02-26 4:25 ` [RFC PATCH 00/39] blktrace: add block trace extension support Damien Le Moal
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=BL0PR04MB651468D6766C8D6A6DAF21B2E79D9@BL0PR04MB6514.namprd04.prod.outlook.com \
--to=damien.lemoal@wdc.com \
--cc=Aravind.Ramesh@wdc.com \
--cc=Chaitanya.Kulkarni@wdc.com \
--cc=Johannes.Thumshirn@wdc.com \
--cc=Niklas.Cassel@wdc.com \
--cc=axboe@kernel.dk \
--cc=bvanassche@acm.org \
--cc=dongli.zhang@oracle.com \
--cc=hch@lst.de \
--cc=joshi.k@samsung.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=mingo@redhat.com \
--cc=osandov@fb.com \
--cc=rostedt@goodmis.org \
--cc=viro@zeniv.linux.org.uk \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).