- 主题:请教一下怎么查多线程的瓶颈 (转载)
【 以下文字转载自 CProgramming 讨论区 】
发信人: il15 (il15), 信区: CProgramming
标 题: 请教一下怎么查多线程的瓶颈
发信站: 水木社区 (Thu Nov 11 15:23:46 2021), 站内
举个例子:一个数值计算的测试程序,单线程的情况下,运算2百万次,计算的部分大约用时5s(总用时稍微多点)。然后对计算部分用了8个线程,大概提高了接近4倍。但是总的cpu时间(包括了每个线程的用时)要10s多点,把每个线程的用时大出来,大概是每个线程1.2s。
然后有两个问题想请教一下:
一是多线程的情况下,所有线程加在一起的总用时比单线程多了近一倍,这有可能是什么原因引起的呢?
二是有什么profiling的工具可以去查这个瓶颈?
--
FROM 183.8.129.*
同步吧或者加载资源的一些io瓶颈?
【 在 il15 的大作中提到: 】
: 【 以下文字转载自 CProgramming 讨论区 】
: 发信人: il15 (il15), 信区: CProgramming
: 标 题: 请教一下怎么查多线程的瓶颈
: 发信站: 水木社区 (Thu Nov 11 15:23:46 2021), 站内
:
: 举个例子:一
: ..................
发自「今日水木 on M2007J17C」
--
FROM 222.129.54.*
没有IO;我也查了一下同步的时间,用时不超过计算的千分之5,
另外,我比较的那个每个线程的时间就是它计算的时间,还不包括同步之类的。
【 在 GoGoRoger 的大作中提到: 】
: 同步吧或者加载资源的一些io瓶颈?
: 发自「今日水木 on M2007J17C」
--
FROM 183.8.129.*
Linux下可以用perf啥的看看吧?
不太清楚你的硬件状况,内存了,CPU了,都可能吧?能确定每个线程都跑在独立的物理核上吗?
【 在 il15 的大作中提到: 】
: 没有IO;我也查了一下同步的时间,用时不超过计算的千分之5,
: 另外,我比较的那个每个线程的时间就是它计算的时间,还不包括同步之类的。
:
--
FROM 222.129.54.*
“能确定每个线程都跑在独立的物理核上”:对,我也怀疑这个。
是个8核的笔记本,然后超线程虚拟出16个核。我装的linux的虚拟机,用了8个核。不知道这里是不是有可能才用了4个独立的核。
等下关超线程再测试看看。
【 在 GoGoRoger 的大作中提到: 】
: Linux下可以用perf啥的看看吧?
: 不太清楚你的硬件状况,内存了,CPU了,都可能吧?能确定每个线程都跑在独立的物理核上吗?
:
--
FROM 183.8.129.*
这不是很正常吗, 直接在 windows 下跑跑试试
线程多了,切换的代价也高了
【 在 il15 (il15) 的大作中提到: 】
: “能确定每个线程都跑在独立的物理核上”:对,我也怀疑这个。
: 是个8核的笔记本,然后超线程虚拟出16个核。我装的linux的虚拟机,用了8个核。不知道这里是不是有可能才用了4个独立的核。
: 等下关超线程再测试看看。
: ...................
--
FROM 221.219.211.*
工具的话,Intel(R) VTune(TM) Profiler,跨平台的。
linux上有时用火焰图,不过一般是找耗时多的,不一定适用你这个场景。
一般搞性能测试,都不用虚拟机,不是很准倒是。
--
修改:z16166 FROM 114.245.195.*
FROM 114.245.195.*
别在虚拟机上面测试啊。核心多的话,guest 和 host 内核调度非常混合的。
关键是虚拟机内存页 miss 的代价非常之高。
出现任何测试结果我认为都是可能的。
性能测试要搞专门的环境。固化非主要影响因子。
【 在 il15 (il15) 的大作中提到: 】
: “能确定每个线程都跑在独立的物理核上”:对,我也怀疑这个。
: 是个8核的笔记本,然后超线程虚拟出16个核。我装的linux的虚拟机,用了8个核。不知道这里是不是有可能才用了4个独立的核。
: 等下关超线程再测试看看。
: ...................
--
修改:hgoldfish FROM 112.47.122.*
FROM 140.224.35.*
虚拟机不行,有额外的开销,在多线程情况下可能更严重
另外要检查affinity,并把每个工作线程分别绑定到各个cpu核心,最好关掉超线程再测试
【 在 il15 的大作中提到: 】
: “能确定每个线程都跑在独立的物理核上”:对,我也怀疑这个。
: 是个8核的笔记本,然后超线程虚拟出16个核。我装的linux的虚拟机,用了8个核。不知道这里是不是有可能才用了4个独立的核。
: 等下关超线程再测试看看。
: ...................
--
FROM 221.218.209.*