From: Steven Rostedt <rostedt@goodmis.org>
To: linux-kernel@vger.kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Ingo Molnar <mingo@redhat.com>,
Daniel Bristot de Oliveira <bristot@kernel.org>
Subject: [for-linus][PATCH 08/13] tracing/osnoise: Make osnoise_main to sleep for microseconds
Date: Fri, 25 Feb 2022 11:51:59 -0500 [thread overview]
Message-ID: <20220225165219.547132100@goodmis.org> (raw)
In-Reply-To: 20220225165151.824659113@goodmis.org
From: Daniel Bristot de Oliveira <bristot@kernel.org>
osnoise's runtime and period are in the microseconds scale, but it is
currently sleeping in the millisecond's scale. This behavior roots in the
usage of hwlat as the skeleton for osnoise.
Make osnoise to sleep in the microseconds scale. Also, move the sleep to
a specialized function.
Link: https://lkml.kernel.org/r/302aa6c7bdf2d131719b22901905e9da122a11b2.1645197336.git.bristot@kernel.org
Cc: Ingo Molnar <mingo@redhat.com>
Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
kernel/trace/trace_osnoise.c | 53 ++++++++++++++++++++++--------------
1 file changed, 32 insertions(+), 21 deletions(-)
diff --git a/kernel/trace/trace_osnoise.c b/kernel/trace/trace_osnoise.c
index 870a08da5b48..cfddb30e65ab 100644
--- a/kernel/trace/trace_osnoise.c
+++ b/kernel/trace/trace_osnoise.c
@@ -1436,6 +1436,37 @@ static int run_osnoise(void)
static struct cpumask osnoise_cpumask;
static struct cpumask save_cpumask;
+/*
+ * osnoise_sleep - sleep until the next period
+ */
+static void osnoise_sleep(void)
+{
+ u64 interval;
+ ktime_t wake_time;
+
+ mutex_lock(&interface_lock);
+ interval = osnoise_data.sample_period - osnoise_data.sample_runtime;
+ mutex_unlock(&interface_lock);
+
+ /*
+ * differently from hwlat_detector, the osnoise tracer can run
+ * without a pause because preemption is on.
+ */
+ if (!interval) {
+ /* Let synchronize_rcu_tasks() make progress */
+ cond_resched_tasks_rcu_qs();
+ return;
+ }
+
+ wake_time = ktime_add_us(ktime_get(), interval);
+ __set_current_state(TASK_INTERRUPTIBLE);
+
+ while (schedule_hrtimeout_range(&wake_time, 0, HRTIMER_MODE_ABS)) {
+ if (kthread_should_stop())
+ break;
+ }
+}
+
/*
* osnoise_main - The osnoise detection kernel thread
*
@@ -1444,30 +1475,10 @@ static struct cpumask save_cpumask;
*/
static int osnoise_main(void *data)
{
- u64 interval;
while (!kthread_should_stop()) {
-
run_osnoise();
-
- mutex_lock(&interface_lock);
- interval = osnoise_data.sample_period - osnoise_data.sample_runtime;
- mutex_unlock(&interface_lock);
-
- do_div(interval, USEC_PER_MSEC);
-
- /*
- * differently from hwlat_detector, the osnoise tracer can run
- * without a pause because preemption is on.
- */
- if (interval < 1) {
- /* Let synchronize_rcu_tasks() make progress */
- cond_resched_tasks_rcu_qs();
- continue;
- }
-
- if (msleep_interruptible(interval))
- break;
+ osnoise_sleep();
}
return 0;
--
2.34.1
next prev parent reply other threads:[~2022-02-25 16:53 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-25 16:51 [for-linus][PATCH 00/13] tracing: Updates for 5.17-rc Steven Rostedt
2022-02-25 16:51 ` [for-linus][PATCH 01/13] rtla: Fix systme -> system typo on man page Steven Rostedt
2022-02-25 16:51 ` [for-linus][PATCH 02/13] tracing: Dump stacktrace trigger to the corresponding instance Steven Rostedt
2022-02-25 16:51 ` [for-linus][PATCH 03/13] tracing: Have traceon and traceoff trigger honor the instance Steven Rostedt
2022-02-25 16:51 ` [for-linus][PATCH 04/13] eprobes: Remove redundant event type information Steven Rostedt
2022-02-25 16:51 ` [for-linus][PATCH 05/13] tracing: Uninline trace_trigger_soft_disabled() partly Steven Rostedt
2022-02-25 16:51 ` [for-linus][PATCH 06/13] tracing: Ensure trace buffer is at least 4096 bytes large Steven Rostedt
2022-02-25 16:51 ` [for-linus][PATCH 07/13] ftrace: Remove unused ftrace_startup_enable() stub Steven Rostedt
2022-02-25 16:51 ` Steven Rostedt [this message]
2022-02-25 16:52 ` [for-linus][PATCH 09/13] tracefs: Set the group ownership in apply_options() not parse_options() Steven Rostedt
2022-02-25 17:11 ` Al Viro
2022-02-25 17:18 ` Steven Rostedt
2022-02-25 16:52 ` [for-linus][PATCH 10/13] tracing: Fix selftest config check for function graph start up test Steven Rostedt
2022-02-25 16:52 ` [for-linus][PATCH 11/13] rtla/hist: Make -E the short version of --entries Steven Rostedt
2022-02-25 16:52 ` [for-linus][PATCH 12/13] rtla/osnoise: Free params at the exit Steven Rostedt
2022-02-25 16:52 ` [for-linus][PATCH 13/13] rtla/osnoise: Fix error message when failing to enable trace instance 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=20220225165219.547132100@goodmis.org \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=bristot@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=mingo@redhat.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