| Function report | 
| Source Code: kernel\trace\ring_buffer_benchmark.c | Create Date:2022-07-28 11:56:24 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:ring_buffer_producer
Proto:static void ring_buffer_producer(void)
Type:void
Parameter:Nothing
| 236 | missed = 0 | 
| 237 | hit = 0 | 
| 239 | cnt = 0 | 
| 245 | trace_printk("Starting ring buffer hammer\n") | 
| 246 | start_time = ktime_get() | 
| 247 | timeout = Add a ktime_t variable and a scalar nanosecond value.* res = kt + nsval:(start_time, un time and sleep time in seconds * NSEC_PER_SEC) | 
| 248 | Do | 
| 253 | When i < write_iteration cycle | 
| 255 | If Not event Then | 
| 256 | missed++ | 
| 257 | Else | 
| 266 | cnt++ | 
| 280 | If cnt % umber of events for writer to wake up the reader Then cond_resched() | 
| 283 | When ktime_before - Compare if a ktime_t value is smaller than another one.*@cmp1: comparable1*@cmp2: comparable2* Return: true if cmp1 happened before cmp2. && Not break_test() cycle | 
| 284 | trace_printk("End ring buffer hammer\n") | 
| 286 | If consumer Then | 
| 288 | init_completion( & read_start) | 
| 289 | init_completion( & read_done) | 
| 291 | smp_wmb() | 
| 292 | reader_finish = 1 | 
| 297 | time = ktime_us_delta(end_time, start_time) | 
| 299 | entries = g_buffer_entries - get the number of entries in a buffer*@buffer: The ring buffer* Returns the total number of entries in the ring buffer* (all CPU entries) | 
| 300 | overruns = g_buffer_overruns - get the number of overruns in buffer*@buffer: The ring buffer* Returns the total number of overruns in the ring buffer* (all CPU entries) | 
| 302 | If test_error Then trace_printk("ERROR!\n") | 
| 305 | If Not disable_reader Then | 
| 306 | If consumer_fifo < 0 Then trace_printk("Running Consumer at nice: %d\n", consumer_nice) | 
| 309 | Else trace_printk("Running Consumer at SCHED_FIFO %d\n", consumer_fifo) | 
| 313 | If producer_fifo < 0 Then trace_printk("Running Producer at nice: %d\n", producer_nice) | 
| 316 | Else trace_printk("Running Producer at SCHED_FIFO %d\n", producer_fifo) | 
| 321 | If producer_fifo < 0 && consumer_fifo < 0 && producer_nice == MAX_NICE && consumer_nice == MAX_NICE Then trace_printk("WARNING!!! This test is running at lowest priority.\n") | 
| 325 | trace_printk("Time: %lld (usecs)\n", time) | 
| 326 | trace_printk("Overruns: %lld\n", overruns) | 
| 327 | If disable_reader Then trace_printk("Read: (reader disabled)\n") | 
| 329 | Else trace_printk("Read: %ld (by %s)\n", read, read_events ? "events" : "pages") | 
| 332 | trace_printk("Entries: %lld\n", entries) | 
| 333 | trace_printk("Total: %lld\n", entries + overruns + read) | 
| 334 | trace_printk("Missed: %ld\n", missed) | 
| 335 | trace_printk("Hit: %ld\n", hit) | 
| 341 | Else trace_printk("TIME IS ZERO??\n") | 
| 344 | trace_printk("Entries per millisec: %ld\n", hit) | 
| 346 | If hit Then | 
| 348 | avg = NSEC_PER_MSEC / hit | 
| 349 | trace_printk("%ld ns per entry\n", avg) | 
| 352 | If missed Then | 
| 356 | trace_printk("Total iterations per millisec: %ld\n", hit + missed) | 
| 361 | trace_printk("hit + missed overflowed and totalled zero!\n") | 
| 362 | hit-- | 
| 366 | avg = NSEC_PER_MSEC / (hit + missed) | 
| 367 | trace_printk("%ld ns per entry\n", avg) | 
| Name | Describe | 
|---|---|
| ring_buffer_producer_thread | 
| Source code conversion tool public plug-in interface | X | 
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |