diff options
-rw-r--r-- | kernel/trace/ring_buffer_benchmark.c | 58 |
1 files changed, 56 insertions, 2 deletions
diff --git a/kernel/trace/ring_buffer_benchmark.c b/kernel/trace/ring_buffer_benchmark.c index 3875d49da990..b2477caf09c2 100644 --- a/kernel/trace/ring_buffer_benchmark.c +++ b/kernel/trace/ring_buffer_benchmark.c | |||
@@ -39,6 +39,24 @@ static int write_iteration = 50; | |||
39 | module_param(write_iteration, uint, 0644); | 39 | module_param(write_iteration, uint, 0644); |
40 | MODULE_PARM_DESC(write_iteration, "# of writes between timestamp readings"); | 40 | MODULE_PARM_DESC(write_iteration, "# of writes between timestamp readings"); |
41 | 41 | ||
42 | static int producer_nice = 19; | ||
43 | static int consumer_nice = 19; | ||
44 | |||
45 | static int producer_fifo = -1; | ||
46 | static int consumer_fifo = -1; | ||
47 | |||
48 | module_param(producer_nice, uint, 0644); | ||
49 | MODULE_PARM_DESC(producer_nice, "nice prio for producer"); | ||
50 | |||
51 | module_param(consumer_nice, uint, 0644); | ||
52 | MODULE_PARM_DESC(consumer_nice, "nice prio for consumer"); | ||
53 | |||
54 | module_param(producer_fifo, uint, 0644); | ||
55 | MODULE_PARM_DESC(producer_fifo, "fifo prio for producer"); | ||
56 | |||
57 | module_param(consumer_fifo, uint, 0644); | ||
58 | MODULE_PARM_DESC(consumer_fifo, "fifo prio for consumer"); | ||
59 | |||
42 | static int read_events; | 60 | static int read_events; |
43 | 61 | ||
44 | static int kill_test; | 62 | static int kill_test; |
@@ -270,6 +288,27 @@ static void ring_buffer_producer(void) | |||
270 | 288 | ||
271 | if (kill_test) | 289 | if (kill_test) |
272 | trace_printk("ERROR!\n"); | 290 | trace_printk("ERROR!\n"); |
291 | |||
292 | if (!disable_reader) { | ||
293 | if (consumer_fifo < 0) | ||
294 | trace_printk("Running Consumer at nice: %d\n", | ||
295 | consumer_nice); | ||
296 | else | ||
297 | trace_printk("Running Consumer at SCHED_FIFO %d\n", | ||
298 | consumer_fifo); | ||
299 | } | ||
300 | if (producer_fifo < 0) | ||
301 | trace_printk("Running Producer at nice: %d\n", | ||
302 | producer_nice); | ||
303 | else | ||
304 | trace_printk("Running Producer at SCHED_FIFO %d\n", | ||
305 | producer_fifo); | ||
306 | |||
307 | /* Let the user know that the test is running at low priority */ | ||
308 | if (producer_fifo < 0 && consumer_fifo < 0 && | ||
309 | producer_nice == 19 && consumer_nice == 19) | ||
310 | trace_printk("WARNING!!! This test is running at lowest priority.\n"); | ||
311 | |||
273 | trace_printk("Time: %lld (usecs)\n", time); | 312 | trace_printk("Time: %lld (usecs)\n", time); |
274 | trace_printk("Overruns: %lld\n", overruns); | 313 | trace_printk("Overruns: %lld\n", overruns); |
275 | if (disable_reader) | 314 | if (disable_reader) |
@@ -402,8 +441,23 @@ static int __init ring_buffer_benchmark_init(void) | |||
402 | /* | 441 | /* |
403 | * Run them as low-prio background tasks by default: | 442 | * Run them as low-prio background tasks by default: |
404 | */ | 443 | */ |
405 | set_user_nice(consumer, 19); | 444 | if (!disable_reader) { |
406 | set_user_nice(producer, 19); | 445 | if (consumer_fifo >= 0) { |
446 | struct sched_param param = { | ||
447 | .sched_priority = consumer_fifo | ||
448 | }; | ||
449 | sched_setscheduler(consumer, SCHED_FIFO, ¶m); | ||
450 | } else | ||
451 | set_user_nice(consumer, consumer_nice); | ||
452 | } | ||
453 | |||
454 | if (producer_fifo >= 0) { | ||
455 | struct sched_param param = { | ||
456 | .sched_priority = consumer_fifo | ||
457 | }; | ||
458 | sched_setscheduler(producer, SCHED_FIFO, ¶m); | ||
459 | } else | ||
460 | set_user_nice(producer, producer_nice); | ||
407 | 461 | ||
408 | return 0; | 462 | return 0; |
409 | 463 | ||