我知道可以使用numactrl –interleave将numa模式设置为“interleave”(参见下面的NB)以获取特定进程,但我想知道是否可以将其设置为系统范围的默认值(也就是更改) “制度政策”).例如,如果有内核启动标志来实现这一点?
注意:这里我说的是内核行为,它跨越NUMA节点交错分配的页面 – 而不是BIOS级别的内存控制器行为设置,它跨越高速缓存行
解决方法
如果使用RHEL / CentOS / Fedora,我建议使用
numad守护进程. (
Red Hat paywall link).
虽然我没有太多使用numactl –interleave指令,但似乎你已经确定你的工作量需要它.你能解释为什么会这样,以提供更好的背景吗?
编辑:
似乎大多数推荐显式numactl定义的应用程序要么生成libnuma library call,要么在wrapper script中包含numactl.
对于numad方面,有一个配置选项可以在命令行或/etc/numad.conf中指定…
-K <0|1> This option controls whether numad keeps interleaved memory spread across NUMA nodes,or attempts to merge interleaved memory to local NUMA nodes. The default is to merge interleaved memory. This is the appropriate setting to localize processes in a subset of the system’s NUMA nodes. If you are running a large,single-instance application that allocates inter- leaved memory because the workload will have continuous unpredictable memory access patterns (e.g. a large in-memory database),you might get better results by specifying -K 1 to instruct numad to keep interleaved memory distributed.
有人说,尝试使用numad -K 1 -u X之类的东西,其中X是100 x核心数,可能对此有所帮助.试试吧.