如何在g++/std::mutex下评测锁争用

How to profile lock contentions under g++/std::mutex?

本文关键字:mutex 争用 评测 std g++      更新时间:2023-10-16

问题

是否有开源工具或是否有任何技术/代码用于分析运行代码中std::mutex冲突的程度?

我想按每个std::mutex实例的粒度(按时间或数量)计算锁争用的百分比。如果有一个不需要重新编码的插入工具,那就更好了

我正在寻找一种适用于std::thread和g++的技术:在应用程序退出时,我想将互斥争用统计信息的概要文件转储到日志文件中,这样我就可以在实际运行的上下文中监控线程代码的质量。

注意

我看过这条线。不幸的是,答案要么需要大量现金,要么在Windows上运行。

我推荐AMD CodeXL或英特尔VTune之类的产品。CodeXL是免费的;"英特尔VTune"有免费的学术许可证(如果适用),或者您可以试用30天。它们都在Linux中工作。

在最基本的层面上,这些工具可以通过测量你在std::mutex方法中花费的时间来识别热点。每个工具中都包含其他更高级的分析技术/工具,这些技术/工具可能会对您有进一步的帮助。您根本不需要更改代码,尽管您可能需要检查是否使用调试符号进行了编译和/或是否剥离了二进制文件。您可能还希望远离像-O3这样的极端优化级别,而坚持使用-O1-O2-Og

PS:与所有优化查询一样,我必须提醒您,在开始优化之前,请始终测量您的性能问题的实际位置。无论您对锁争用有多担心,在花费大量精力试图缓解您可能存在或不存在的锁争用之前,请使用探查器验证您的担忧。