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 | ||
