多核/超线程上的CPU时间

时间:2013-12-13 11:27:36

标签: cpu-usage multicore hyperthreading

我需要观察多队列/超线程中进程占用的CPU时间。假设一个Xeon,Opteron等

假设我有4个核心,超线程,意味着8个“虚拟”核心。 让我想运行的程序观察它花了多少CPU时间。

  • 如果我在我的cpu中运行进程X,我会得到CPU时间A.假设A超过5分钟。

  • 如果我运行相同进程X的8个副本,我将获得CPU时间B1,B2 ......,B8。

  • 如果我运行7个相同进程X的副本,我将获得CPU时间C1,C2 ......,C7。

  • 如果我运行相同进程X的4个副本,我将获得CPU时间D1,D2 ......,D4。

的问题:

  1. 数字A,Bi,Ci,Di之间的关系是什么?

  2. A小于Bi吗?多少? Ci,Di怎么样?

  3. 他们之间的时间是不同的? Ci,Di怎么样?

1 个答案:

答案 0 :(得分:1)

数字A,Bi,Ci,Di之间的关系是什么?

期待D1=D2=D3=D4=A*1,除非你有二级缓存问题(冲突,错误......),你的数字会略大于1而不是1。

期待B1=B2=B3=B4=...=B8=A*1.3。数字1.3可能会在1.12之间变化,具体取决于您的应用程序(某些处理器子部分是超线程的,而其他部分则不是)。它是根据类似的统计数据计算的,我在这里使用问题的符号:D = 23秒,A = 18秒,根据一个私人论坛。无螺纹进程在没有输入/输出的情况下进行整数计算。确切的应用是在动词Steenrod的代数中检查Adem系数(不知道它是什么;设置为(2n + e,n),n = 20)。

对于sevent进程(Cs),如果你assign每个进程到一个核心(在linux上使用/ usr / bin / htop),那么你将拥有一个进程(例如C5)具有与A相同的执行时间,其他(在我的示例中,C1,C2,C3,C4,C6,C7)将具有与Ds相同的值。如果您没有将进程分配给核心,并且您的进程持续足以让操作系统在核心之间进行平衡,那么它们将会收敛到C的平均值。

Are times Bi different between them? What about Ci, Di?

取决于您的操作系统调度程序及其配置。来自linux的/bin/top显示的百分比是作弊,它将显示A,B,C和D的近100%。

要评估性能,请不要forget / usr / bin / nettop(以及变体nethogs,nmon,iftop,iptraf),iotop(以及变体iostat,latencytop)和collectl(+ colmux)和sar (+ sag,+ sadf)。