linux – NUMA机器共享库瓶颈
我正在使用NUMA机器(SGI UV 1000)同时运行大量数值模拟,每个都是使用4个内核的OpenMP作业.然而,运行超过约100个这些工作会导致重大的性能下降.我们关于为什么发生这种情况的理论是软件所需的共享库只能加载到机器的全局内存中,并且随着所有进程都访问单个节点上的内存,系统正在经历通信瓶颈.
这是一个旧的软件,限于没有修改的范围,静态make选项不会静态链接所有需要的库.最方便的解决方案,从我可以看到,将以某种方式强制系统加载每个进程或节点上所需的共享库的新副本(我正在运行3个进程),但是我没有能够找出如何做到这一点.任何人都可以告诉我如何做到这一点,还有其他有关如何解决这个问题的其他建议? 解决方法
正如我所知,这是Linux的当前行为.共享库仅加载到一组物理内存,仅在单个节点上.
正如在评论中所说,库中的指令应该被缓存在每个处理器中,所以只有当存储库中的活动代码从缓存中擦除(例如有很多不同的代码工作)时才会有瓶颈. 您应该通过使用硬件性能计数器(来自缓存的缺失,节点间NUMA内存访问计数)来验证您的理论. 在NUMA上存储一些数据的机制,在NUMA上称为“复制”.内核,可执行文件或其共享库的代码称为文本.所以,你想要的是“共享库的文本复制”.我认为文本复制对于内核代码来说更容易. 我从2003年可以找到一些实验性的补丁来进行这样的文本复制,例如 这种技术的更现代(2007)变体是由SUSE的Nick Piggin复制pagecache:http://lwn.net/Articles/223056/(mm:replicated pagecache).还有关于他的方法的演示文稿:http://ondioline.org/~paul/pagecachereplication.pdf.这将是有效的,因为所有的文件都存储在pagecache,可执行文件和共享库中.但即使是这个补丁,我在当前的内核中找不到它. 在SGI上有更多的复制需求(他们有更多的NUMA机器,典型的内核开发人员),所以可以添加一些补丁.有一个SGI的NUMA应用程序调整手册:http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/linux/bks/SGI_Developer/books/LX_86_AppTune/sgi_html/ch05.html,它在“使用dplace命令”一节中提到了dplace实用程序.它具有文本复制选项:
男人(1):http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=linux&db=man&fname=/usr/share/catman/man1/dplace.1.html 男人(5):http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=linux&db=man&fname=/usr/share/catman/man5/dplace.5.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在Linux上构建VTK时收到错误“GLintptr尚未声明”
- linux – Symbolic Link和LAMPP htdocs
- networking – linux命令通过使用netstat和iptables来防止d
- Linux---crond任务调度
- 源码安装php时出现Sorry, I cannot run apxs. Possible rea
- linux – php-fpm:无法识别的服务
- paramiko:实现ssh协议,对linux服务器资源的访问
- redhat – 在RHEL6.2上安装perl-Time-HiRes会产生perl依赖性
- linux – 文件名最后修改日期shell在脚本
- linux – MOVDQU指令页边界