ring-buffer: only periodically call cond_resched to ring-buffer-benchmark
Calling cond_resched at every iteration of the loop adds a bit of overhead to the benchmark. This patch does two things. 1) only calls cond-resched when CONFIG_PREEMPT is not enabled 2) only calls cond-resched after so many traces has been performed. [ Impact: less overhead to the ring-buffer-benchmark ] Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
committed by
Steven Rostedt
parent
65b7724204
commit
0574ea421b
@@ -218,16 +218,23 @@ static void ring_buffer_producer(void)
|
|||||||
}
|
}
|
||||||
do_gettimeofday(&end_tv);
|
do_gettimeofday(&end_tv);
|
||||||
|
|
||||||
if (consumer && !(++cnt % wakeup_interval))
|
cnt++;
|
||||||
|
if (consumer && !(cnt % wakeup_interval))
|
||||||
wake_up_process(consumer);
|
wake_up_process(consumer);
|
||||||
|
|
||||||
|
#ifndef CONFIG_PREEMPT
|
||||||
/*
|
/*
|
||||||
* If we are a non preempt kernel, the 10 second run will
|
* If we are a non preempt kernel, the 10 second run will
|
||||||
* stop everything while it runs. Instead, we will call
|
* stop everything while it runs. Instead, we will call
|
||||||
* cond_resched and also add any time that was lost by a
|
* cond_resched and also add any time that was lost by a
|
||||||
* rescedule.
|
* rescedule.
|
||||||
|
*
|
||||||
|
* Do a cond resched at the same frequency we would wake up
|
||||||
|
* the reader.
|
||||||
*/
|
*/
|
||||||
cond_resched();
|
if (cnt % wakeup_interval)
|
||||||
|
cond_resched();
|
||||||
|
#endif
|
||||||
|
|
||||||
} while (end_tv.tv_sec < (start_tv.tv_sec + RUN_TIME) && !kill_test);
|
} while (end_tv.tv_sec < (start_tv.tv_sec + RUN_TIME) && !kill_test);
|
||||||
pr_info("End ring buffer hammer\n");
|
pr_info("End ring buffer hammer\n");
|
||||||
|
Reference in New Issue
Block a user