apache / brpc

brpc is an Industrial-grade RPC framework using C++ Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. "brpc" means "better RPC".
https://brpc.apache.org
Apache License 2.0
16.56k stars 3.98k forks source link

对原子变量操作会引起rpc调用阻塞? #2796

Closed utopia9527 closed 3 weeks ago

utopia9527 commented 3 weeks ago

背景: 项目中有一个资源双buffer, 利用后台线程,改变buffer的下标(std::atomic_int) 来进行buffer切换,

遇到的问题: 在进行buffer切换时, 如果当前服务中有对其它服务的rpc调用耗时明显增加(比如 50ms 增加到 500ms) 耗时的增加周期和进行原子变量操作周期一致

进行的尝试: 1、怀疑切换竞争太多,在切换的时候,针对此动作进行了耗时监控,耗时可以忽略不计 2、怀疑CPU、线程 资源问题, 进行监控发现,没有关系,资源非常充足

求助: 请问还有什么排查的方向吗, 或者说这是个已知问题

资源非常充足 image

chenBright commented 3 weeks ago

原子变量不会阻塞worker线程。

可以参考文档排查。

TousakaRin commented 3 weeks ago

有可能是构造buffer,释放buffer,使用新buffer带来的开销,而不是原子操作带来的开销,可以在切换buffer的时候用perf抓一些symbol,检查下当时的IO和page fault,系统中断数,tlb miss等等,要简单验证下可以这样:准备两块buffer来回切换(即下标一直来0、1之间切换),再观察下延迟变化。

utopia9527 commented 3 weeks ago

有可能是构造buffer,释放buffer,使用新buffer带来的开销,而不是原子操作带来的开销,可以在切换buffer的时候用perf抓一些symbol,检查下当时的IO和page fault,系统中断数,tlb miss等等,要简单验证下可以这样:准备两块buffer来回切换(即下标一直来0、1之间切换),再观察下延迟变化。

ok. thx!!