linux-trace-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Tzvetomir Stoyanov <tz.stoyanov@gmail.com>,
	Vincent Donnefort <vdonnefort@google.com>,
	Kent Overstreet <kent.overstreet@gmail.com>
Subject: [PATCH v3 11/15] ring-buffer: Keep the same size when updating the order
Date: Wed, 13 Dec 2023 13:17:48 -0500	[thread overview]
Message-ID: <20231213182125.140321029@goodmis.org> (raw)
In-Reply-To: 20231213181737.791847466@goodmis.org

From: "Steven Rostedt (Google)" <rostedt@goodmis.org>

The function ring_buffer_subbuf_order_set() just updated the sub-buffers
to the new size, but this also changes the size of the buffer in doing so.
As the size is determined by nr_pages * subbuf_size. If the subbuf_size is
increased without decreasing the nr_pages, this causes the total size of
the buffer to increase.

This broke the latency tracers as the snapshot needs to be the same size
as the main buffer. The size of the snapshot buffer is only expanded when
needed, and because the order is still the same, the size becomes out of
sync with the main buffer, as the main buffer increased in size without
the tracing system knowing.

Calculate the nr_pages to allocate with the new subbuf_size to be
buffer_size / new_subbuf_size.

Fixes: TBD ("ring-buffer: Set new size of the ring buffer sub page")
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
 kernel/trace/ring_buffer.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 2c908b4f3f68..86d3cac2a877 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -6039,7 +6039,10 @@ int ring_buffer_subbuf_order_set(struct trace_buffer *buffer, int order)
 		if (!cpumask_test_cpu(cpu, buffer->cpumask))
 			continue;
 
-		nr_pages = buffer->buffers[cpu]->nr_pages;
+		/* Update the number of pages to match the new size */
+		nr_pages = old_size * buffer->buffers[cpu]->nr_pages;
+		nr_pages = DIV_ROUND_UP(nr_pages, buffer->subbuf_size);
+
 		cpu_buffers[cpu] = rb_allocate_cpu_buffer(buffer, nr_pages, cpu);
 		if (!cpu_buffers[cpu]) {
 			err = -ENOMEM;
-- 
2.42.0



  parent reply	other threads:[~2023-12-13 18:20 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-13 18:17 [PATCH v3 00/15] ring-buffer/tracing: Allow ring buffer to have bigger sub buffers Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 01/15] ring-buffer: Refactor ring buffer implementation Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 02/15] ring-buffer: Page size per ring buffer Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 03/15] ring-buffer: Add interface for configuring trace sub buffer size Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 04/15] ring-buffer: Set new size of the ring buffer sub page Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 05/15] ring-buffer: Read and write to ring buffers with custom sub buffer size Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 06/15] ring-buffer: Clear pages on error in ring_buffer_subbuf_order_set() failure Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 07/15] ring-buffer: Do no swap cpu buffers if order is different Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 08/15] ring-buffer: Make sure the spare sub buffer used for reads has same size Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 09/15] tracing: Update snapshot order along with main buffer order Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 10/15] tracing: Stop the tracing while changing the ring buffer subbuf size Steven Rostedt
2023-12-13 18:17 ` Steven Rostedt [this message]
2023-12-13 18:17 ` [PATCH v3 12/15] ring-buffer: Just update the subbuffers when changing their allocation order Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 13/15] ring-buffer: Add documentation on the buffer_subbuf_order file Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 14/15] ringbuffer/selftest: Add basic selftest to test changing subbuf order Steven Rostedt
2023-12-13 18:17 ` [PATCH v3 15/15] tracing: Update subbuffer with kilobytes not page order Steven Rostedt

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=20231213182125.140321029@goodmis.org \
    --to=rostedt@goodmis.org \
    --cc=akpm@linux-foundation.org \
    --cc=kent.overstreet@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mhiramat@kernel.org \
    --cc=tz.stoyanov@gmail.com \
    --cc=vdonnefort@google.com \
    /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).