如何调整getrusage的CPU使用统计粒度?
如何调整getrusage的CPU使用统计粒度?
我来梳理下关于getrusage的CPU统计粒度问题,以及你关心的调优可能性:
首先,getrusage本身能正常工作,但它的统计精度/粒度确实不够理想,而且这个精度完全不依赖CPU性能,只由内核决定。不同系统的表现差异很大:
- Linux内核4.x及以上:精度约3800μs(微秒);3.x版本则是10000μs
- macOS:提供的CPU使用统计精度高得多,大概14μs,比Linux精准270倍
- FreeBSD(包括它的Linux兼容层):每次调用
getrusage都会返回更新后的CPU使用值,精度能达到约1.9μs
至于你问的能不能通过sysctl或者重新编译内核来调整精度——目前从已知的情况来看,Linux这边暂时没有通用的sysctl参数可以直接调整这个粒度;而重新编译内核的话,理论上可以修改内核中getrusage相关的时间统计逻辑,但这需要对内核源码有深入了解,而且修改后可能会影响系统其他依赖时间统计的组件,风险较高,不太推荐普通用户这么操作。
[更新] 补充我统计到的详细百分位和直方图数据:
每秒278次增量,平均3597.1微秒
1%: 3.000 5%: 19.000 10%: 493.000 20%: 3,500.000 30%: 3,511.000
40%: 3,967.000 50%: 4,002.000 60%: 4,012.000 70%: 4,017.000 80%: 4,447.000
90%: 4,503.000 95%: 4,508.000 99%: 4,567.000
直方图:CPU使用增量(微秒)
2.000 ... 399.417 9.7% | @@@@@@@@@@ 399.417 ... 796.833 1.1% | @ 796.833 ... 1,194.250 0.4% | 1,194.250 ... 1,591.667 | 1,591.667 ... 1,989.083 0.7% | 1,989.083 ... 2,386.500 0.4% | 2,386.500 ... 2,783.917 0.4% | 2,783.917 ... 3,181.333 0.7% | 3,181.333 ... 3,578.750 21.2% | @@@@@@@@@@@@@@@@@@@@@@@ 3,578.750 ... 3,976.167 5.8% | @@@@@@ 3,976.167 ... 4,373.583 38.5% | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 4,373.583 ... 4,771.000 21.2% | @@@@@@@@@@@@@@@@@@@@@@@
备注:内容来源于stack exchange,提问作者Professor Pro
相关产品推荐
相关产品推荐

