如何在g++/std::mutex下评测锁争用
How to profile lock contentions under g++/std::mutex?
问题
是否有开源工具或是否有任何技术/代码用于分析运行代码中std::mutex
冲突的程度?
我想按每个std::mutex
实例的粒度(按时间或数量)计算锁争用的百分比。如果有一个不需要重新编码的插入工具,那就更好了
我正在寻找一种适用于std::thread
和g++的技术:在应用程序退出时,我想将互斥争用统计信息的概要文件转储到日志文件中,这样我就可以在实际运行的上下文中监控线程代码的质量。
注意
我看过这条线。不幸的是,答案要么需要大量现金,要么在Windows上运行。
我推荐AMD CodeXL或英特尔VTune之类的产品。CodeXL是免费的;"英特尔VTune"有免费的学术许可证(如果适用),或者您可以试用30天。它们都在Linux中工作。
在最基本的层面上,这些工具可以通过测量你在std::mutex
方法中花费的时间来识别热点。每个工具中都包含其他更高级的分析技术/工具,这些技术/工具可能会对您有进一步的帮助。您根本不需要更改代码,尽管您可能需要检查是否使用调试符号进行了编译和/或是否剥离了二进制文件。您可能还希望远离像-O3
这样的极端优化级别,而坚持使用-O1
、-O2
或-Og
。
PS:与所有优化查询一样,我必须提醒您,在开始优化之前,请始终测量您的性能问题的实际位置。无论您对锁争用有多担心,在花费大量精力试图缓解您可能存在或不存在的锁争用之前,请使用探查器验证您的担忧。
相关文章:
- 如何在没有死锁和/或争用的情况下正确使用 std::mutex C++?
- 并行块(线程清理器)之外的 OpenMP 中的争用条件;误报?
- 如何在C++中创建争用条件
- C++上的手动重置事件(来自 C#)实现:如何避免争用条件
- 作为随机数生成器的争用条件
- 设计低线程争用的多线程聊天服务器
- 智能指针析构函数争用条件
- 尽管互斥锁,线程中的争用条件
- ThreadSanitizer 报告的数据争用
- 在C++中递增和递减全局变量时的争用条件
- 线程清理器检测到数据争用,问题出在哪里?
- 为什么此代码不创建争用条件?
- 防止派生析构函数中的 vtable 数据争用
- __has_include() 和后续 #include 之间是否存在争用条件
- 一次加载整个缓存行以避免争用其中的多个元素
- 什么保证两个不相关的线程中的不同不相关对象没有(不可避免的)争用条件?
- 此工厂方法是否会导致争用条件?
- 争用条件 2 个线程交替
- 为什么此示例中没有使用 if 语句的数据争用?
- 如何在g++/std::mutex下评测锁争用