|
本帖最后由 StormSpirts 于 2022-8-21 09:24 编辑
对于双路服务器,Linux下通常不存在线程调度的问题,然而Windows对线程调度的优化不尽人意。
我使用双路E5 2696v3工作站,在Win10平台上进行GROMACS和ORCA计算,以前经常遇到两种问题,不胜其扰:
1. Windows把所有任务都压在一个CPU上,而另一个CPU几乎空载。
如果想通过手动调任务管理器的相关性解决,GROMACS只有一个进程,没法调;ORCA的scf进程频繁刷新,手动调也不现实。
2. 高负载下,线程之间相互干扰,系统反应明显变慢,影响办公。如果此时叠加了第一种情况,还时而死机。
Process Lasso对这两个问题有较好的解决方案,其具有如下功能:
1. Probalance
通过动态调整进程的优先级,抑制部分高资源消耗的进程,给前台程序让路,尽可能避免系统不响应情况的出现。开了这个功能以后,即使机器的负载很大,日常的办公都基本不受影响,高负载下系统卡死的现象再也没有出现。
2. Group Extender
Windows 2008 R2引入了处理器组的功能以支持拥有64核以上的机器。当核心数超过64个时,系统会建立多个处理器组,程序会被限制在一个处理器组内运行。而Group Extender可以允许程序跨越处理器组的限制,提高运行的效率。
举个例子:
在48核工作站上,只有1个处理组,程序可以跑满48核;而在72核工作站上,系统会建立2个处理器组,每个处理器组关联36个核心,因此程序运行时反而只能调用36个核心,此时想要让程度调用72个核心就必须使用Group Extender。
测试一下:
关闭Group Extender,所有orca_scf_mpi.exe的CPU groups都是1,任务基本都堆在一个CPU上。
关闭Group Extender
开启Group Extender,所有orca_scfhess_mpi.exe的CPU groups已经变成了0,1,进程可以跨越系统默认的处理器组在两个CPU上分配。软件支持通配符匹配进程,图中的orca*代表对所有orca开头的进程生效。Group Extender对单进程的GROMACS和VMware也有效。
然而最终的分配也不是100%平均分配的,估计和orca本身的调度也有关系。
开启Group Extender
3. Instance balancer
Instance balancer可以控制分配给每个任务的核心数,这个功能有点核心绑定的意思。
其中,Dynamic core count模式可以将所有核心均分给选定的进程。
Fixed core count模式可以给选定的进程只分配固定数量的核心。
Process Lasso的功能很强大,涉及CPU、内存、I/O和电源管理等等,我介绍的只是比较常用的功能,大家有兴趣可以去官网研究一下,各取所需:
Process Lasso的说明文档
https://bitsum.com/processlasso-docs/#groupextend
Windows处理器组的介绍
https://bitsum.com/general/the-6 ... groups-and-windows/
|
评分 Rate
-
查看全部评分 View all ratings
|