From: Jason Xing <kerneljasonxing@gmail.com>
To: axboe@kernel.dk, rostedt@goodmis.org, mhiramat@kernel.org,
mathieu.desnoyers@efficios.com, akpm@linux-foundation.org
Cc: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org,
linux-trace-kernel@vger.kernel.org,
Jason Xing <kernelxing@tencent.com>,
Yushan Zhou <katrinzhou@tencent.com>
Subject: [PATCH v1 2/5] relayfs: introduce dump of relayfs statistics function
Date: Mon, 12 May 2025 10:49:32 +0800 [thread overview]
Message-ID: <20250512024935.64704-3-kerneljasonxing@gmail.com> (raw)
In-Reply-To: <20250512024935.64704-1-kerneljasonxing@gmail.com>
From: Jason Xing <kernelxing@tencent.com>
In this version, only support dumping the counter for buffer full and
implement the framework of how it works. Users MUST pass a valid @buf
with a valid @len that is required to be larger than RELAY_DUMP_BUF_MAX_LEN
to acquire which information indicated by @flags to dump.
RELAY_DUMP_BUF_MAX_LEN shows the maximum len of the buffer if users
choose to dump all the values.
Users can use this buffer to do whatever they expect in their own kernel
module, say, print to console/dmesg or write them into the relay buffer.
Reviewed-by: Yushan Zhou <katrinzhou@tencent.com>
Signed-off-by: Jason Xing <kernelxing@tencent.com>
---
include/linux/relay.h | 10 ++++++++++
kernel/relay.c | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 45 insertions(+)
diff --git a/include/linux/relay.h b/include/linux/relay.h
index 022cf11e5a92..7a442c4cbead 100644
--- a/include/linux/relay.h
+++ b/include/linux/relay.h
@@ -31,6 +31,15 @@
/*
* Relay buffer error statistics dump
*/
+enum {
+ RELAY_DUMP_BUF_FULL = (1 << 0),
+
+ RELAY_DUMP_LAST = RELAY_DUMP_BUF_FULL,
+ RELAY_DUMP_MASK = (RELAY_DUMP_LAST - 1) | RELAY_DUMP_LAST
+};
+
+#define RELAY_DUMP_BUF_MAX_LEN 32
+
struct rchan_buf_error_stats
{
unsigned int full; /* counter for buffer full */
@@ -170,6 +179,7 @@ extern int relay_late_setup_files(struct rchan *chan,
struct dentry *parent);
extern void relay_close(struct rchan *chan);
extern void relay_flush(struct rchan *chan);
+extern void relay_dump(struct rchan *chan, char *buf, int len, int flags);
extern void relay_subbufs_consumed(struct rchan *chan,
unsigned int cpu,
size_t consumed);
diff --git a/kernel/relay.c b/kernel/relay.c
index b5db4aa60da1..0e675a77285c 100644
--- a/kernel/relay.c
+++ b/kernel/relay.c
@@ -810,6 +810,41 @@ void relay_flush(struct rchan *chan)
}
EXPORT_SYMBOL_GPL(relay_flush);
+/**
+ * relay_dump - dump statistics of the specified channel buffer
+ * @chan: the channel
+ * @buf: buf to store statistics
+ * @len: len of buf to check
+ * @flags: select particular information to dump
+ */
+void relay_dump(struct rchan *chan, char *buf, int len, int flags)
+{
+ unsigned int i, full_counter = 0;
+ struct rchan_buf *rbuf;
+ int offset = 0;
+
+ if (!chan || !buf || flags & ~RELAY_DUMP_MASK)
+ return;
+
+ if (len < RELAY_DUMP_BUF_MAX_LEN)
+ return;
+
+ if (chan->is_global) {
+ rbuf = *per_cpu_ptr(chan->buf, 0);
+ full_counter = rbuf->stats.full;
+ } else {
+ for_each_possible_cpu(i) {
+ if ((rbuf = *per_cpu_ptr(chan->buf, i)))
+ full_counter += rbuf->stats.full;
+ }
+
+ if (flags & RELAY_DUMP_BUF_FULL)
+ offset += snprintf(buf, sizeof(unsigned int), "%u", full_counter);
+
+ snprintf(buf + offset, 1, "\n");
+}
+EXPORT_SYMBOL_GPL(relay_dump);
+
/**
* relay_file_open - open file op for relay files
* @inode: the inode
--
2.43.5
next prev parent reply other threads:[~2025-05-12 2:49 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-12 2:49 [PATCH v1 0/5] relayfs: misc changes Jason Xing
2025-05-12 2:49 ` [PATCH v1 1/5] relayfs: support a counter tracking if per-cpu buffers is full Jason Xing
2025-05-13 0:51 ` Andrew Morton
2025-05-13 1:37 ` Jason Xing
2025-05-12 2:49 ` Jason Xing [this message]
2025-05-13 0:51 ` [PATCH v1 2/5] relayfs: introduce dump of relayfs statistics function Andrew Morton
2025-05-13 1:48 ` Jason Xing
2025-05-13 2:04 ` Andrew Morton
2025-05-13 2:26 ` Jason Xing
2025-05-13 3:41 ` Andrew Morton
2025-05-13 3:48 ` Jason Xing
2025-05-13 9:58 ` Masami Hiramatsu
2025-05-13 10:32 ` Jason Xing
2025-05-13 13:22 ` Masami Hiramatsu
2025-05-13 13:46 ` Jason Xing
2025-05-14 1:29 ` Masami Hiramatsu
2025-05-14 2:06 ` Jason Xing
2025-05-12 2:49 ` [PATCH v1 3/5] blktrace: use rbuf->stats.full as a drop indicator in relayfs Jason Xing
2025-05-12 2:49 ` [PATCH v1 4/5] relayfs: support a counter tracking if data is too big to write Jason Xing
2025-05-12 2:49 ` [PATCH v1 5/5] relayfs: uniformally use possible cpu iteration Jason Xing
2025-05-13 0:52 ` Andrew Morton
2025-05-13 2:03 ` Jason Xing
2025-05-13 3:21 ` Andrew Morton
2025-05-13 3:25 ` Jason Xing
2025-05-13 5:52 ` Jason Xing
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=20250512024935.64704-3-kerneljasonxing@gmail.com \
--to=kerneljasonxing@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=axboe@kernel.dk \
--cc=katrinzhou@tencent.com \
--cc=kernelxing@tencent.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=rostedt@goodmis.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 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).