我需要观察多队列/超线程中进程占用的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。
的问题:
数字A,Bi,Ci,Di之间的关系是什么?
A小于Bi吗?多少? Ci,Di怎么样?
他们之间的时间是不同的? Ci,Di怎么样?
答案 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.1
和2
之间变化,具体取决于您的应用程序(某些处理器子部分是超线程的,而其他部分则不是)。它是根据类似的统计数据计算的,我在这里使用问题的符号: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)。