iovisor/bcc

Reduce CPU overhead of per-event tools by allowing more buffering

開放

#1,033 建立於 2017年3月8日

 (12 則留言) (0 個反應) (0 位負責人)C (4,073 個分叉)batch import
help wantedprio:high

倉庫指標

星標
 (22,632 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

Not a big problem yet, but at some point we should look into this...

The normal perf_output-consuming loop we've been using is:

while 1:
    b.kprobe_poll()

This wakes up as quickly as it can, and can consume noticeable CPU. I had to tune it for my cpuunclaimed tool:

while 1:
    # allow some buffering by calling sleep(), to reduce the context switch
    # rate and lower overhead.
    try:
        if not exiting:
            sleep(wakeup_s)
    except KeyboardInterrupt:
        exiting = 1
    b.kprobe_poll()
    slept += wakeup_s

This ticket is to explore doing this for more tools. Should b.kprobe_poll() have a built-in sleep, that can be tuned? Eg, 100ms by default?

This is more practical now we have #997, and can increase the buffer size.

貢獻者指南