6 linux cpu performance cpu-architecture cpu-cache
可以使用sched_setaffinity()调用将进程固定到一组特定的CPU内核.手册页说:
Restricting a process to run on a single CPU also avoids the
performance cost caused by the cache invalidation that occurs when a process
ceases to execute on one CPU and then recommences execution on a different
CPU.
Run Code Online (Sandbox Code Playgroud)
这几乎是一个显而易见的事情(或不是?).对我来说不那么明显的是 -
将LWP固定到特定CPU或SMP节点会降低缓存一致性总线流量吗?例如,由于进程正在运行固定,因此其他CPU不应修改其专用内存,因此只有属于同一SMP节点的CPU应保持高速缓存一致性.
srk*_*ing 10
对于您描述的固定流程案例,不应存在CPU套接字到套接字一致性流量.现代Xeon平台在芯片组中实现了snoop过滤.监听过滤器指示远程套接字何时不能使用有问题的缓存行,从而避免向该套接字发送缓存无效消息的需要.
你可以自己测量一下.Xeon处理器实现了各种各样的缓存统计计数器.您可以使用rdpmc指令读取自己代码中的计数器,或者只使用像VTune这样的产品.仅供参考,使用rdpmc非常精确,但有点棘手,因为你必须在CR4中初始设置一个位以允许在用户模式下使用该指令.
- 编辑 -
对于使用QPI链接的55xx系列CPU,我的上述答案已经过时.这些链接直接互连CPU插槽,无需插入芯片组,如:http: //ark.intel.com/products/37111/Intel-Xeon-Processor-X5570-%288M-Cache-2_93-GHz-6_40-GTs-Intel -qpi 29%
但是,由于每个CPU中的L3缓存都是包含在内的,因此仅当本地L3缓存指示该线路在本地套接字中无处时,才会发生对QPI链路的窥探.同样,远程插座的L3可以快速响应交叉监听,而不会打扰核心,假设线路不在那里.
因此,包容性L3缓存应该最小化插槽间一致性开销,这不是由于您的情况下的芯片组监听过滤器.
如果您在NUMA系统(如Opteron服务器或Itanium)上运行,它是有意义的,但您必须确保将进程绑定到从其分配内存的同一NUMA节点.否则,这是一个反优化.应该注意的是,任何具有NUMA感知的操作系统都会尝试将执行和内存保留在同一个节点中,如果你根本不告诉它任何东西,那就是它的一些特性(一些老版本的Windows相当差)在这,但我不希望最近Linux的情况.
如果您不在NUMA系统上运行,将进程绑定到特定核心是您可以做的最愚蠢的事情.操作系统不会让CPU之间的进程反弹以获得乐趣,如果一个进程必须移动到另一个CPU,那么这并不理想,但世界也不会结束.它很少发生,当它发生时,你几乎无法分辨.
另一方面,如果进程绑定到CPU并且另一个CPU处于空闲状态,则操作系统无法使用它......这是100%可用的处理能力.
| 归档时间: |
|
| 查看次数: |
1829 次 |
| 最近记录: |