z*******n 发帖数: 1034 | 1 【 以下文字转载自 Programming 讨论区 】
发信人: xybl (xybl), 信区: Programming
标 题: 请教:属于google不到答案的问题
发信站: BBS 未名空间站 (Wed Apr 23 21:49:44 2014, 美东)
linux下的一段代码,single thread,可以独占一个cpu 100%的资源。最主要部分就是
这个loop
for (uint32_t i = 0; i < 10; i++)
{
working(pBuf, bufferNum);
gap(gapLoops);
}
working()会做一些有business 意义的操作,
gap()就是很简单的一个双循环去制造一些时延在两次working()之间。
如果gap()只运行很短的时间,例如34个cpu clock cycles,则working()在iteration
2~10次时用的时间很短,例如,1100个cycles
如果gap()只运行较长时间,两次working()之间的时延有1个second,则working()在
iteration 2~10次的运行时间会double甚至2.5倍,例如会达到2500个cycles
我已经用numactl和chrt让这个程序充分独占一个cpu core,而且用cpuset把其他
threads移开这个core上.
我的问题是:
是什么原因导致了这种差异?
有什么debug的手段/定量地检查这种原因造成的影响?
编辑:
我知道在某些real time kernel或者一些RTOS下,没有这种差异. 但对更大型的复杂程
序则仍然有这种差异. 由于不能理解其中的原因,所以无法调制. 所以我主要想理解为
什么,而不是怎样才能避免这个差异. | z*******n 发帖数: 1034 | 2 在smp上spinlock可以有两种实现,你差disabling interrupts
【在 z*******n 的大作中提到】 : 【 以下文字转载自 Programming 讨论区 】 : 发信人: xybl (xybl), 信区: Programming : 标 题: 请教:属于google不到答案的问题 : 发信站: BBS 未名空间站 (Wed Apr 23 21:49:44 2014, 美东) : linux下的一段代码,single thread,可以独占一个cpu 100%的资源。最主要部分就是 : 这个loop : for (uint32_t i = 0; i < 10; i++) : { : working(pBuf, bufferNum); : gap(gapLoops);
|
|