请帮助激活 MariaDB 的 NUMA 节点交错。
在 CentOS Linux 版本 7.3.1611 上使用 MariaDB 10.1.21。
根据说明https://mariadb.com/kb/en/mariadb/systemd/添加 /etc/systemd/system/mariadb.service.d/custom.conf:
[Service]
ExecStart=/usr/bin/numactl --interleave=all /usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION
/var/log/messages 显示 numactl 被调用:
Feb 23 10:40:46 host systemd: Starting MariaDB database server...
Feb 23 10:40:46 host numactl: 2017-02-23 10:40:46 140580844599552 [Note] /usr/sbin/mysqld (mysqld 10.1.21-MariaDB) starting as process 37349 ...
Feb 23 10:40:51 host systemd: Started MariaDB database server.
但 numastat 显示 NUMA 节点交错不起作用:
[root@host ~]# numastat -p $(pidof mysqld)
Per-node process memory usage (in MBs) for PID 37349 (mysqld)
Node 0 Node 1 Total
--------------- --------------- ---------------
Huge 0.00 0.00 0.00
Heap 0.00 0.00 0.00
Stack 2711.53 1330.39 4041.92
Private 23868.98 6126.55 29995.54
---------------- --------------- --------------- ---------------
Total 26580.51 7456.95 34037.46
如您所见,节点 0 和节点 1 之间存在巨大的不平衡。
答案1
我建议首先检查该政策是否已真正实施。检查是否/proc/…PID-of-interest…/numa_maps
有标记为 的条目interleave:
。
例如:
7ffecdccd000 interleave:0-1 stack anon=8 dirty=8 active=1 N0=4 N1=4 kernelpagesize_kB=4
(我认为你不会发现这样的情况。)
我能想到的第二件事是:
[mysqld]
…
innodb_numa_interleave = on
…
[mysqld_safe]
…
numa_interleave = on
…
— 至少 Percona 的脚本正在处理前一种设置,如果您没有明确指定它们,它们将被设置为默认值。