iovisor/bcc

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

Open

#1,033 创建于 2017年3月8日

在 GitHub 查看
 (12 评论) (0 反应) (0 负责人)C (22,409 star) (4,051 fork)batch import
help wantedprio:high

描述

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.

贡献者指南

Reduce CPU overhead of per-event tools by allowing more buffering · iovisor/bcc#1033 | Good First Issue