From nobody Fri Dec 19 17:14:35 2025 Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 30A9817A5BE; Sun, 18 May 2025 02:57:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747537065; cv=none; b=LuI6KXCSqEzO/iTT0zxV98ghk2xxNxLh2mDCx8YU4LcesVd+oWkzwHUswoD3ZnTIHnoaUzIj+7UOo7AGRn+EjUZs9xcOAONq7MFaHl/9NlDGlhX8Fan8DwFxqLYvKDKJjUQr36Rv2BG/ZJxTU1Xq3vWHJCdHGvIbWBsDIFRs3to= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747537065; c=relaxed/simple; bh=x/yNgCNWUnNi4QxxQnWLyHVdJE5osLHq+NVVnvH5Qrg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=DQ1pxdq18ggCjPDKTSkIQmhv/ZQke5cXFIAfUeTW0D+1RR3P9Mrl43W82EuLyUSGNCu75j2hXpBOGkzjSASUyFa5Er4wO0+GuqdBvD0u/oqB+ffJTZ048hgPlvA7oWxg/jZ4bfTcw0IwUbuJcpehHBfq3IRLCG3hQxPaTp0w1pk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jxYWf/cr; arc=none smtp.client-ip=209.85.210.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jxYWf/cr" Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-742b0840d98so1324443b3a.1; Sat, 17 May 2025 19:57:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747537063; x=1748141863; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kkS/0rkXLOaw+LmHSHXJ8oekQ6TKOUhZ9qJA7LVDy4k=; b=jxYWf/crSPtAiQS2/alzee7Z3A7aaiFQvH/F7XO6c9DDoG19MJ/1KE5cK3eA6J31ds liOQGZyRzrjycTgdhf8jJZP1hNSPY+VODHR3DTAdE/yKJ6P+4whi0CYisO4WnajRIAAC HiFfwNMHk92SvUtYAt1Pg7gXWrNc/PWbAzFQHK5GL7qVDMLNgOBaSWC675Ckujotc5C6 RazDsljd/L66VXZ0m1xP2F3/V+dhVH4N/hjAp/UEg/hL4Pdn1lw2BW8ebNi8FZgzWlA3 PQcD33wxdUDq6z3fbRxSH5UdIN+Vo+oWOY80AUFzTLr8Boe2/ALSw0RSDLvpPh3JpMPy Zw3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747537063; x=1748141863; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kkS/0rkXLOaw+LmHSHXJ8oekQ6TKOUhZ9qJA7LVDy4k=; b=cLEZTavF+fMZY+Oy5TZDN0131alngXoEcLqVnIg9gKY+CjFXI+USZ7rxuEwK4Nw4c6 DTeEF6H47KEEIiKhybe3XQGFOsuAwfOz/JJStG0KulS/Unvto5V4jujC0DYo8MV4S1ZD cLtwvDOYVH6XQF2uHmgibR7Kfo4xdgHY6BToy9Hmnn1/aCVliCeQRdygf/PKb397RuGG GplRf+Tab5dSdvNkRCkXxluBwOspvNvcSEw1GgxgCGrRDChFyvwtn6YnKwPSNiBaASRM YgHfQPMti0nDcCUOoWyJkljW+rDgSp1sy1uEbNXz00G/RnSCGJWcthpJJq4lNUUvkYDs bwXg== X-Forwarded-Encrypted: i=1; AJvYcCUVxD0n+4+g6eticAVIoemuRjbzKsQ0RNyzen7jJrFasUph+NWC2pfp2dy3Rer0oIyJEg8OJO4eKmAv8r9/bBY9zGuj@vger.kernel.org, AJvYcCVkKlUG45Ri27pq22er36UCWInI59LDBXRnyurBXFLPmy5YjL9wFu7VhMOSVTimQyutTy4hLxgJhETEWw==@vger.kernel.org X-Gm-Message-State: AOJu0YzQvu+QkiZ06cm+S8MpiJPm3IJU4juX2WMShFwG98bX+d32gUxH O9xvccHszWQQSMCzsqtCUNjU91Po8sqfH98pZKbg3ke9tw3b5VL9ZHI3 X-Gm-Gg: ASbGnctD1+6PrR7D8IXTfQ85EP9BjSHtIM3sjK1B3vnrJJ9xaKBldfZ5ZFDQIvhdAKI JLZOJPNXWg8Oytv/qPl2iUq7PayYSZVm/Kbh1GIPghd5tUdRVFrJQYfheun3pmknvk0ksKtqAQL oR+SDHo7RYwy0hXmFq3WQCstHuzeia9Rj68wJFFrx8GUk8dZC4B2HmxiV3tRghZMy8niCPuctG3 4OoZz9uJesL/lx8Cf7QNZHKfcF3LiznswnPQy/NL95nUTSVjjbb9FjTNuj9bPhUsrLbJmrlXRr3 FKbY4jjKlu6Jb6HpjY3wshqoB98KFVK9VrA/cNkJw1h6KR2AjP0OEOyjcKka9QZFpLCgw/B/9gF nVCc6fXfIAuvPTg== X-Google-Smtp-Source: AGHT+IGY+CFJp8Nz4VVshTWZ+tQGtrf4MK7Ndrbz7N0cgLHSm1Jud78aylefVvTZs3ghFYMlN0p6tA== X-Received: by 2002:a05:6a00:3c83:b0:72d:3b2e:fef9 with SMTP id d2e1a72fcca58-742acd72449mr10822476b3a.20.1747537063222; Sat, 17 May 2025 19:57:43 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([111.201.27.248]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9739a12sm3839125b3a.77.2025.05.17.19.57.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 17 May 2025 19:57:42 -0700 (PDT) From: Jason Xing 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 , Yushan Zhou Subject: [PATCH v3 1/4] relayfs: support a counter tracking if per-cpu buffers is full Date: Sun, 18 May 2025 10:57:31 +0800 Message-Id: <20250518025734.61479-2-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250518025734.61479-1-kerneljasonxing@gmail.com> References: <20250518025734.61479-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing When using relay mechanism, we often encounter the case where new data are lost or old unconsumed data are overwritten because of slow reader. Add 'full' field in per-cpu buffer structure to detect if the above case is happening. Relay has two modes: 1) non-overwrite mode, 2) overwrite mode. So buffer being full here respectively means: 1) relayfs doesn't intend to accept new data and then simply drop them, or 2) relayfs is going to start over again and overwrite old unread data with new data. Note: this counter doesn't need any explicit lock to protect from being modified by different threads for the better performance consideration. Writers calling __relay_write/relay_write should consider how to use the lock and ensure it performs under the lock protection, thus it's not necessary to add a new small lock here. Reviewed-by: Yushan Zhou Reviewed-by: Jens Axboe Signed-off-by: Jason Xing Reviewed-by: Masami Hiramatsu (Google) --- v3 1. add Jens reviewed-by tag v2 1. rename full member 2. revise the commit log I still chose to keep struct rchan_buf_stats to help later patches implementing relay_dump() to dump more statistics from buffer. It means more fields can/will be added. But I have to say, I have no strong favor on this kind of organization. If you don't like it, I will remove in the next re-spin :) --- include/linux/relay.h | 9 +++++++++ kernel/relay.c | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/linux/relay.h b/include/linux/relay.h index e10a0fdf4325..cd77eb285a48 100644 --- a/include/linux/relay.h +++ b/include/linux/relay.h @@ -28,6 +28,14 @@ */ #define RELAYFS_CHANNEL_VERSION 7 =20 +/* + * Relay buffer statistics + */ +struct rchan_buf_stats +{ + unsigned int full_count; /* counter for buffer full */ +}; + /* * Per-cpu relay channel buffer */ @@ -43,6 +51,7 @@ struct rchan_buf struct irq_work wakeup_work; /* reader wakeup */ struct dentry *dentry; /* channel file dentry */ struct kref kref; /* channel buffer refcount */ + struct rchan_buf_stats stats; /* buffer stats */ struct page **page_array; /* array of current buffer pages */ unsigned int page_count; /* number of current buffer pages */ unsigned int finalized; /* buffer has been finalized */ diff --git a/kernel/relay.c b/kernel/relay.c index 94f79f52d826..eb3f630f3896 100644 --- a/kernel/relay.c +++ b/kernel/relay.c @@ -252,8 +252,13 @@ EXPORT_SYMBOL_GPL(relay_buf_full); static int relay_subbuf_start(struct rchan_buf *buf, void *subbuf, void *prev_subbuf) { + int full =3D relay_buf_full(buf); + + if (full) + buf->stats.full_count++; + if (!buf->chan->cb->subbuf_start) - return !relay_buf_full(buf); + return !full; =20 return buf->chan->cb->subbuf_start(buf, subbuf, prev_subbuf); @@ -298,6 +303,7 @@ static void __relay_reset(struct rchan_buf *buf, unsign= ed int init) buf->finalized =3D 0; buf->data =3D buf->start; buf->offset =3D 0; + buf->stats.full_count =3D 0; =20 for (i =3D 0; i < buf->chan->n_subbufs; i++) buf->padding[i] =3D 0; --=20 2.43.5 From nobody Fri Dec 19 17:14:35 2025 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D5841192B75; Sun, 18 May 2025 02:57:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747537068; cv=none; b=rnYW2pq52MsO/scuoxkfuSD8ZxL88DJ4mdy33/ADhahleN+T0ZBKKdviincNZr1k02cTc+qIwipTKsuohTZTI9XjF/LvtYAtNYViS2J5ZakeND3jUMTElUY1mjmSAdCQ93wsSFLUReas5EVip1KIgvGT6SmVu2jhstnCbbZJf8E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747537068; c=relaxed/simple; bh=1kJ1UHNHABs1nlIFGrUtvyCHodBR/IlvUCiVSwHdxks=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=gqG41ZTxcTkR4A+LdJl/mO0v8y8WjYY8tOP2zmbgG5a8Kt54CNe63eoJjuot5JlxzgYu3u54jgHRSUlfqOE9oW/ddCVBRZtigjyXXx+QC5hxZAMwv273pnZQlIcvgqCb5qYOKd3H/DkUvLlfvSYVFCY9ZovlpIeRADVRjTrr5cQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=g3x4nHXo; arc=none smtp.client-ip=209.85.210.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="g3x4nHXo" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-742c9563fd9so85460b3a.3; Sat, 17 May 2025 19:57:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747537066; x=1748141866; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hyeqCCHKc+7itzlIu19Pbt4lRppiBFn9GmLplJ9amWo=; b=g3x4nHXo29orP4HTiOO/ngwLWrrnZU9/HezS3jCzh32K21JKcyrjh9a6jl3zLsM1mH Jyuq/gLlq0Y8947PLnpJimxcCS7avsMAfDFUzcDsixtub+rJNRhi5XI0ICBXOBnkLVuA 1jKbFXIPc02yVRw4xglLpuP7BA/YyQTX3BRUGG5d9ovOpECAYkdCon88Kx1+Ghh5kHUh rTQokSBMPwqGJpswuf3yTtXFJHb4mTVNmRoUMdQy9BCulBG3EIWc+fgB9iPgtQueBeOT 3p4/S2IN+sEUpvHol6Wv+ro1J2PYd8nncm7YYVT1wDiezn+JN2KliIYwioS9tft+0KGQ vdLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747537066; x=1748141866; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hyeqCCHKc+7itzlIu19Pbt4lRppiBFn9GmLplJ9amWo=; b=YXbkk0dpuxvEHQzu4WSs8cc5+2ptbEvIBCSogJoozsHX7g6Ce23jd4peckIXTpMHyL Nmo28f6YiR8Yole/sqnljF6YaelmqLg0J61+WBKhOLF/Xg+et1rnU3ll8PsLmlIgLJxk 7b1fITi12IC0ucn1NUMZbc23ApZIkK9Kh+3btTBaUEUADCjzL3d8SAE1sQ3yRIduXEaj 0YdDKsbL+wDerW3aRx3qBWDUsAzjv1/NQHlqjlQrolWA6fJZH8Kr9B7sqdggKCk6vYBi a6MKpt1XVzwB7QvD/4bx9MIUjVLXiocKMNcg5sbI1kVOSFXTcB3n7acIUPuiXMdWPx/5 tf1A== X-Forwarded-Encrypted: i=1; AJvYcCUvKDtKYbBORiSp+FZ8brHhMM1hayb4fLRAM8BCThVNQVB/Ii8uKO/d2wEukh1iMemtmwd03agJAKOPLB5HRZlCrPVl@vger.kernel.org, AJvYcCVnWVcSlWdPf/ObqXFdGtYXeHWK/6QrRhn487S5j5ihBEh2k/R0GKoHr9eCDvl3xhv1i2JzuMyTg0taMA==@vger.kernel.org X-Gm-Message-State: AOJu0YzGDE3SxWmIl/EvFQpqjBIkPYocPyRQ2o4LDVQKhSuTCFM7ffqK JsBADmUS3k+t4Qb0ilGwzymWQfh6d8CY2MqXgqyOuueCDbuQNCwHr19s X-Gm-Gg: ASbGncsaVMTkqPYS/sg75Wk7mQl4GdmDAZluDpfN4gWikg+fZ0gZuzwlhZwiL/tZXqq KGEEbjZx6Jo8S+KD62oydxlJPz2KhtawA+5lwsVL+Cx8821Nsjpt17XsQEHVfmOQ9M+1Eekqaa+ rg/buOZwqFrX6HczsCDsz7zTHvdrtE1mHS95bEX2E5alJeqwOkFrDixJm1S9fJ4LavjTwiMOL8P Dw5GmSzVAUDhhUmSb3IDPrGNJDJX/2KLskIC+JajEjuf2L2VR+3QO49dEM6ipMKiXIa6BRXpksz /NaLRRUzfyCOB/skY3I9N9swUSX2atI57VTe+4m8AqtHcIZJlkuSzZeR3ICXW8zTeVY3Gkt3/ik l5wAwEoCqWLFrsoIQRqvDj+I3 X-Google-Smtp-Source: AGHT+IF9Q6fCrQTG6EsQtx6ga7f2/ypu3cd1qlXLLpg5MVdOx7DYMUHvKojDT/unWuO5fXvJ/o0FwQ== X-Received: by 2002:a05:6a00:23c8:b0:73c:b86:b47f with SMTP id d2e1a72fcca58-742acc8da94mr10258488b3a.4.1747537066146; Sat, 17 May 2025 19:57:46 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([111.201.27.248]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9739a12sm3839125b3a.77.2025.05.17.19.57.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 17 May 2025 19:57:45 -0700 (PDT) From: Jason Xing 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 , Yushan Zhou Subject: [PATCH v3 2/4] relayfs: introduce getting relayfs statistics function Date: Sun, 18 May 2025 10:57:32 +0800 Message-Id: <20250518025734.61479-3-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250518025734.61479-1-kerneljasonxing@gmail.com> References: <20250518025734.61479-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing In this version, only support getting the counter for buffer full and implement the framework of how it works. Users can pass certain flag to fetch what field/statistics they expect to know. Each time it only returns one result. So do not pass multiple flags. Reviewed-by: Yushan Zhou Signed-off-by: Jason Xing Reviewed-by: Masami Hiramatsu (Google) --- v3 1. rename and adjust relay_stats() 2. move rbuf init out of if statement v2 1. refactor relay_dump() and make it only return a pure size_t result of the value that users specifies. 2. revise the commit log. --- include/linux/relay.h | 7 +++++++ kernel/relay.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/include/linux/relay.h b/include/linux/relay.h index cd77eb285a48..5310967f9d74 100644 --- a/include/linux/relay.h +++ b/include/linux/relay.h @@ -31,6 +31,12 @@ /* * Relay buffer statistics */ +enum { + RELAY_STATS_BUF_FULL =3D (1 << 0), + + RELAY_STATS_LAST =3D RELAY_STATS_BUF_FULL, +}; + struct rchan_buf_stats { unsigned int full_count; /* counter for buffer full */ @@ -167,6 +173,7 @@ struct rchan *relay_open(const char *base_filename, void *private_data); extern void relay_close(struct rchan *chan); extern void relay_flush(struct rchan *chan); +size_t relay_stats(struct rchan *chan, 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 eb3f630f3896..fd70d0e03216 100644 --- a/kernel/relay.c +++ b/kernel/relay.c @@ -701,6 +701,36 @@ void relay_flush(struct rchan *chan) } EXPORT_SYMBOL_GPL(relay_flush); =20 +/** + * relay_stats - get channel buffer statistics + * @chan: the channel + * @flags: select particular information to get + * + * Returns the count of certain field that caller specifies. + */ +size_t relay_stats(struct rchan *chan, int flags) +{ + unsigned int i, count =3D 0; + struct rchan_buf *rbuf; + + if (!chan || flags > RELAY_STATS_LAST) + return 0; + + if (chan->is_global) { + rbuf =3D *per_cpu_ptr(chan->buf, 0); + if (flags & RELAY_STATS_BUF_FULL) + count =3D rbuf->stats.full_count; + } else { + for_each_online_cpu(i) { + rbuf =3D *per_cpu_ptr(chan->buf, i); + if (rbuf && flags & RELAY_STATS_BUF_FULL) + count +=3D rbuf->stats.full_count; + } + } + + return count; +} + /** * relay_file_open - open file op for relay files * @inode: the inode --=20 2.43.5 From nobody Fri Dec 19 17:14:35 2025 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 096C51C5F14; Sun, 18 May 2025 02:57:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747537071; cv=none; b=Nw8XrqsdgNNK8VqjYG26SYx6NOaWclEl/GdGm/LZuUJKlZT4eOhv/ckYw8MMqCgCip4LQ8UxX8vTn/7q+fdRtG5c+k3xzryZuqnvUUGdIQT1g0N7EzNu6K3EzXIfW3yWEeBbrw355ZUD+txfNtAf4/cirlHtOdED1+4AgGtyy6g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747537071; c=relaxed/simple; bh=X8uh0Zg5uTDSDkQUDoBBrT2fLBmGCj1K1lr/2t6IFrA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SJG0rqkcCkhsFEyyF6ui6HrZl8cXUBjCKp9GDN21ddd5uH1tebETRw7Msue0c0Zd3TUwahisTLFyFh/wY5tnnv1KI3FqWT/UqMHu7tmvuQvaFiY8uxKZZjX3IxtxjquzI5Gd+M/pAewtoP0tqYNR1ZeNCtpnT8ACKwkz92DN+7Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UUIpSdt5; arc=none smtp.client-ip=209.85.210.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UUIpSdt5" Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-742c5eb7d1cso463507b3a.3; Sat, 17 May 2025 19:57:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747537069; x=1748141869; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ReN2Wu8H7BsHSEK2bE84uS7ls8fGyo5p5xA7a+of5tU=; b=UUIpSdt5ITqdHZZfFf4kTKveqGd1rrvClQmuPTWwEhlyvftrWB5Y9f/ZnY/Od0+8Cr MT8hED/W0L06yaIeTkSCRe/1NMjafP7wkm0hZlHMncCvtJlO4yp1Jg8m6UWMquwd4foI 1+QQg/korKtikCah+Q7icXwKQ/2I4mBV1Xvrl8lVveAhm7XVBKwQzIef2+kdD4aSR3HL A0mZALdQFakzQhjrzzFMKsvIMbmbUAf6p9TOh1Bg2xqDGBzQsKd7AUvaTY/U6F0kY3JK CdvO2xBCy5mwVciRJMuXiE8UPMWMKaqQXfrYaWfjXHjBmJEcU9jelPkffP4KpjTvPPYf 4Hrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747537069; x=1748141869; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ReN2Wu8H7BsHSEK2bE84uS7ls8fGyo5p5xA7a+of5tU=; b=Y2ezmCGWWH3rclJF5cJsknVkmJFcq/EGhnD5jf02YvQqk069bzo61XpGp+C+NiKNs1 BVvbd8EduWS1OZzuZOktrjmbkSaJqZUlBXPPIaOIGux5RnAf2MoUY3MzMLznIwP7vbWw 1QcvZErhGsgGR13h951PZqSNa+UQ2EpulJ5OUz2519DHTNyMDX8s3+5wZf1p5gT7bmwl nNnps1/wJtVcLzEDd9pU5eD86a7+5KjTZG6faBLZNlxqa7/bDXY6bNWMiFwjlBUjzrck 4qpy8W1mlS5dKHzumQJUNb/5zaiVxZV6gbqi72iISCvyPAZRd3m5H1qH8asmLfNIb2YK dsNg== X-Forwarded-Encrypted: i=1; AJvYcCUYTQt0lpk4OiC34TTVjS/cpye89z9l0Ou2wToHVlYLhd14wGfqqKkncvu5cdKKhbceR0R0umdKCzqbJQ==@vger.kernel.org, AJvYcCWgvWW2mVWRr4kkL0rq1O94v5twNuFoBTbS+BYmRcXuzOgqCuEUEkzXvcFB7uEF+Eng439XlO9FjqNSGrjXW7HjS0HX@vger.kernel.org X-Gm-Message-State: AOJu0YwJ6iNexnAY2SE0M/n8gDbcyX9iZ98v49zx09yVH/Ga32hpqFDm mIN7+1v7BvmDpVqKBCCLkPxHTOpLtbGxrCXpjhYuJ2xAL6fvXghmH+k4 X-Gm-Gg: ASbGncv72JnZ5uFLmrxaOm2kUGI5vnVfMfyjEjjd5JkoGQu3wVr8kEaju9kT02i9KjC dJYc6IXQdyqmyckIgJNotn1PNGaFlpVe9GoALF6UOLsVm90Gm9nvLwmdvWZKmIFCB5eOlAEiO1l sStB6VmVXyiwz10ZQG7yGVreyxJ6amsslOH5LSe5jvBo2WnfPb6UgtON/k3ncHkMq0T2VQHr5lD v4f+1+72DFkVUqqHXsfAKkAIIgpYbhaf1m5kaB4hUeMdxbQR+GWpkK3+DI9brsTBC/jU6D1uzSC RkZRwvfXYhqQmBRVMYlikrk0UpR+k/9SGbqM4u6hMfSkUz26NTvTNYtPN1XEhZpE+Pl+UPinBlD wHWVofyGVtEGaoA== X-Google-Smtp-Source: AGHT+IGxK/S8VKqGutUmMUS+T3ae2T98n5SFs9tufSTRsqnPViuSqhoA6g5rKwyFnY8/wNZs3Lw4Qw== X-Received: by 2002:aa7:888e:0:b0:736:4e02:c543 with SMTP id d2e1a72fcca58-742a97cdf96mr10429328b3a.9.1747537069126; Sat, 17 May 2025 19:57:49 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([111.201.27.248]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9739a12sm3839125b3a.77.2025.05.17.19.57.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 17 May 2025 19:57:48 -0700 (PDT) From: Jason Xing 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 , Yushan Zhou Subject: [PATCH v3 3/4] blktrace: use rbuf->stats.full as a drop indicator in relayfs Date: Sun, 18 May 2025 10:57:33 +0800 Message-Id: <20250518025734.61479-4-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250518025734.61479-1-kerneljasonxing@gmail.com> References: <20250518025734.61479-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing Replace internal subbuf_start in blktrace with the default policy in relayfs. Remove dropped field from struct blktrace. Correspondingly, call the common helper in relay. By incrementing full_count to keep track of how many times we encountered a full buffer issue, user space will know how many events were lost. Reviewed-by: Yushan Zhou Reviewed-by: Jens Axboe Signed-off-by: Jason Xing Reviewed-by: Masami Hiramatsu (Google) --- v3 1. add Jens tag 2. refine the commit log v2 1. adjust accordingly together with patch 2. --- kernel/trace/blktrace.c | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c index d1a89714e805..545e6063f451 100644 --- a/kernel/trace/blktrace.c +++ b/kernel/trace/blktrace.c @@ -415,9 +415,10 @@ static ssize_t blk_dropped_read(struct file *filp, cha= r __user *buffer, size_t count, loff_t *ppos) { struct blk_trace *bt =3D filp->private_data; + size_t dropped =3D relay_stats(bt->rchan, RELAY_STATS_BUF_FULL); char buf[16]; =20 - snprintf(buf, sizeof(buf), "%u\n", atomic_read(&bt->dropped)); + snprintf(buf, sizeof(buf), "%lu\n", dropped); =20 return simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf)); } @@ -456,23 +457,6 @@ static const struct file_operations blk_msg_fops =3D { .llseek =3D noop_llseek, }; =20 -/* - * Keep track of how many times we encountered a full subbuffer, to aid - * the user space app in telling how many lost events there were. - */ -static int blk_subbuf_start_callback(struct rchan_buf *buf, void *subbuf, - void *prev_subbuf) -{ - struct blk_trace *bt; - - if (!relay_buf_full(buf)) - return 1; - - bt =3D buf->chan->private_data; - atomic_inc(&bt->dropped); - return 0; -} - static int blk_remove_buf_file_callback(struct dentry *dentry) { debugfs_remove(dentry); @@ -491,7 +475,6 @@ static struct dentry *blk_create_buf_file_callback(cons= t char *filename, } =20 static const struct rchan_callbacks blk_relay_callbacks =3D { - .subbuf_start =3D blk_subbuf_start_callback, .create_buf_file =3D blk_create_buf_file_callback, .remove_buf_file =3D blk_remove_buf_file_callback, }; @@ -580,7 +563,6 @@ static int do_blk_trace_setup(struct request_queue *q, = char *name, dev_t dev, } =20 bt->dev =3D dev; - atomic_set(&bt->dropped, 0); INIT_LIST_HEAD(&bt->running_list); =20 ret =3D -EIO; --=20 2.43.5 From nobody Fri Dec 19 17:14:35 2025 Received: from mail-pf1-f173.google.com (mail-pf1-f173.google.com [209.85.210.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 106251D6DBB; Sun, 18 May 2025 02:57:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747537074; cv=none; b=kI4eFTI6M9zNvwywvyRc+2rfIySjF2TmDGRPbIE/7viI/EyqsvZVkBx+CFO9k/ZGVRaiiUFiNsM2G5vNdr8OHEbMbLf4Szrn/T3PTS4o6Cyb1f+LP0Cfz0uGNy6j/QCxRJLyU2FjTgFqHXn7+J9EQTKc2EcLSwuXdPAlDK7+y3I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747537074; c=relaxed/simple; bh=jHdreU23unpxPd3gg7hJ+y9cYVjy119RFVvEwq1sdtU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=lec5kHmsFT3XMoXS7PNMZMOFRK0V1c8gEvKzhzVG2TtaF4qE0XiHIor3ZHAkKYkiMB/HhNOW8WJszuaInD14PKABI/70D0KTnDFhZjAvb/6vd9963fpafoBxNFKeVF3HwAP2a4VS+OqDiyyqIhhB4x8Mt3IbxC0aGhNAdUzT70k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=EGz6hSpM; arc=none smtp.client-ip=209.85.210.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EGz6hSpM" Received: by mail-pf1-f173.google.com with SMTP id d2e1a72fcca58-742c96af71dso197420b3a.0; Sat, 17 May 2025 19:57:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747537072; x=1748141872; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5vU4Sr+pGkfrx9C51qYKV6aqKFkSDEk9hkPaeHmYyJE=; b=EGz6hSpMY1bWvnS59X5Agq4XYuqk5BeK80rpqnhD0Yjb8AYIiMSrY1/0cCN0AO1I52 xE81MhpezyIVNtHplC+wZJefE/f1aJWwUwIYdDxQqjeJDfZ6ACTR3QJYksyjfgCj8fnU aIbCyN0K0InXd59kdmfDV5XEzl1LukXC38X55J0SKhLOPs9jDmuDKV/KlhoWZ/5ijWgF 02b7OAZGk9UzSQautvlvLNoxCN3WiUbjOpxz2kpH2A+ZG7YOuAr1b+CTDdvsXVm24On/ KMDpiv4z7rH7ZsbqfbEqjlNY9xWMs5GBE8c0hwAoF4ky9KuLCpxhb1zKGI46fZ4gopzK +HIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747537072; x=1748141872; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5vU4Sr+pGkfrx9C51qYKV6aqKFkSDEk9hkPaeHmYyJE=; b=DwJD/OuLJPuAwNODK1aYmyz8KZ5OIlsWQcWs/V4z/xYLmZhZUYzWHpDnYSKm3fuiBn +xbaxyAx9PKB7w27KzcI0Qm79TX59IDRaLLFJR32arkRuVNf8uceZNtPjj8xraoeGwVt QmWI+SCUUkoal8txC0+miaZfsSSdq89W7ZlvgN1FseSEamq8YYzPVOX06YSXDSv/omuc hyPiqCCJmY2WpzMmTVNlRwT+nf/kYMusjdKgZlA3lvbynxcAVU0iVpE9rL6mU+4IjRfs GVRfALNalPKi5Avm+ckt2+v3mN6wHsUjVCLyb6wa6NlREQTyMMVyZOcGAJnlfShxTYdI xsgg== X-Forwarded-Encrypted: i=1; AJvYcCURd6fZLx3+bI9CUF/Xf9gtmdeVelquLSY9rgXJ0KKQaE38++4gJCRQzsDuD62o3o4l9P90uwEAcp8yFg==@vger.kernel.org, AJvYcCWLnxqkvNNKWA5cVhWhBdIVjiDSK/prAFR4LcfmNu+6Y6SR059urEQ0RklxOY/7r+ofUA96dtm4LhS4QTFRq8CjUpRj@vger.kernel.org X-Gm-Message-State: AOJu0YxxhOIx9fh6Dfno25UufkS/cHiAw5wBLGzcO3hg4jrjbOM1O4nv KdO2Y+oZGa+ieyXGRwIewCpPOVK8qEVJ4SbYoFMNtvxf9v4N5Tf7R7hy X-Gm-Gg: ASbGncsbBLvzDUTkp9OE9RlDfnuoEEL0RkHWnlZGGOiOWNNF1KAOzgjrQVTI7nHlm7c +wn+qQAasbPsKbndf73UWbYQpyD5aS2W+ZPs8pYQxoZ3B7AWYm6hMt/CBJEUL8Xqi8T8wUoO1Iu GXTdY3lTtOSbz0IHbOVmjqevv4mfLMjCAW/Rp3uOP4wCs1SKNEG/sXWCA814yq1m69AcAj5lBY0 2rviJb1YmRvInA3GxnjeBLzskDVt3LI1N0BJQn2Taa1Y/k2WGfg4u0JkClrAaigLNRVAO+2yWLG 4Ll9xbHeZ+/C7zpCUphgq7bt4KLxXuapxzZXIyX82eM0nNmqc9jyMrOwN8dwoyVlnVKaCMiLxHv dduKLhCZiOKvXuBDW5BWKK8Ki X-Google-Smtp-Source: AGHT+IGUQH8LwhYK34w8KV7MdQjmYkBEIL6bnxJsYCy5lfgUa3mn82yqd5Y4xATXMSybiMIJ9dcqvQ== X-Received: by 2002:a05:6a00:3023:b0:742:9e9b:a244 with SMTP id d2e1a72fcca58-742a98fb012mr13764332b3a.24.1747537072178; Sat, 17 May 2025 19:57:52 -0700 (PDT) Received: from KERNELXING-MC1.tencent.com ([111.201.27.248]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-742a9739a12sm3839125b3a.77.2025.05.17.19.57.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 17 May 2025 19:57:51 -0700 (PDT) From: Jason Xing 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 , Yushan Zhou Subject: [PATCH v3 4/4] relayfs: support a counter tracking if data is too big to write Date: Sun, 18 May 2025 10:57:34 +0800 Message-Id: <20250518025734.61479-5-kerneljasonxing@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20250518025734.61479-1-kerneljasonxing@gmail.com> References: <20250518025734.61479-1-kerneljasonxing@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jason Xing It really doesn't matter if the user/admin knows what the last too big value is. Record how many times this case is triggered would be helpful. Solve the existing issue where relay_reset() doesn't restore the value. Store the counter in the per-cpu buffer structure instead of the global buffer structure. It also solves the racy condition which is likely to happen when a few of per-cpu buffers encounter the too big data case and then access the global field last_toobig without lock protection. Remove the printk in relay_close() since kernel module can directly call relay_stats() as they want. Reviewed-by: Yushan Zhou Signed-off-by: Jason Xing Reviewed-by: Masami Hiramatsu (Google) --- include/linux/relay.h | 5 +++-- kernel/relay.c | 18 ++++++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/include/linux/relay.h b/include/linux/relay.h index 5310967f9d74..6772a7075840 100644 --- a/include/linux/relay.h +++ b/include/linux/relay.h @@ -33,13 +33,15 @@ */ enum { RELAY_STATS_BUF_FULL =3D (1 << 0), + RELAY_STATS_WRT_BIG =3D (1 << 1), =20 - RELAY_STATS_LAST =3D RELAY_STATS_BUF_FULL, + RELAY_STATS_LAST =3D RELAY_STATS_WRT_BIG, }; =20 struct rchan_buf_stats { unsigned int full_count; /* counter for buffer full */ + unsigned int big_count; /* counter for too big to write */ }; =20 /* @@ -79,7 +81,6 @@ struct rchan const struct rchan_callbacks *cb; /* client callbacks */ struct kref kref; /* channel refcount */ void *private_data; /* for user-defined data */ - size_t last_toobig; /* tried to log event > subbuf size */ struct rchan_buf * __percpu *buf; /* per-cpu channel buffers */ int is_global; /* One global buffer ? */ struct list_head list; /* for channel list */ diff --git a/kernel/relay.c b/kernel/relay.c index fd70d0e03216..bcc889dc0970 100644 --- a/kernel/relay.c +++ b/kernel/relay.c @@ -304,6 +304,7 @@ static void __relay_reset(struct rchan_buf *buf, unsign= ed int init) buf->data =3D buf->start; buf->offset =3D 0; buf->stats.full_count =3D 0; + buf->stats.big_count =3D 0; =20 for (i =3D 0; i < buf->chan->n_subbufs; i++) buf->padding[i] =3D 0; @@ -603,7 +604,7 @@ size_t relay_switch_subbuf(struct rchan_buf *buf, size_= t length) return length; =20 toobig: - buf->chan->last_toobig =3D length; + buf->stats.big_count++; return 0; } EXPORT_SYMBOL_GPL(relay_switch_subbuf); @@ -663,11 +664,6 @@ void relay_close(struct rchan *chan) if ((buf =3D *per_cpu_ptr(chan->buf, i))) relay_close_buf(buf); =20 - if (chan->last_toobig) - printk(KERN_WARNING "relay: one or more items not logged " - "[item size (%zd) > sub-buffer size (%zd)]\n", - chan->last_toobig, chan->subbuf_size); - list_del(&chan->list); kref_put(&chan->kref, relay_destroy_channel); mutex_unlock(&relay_channels_mutex); @@ -720,11 +716,17 @@ size_t relay_stats(struct rchan *chan, int flags) rbuf =3D *per_cpu_ptr(chan->buf, 0); if (flags & RELAY_STATS_BUF_FULL) count =3D rbuf->stats.full_count; + else if (flags & RELAY_STATS_WRT_BIG) + count =3D rbuf->stats.big_count; } else { for_each_online_cpu(i) { rbuf =3D *per_cpu_ptr(chan->buf, i); - if (rbuf && flags & RELAY_STATS_BUF_FULL) - count +=3D rbuf->stats.full_count; + if (rbuf) { + if (flags & RELAY_STATS_BUF_FULL) + count +=3D rbuf->stats.full_count; + else if (flags & RELAY_STATS_WRT_BIG) + count +=3D rbuf->stats.big_count; + } } } =20 --=20 2.43.5