Closed utopia9527 closed 3 weeks ago
原子变量不会阻塞worker线程。
可以参考文档排查。
有可能是构造buffer,释放buffer,使用新buffer带来的开销,而不是原子操作带来的开销,可以在切换buffer的时候用perf抓一些symbol,检查下当时的IO和page fault,系统中断数,tlb miss等等,要简单验证下可以这样:准备两块buffer来回切换(即下标一直来0、1之间切换),再观察下延迟变化。
有可能是构造buffer,释放buffer,使用新buffer带来的开销,而不是原子操作带来的开销,可以在切换buffer的时候用perf抓一些symbol,检查下当时的IO和page fault,系统中断数,tlb miss等等,要简单验证下可以这样:准备两块buffer来回切换(即下标一直来0、1之间切换),再观察下延迟变化。
ok. thx!!
背景: 项目中有一个资源双buffer, 利用后台线程,改变buffer的下标(std::atomic_int) 来进行buffer切换,
遇到的问题: 在进行buffer切换时, 如果当前服务中有对其它服务的rpc调用耗时明显增加(比如 50ms 增加到 500ms) 耗时的增加周期和进行原子变量操作周期一致
进行的尝试: 1、怀疑切换竞争太多,在切换的时候,针对此动作进行了耗时监控,耗时可以忽略不计 2、怀疑CPU、线程 资源问题, 进行监控发现,没有关系,资源非常充足
求助: 请问还有什么排查的方向吗, 或者说这是个已知问题
资源非常充足