gpt4 book ai didi

c++ - tcmalloc 巨大的性能差异

转载 作者:行者123 更新时间:2023-11-28 06:07:33 26 4
gpt4 key购买 nike

我们的多线程服务器有数百个连接线程,负责 IO 处理和回复传入请求。

还有另一个异步线程运行相对繁重的任务,不时有很多分配(比如每隔几秒)。

一旦我将该线程转换为一个小线程池(即这些任务现在每次都从不同的线程运行),我们的服务器通常具有相同的 CPU 使用率,但它可能突然达到状态,因为所有操作的分配都需要更多的时间和服务器的整体 CPU 使用率几乎翻了一番,从 2 核增加到 3.7 核。

到目前为止,我的主要理论是我以某种方式更改了 tcmalloc 库的访问模式,这会导致随机 CPU 提升。为了证实这一理论,我应该在 tcmalloc 统计信息中查看什么?现在从不同线程(但不是同时)运行的相同代码是否会导致 tcmalloc 从中央缓存分配的资源多于从线程缓存分配的资源?

最佳答案

正如一些评论者所建议的那样,错误共享可能是问题所在。查找虚假共享很困难,而且当前工具也没有很好地支持它。我的研究小组发表了关于该主题的这些研究论文 - 至少,它们很好地介绍了虚假分享问题及其为何如此隐蔽。

GitHub 上提供了与这些研究论文对应的工具:Sheriff , Predator .

虽然您可以尝试使用其中一种工具来查找问题,但最简单的方法是提供 Hoard一试。 Hoard 是一种快速、可扩展的 malloc 替代品,其设计降低了分配器引起的错误共享的风险。如果用 Hoard 替换 tcmalloc 不能解决您的问题,那么寻求其他途径可能是有意义的。

关于c++ - tcmalloc 巨大的性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32089808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com