Numa 将一台计算机划分为多个节点(nodes)。 每个节点内部都有多个CPU怎么看物理内存,节点内部使用一个通用的内存控制器。 通过互连模块连接节点和交换信息。
本节点的所有显存对于本节点的所有CPU都是相同的,而对于其他节点的所有CPU都是不同的。因此,每个CPU都可以访问整个系统内存,访问本地节点的内存速度
最快(不带互联模块),非本地节点访问显存速度慢(需要通过互联模块),即CPU访问显存的速度与距离远近有关节点,距离变为节点。
查看当前numa节点状态:
--
节点(Node)之间的距离表示从节点1访问节点0上的显存需要付出的代价。
Numa内存分配策略有四种:
默认值:始终在本地节点(当前进程运行的节点)上分配。
bind bind:强制分配到指定节点。
交叉:在所有节点或指定节点上交叉分配显存。
优先级:在指定节点上分配,失败则在其他节点上分配。
查看当前系统numa策略:
- 展示
由于numa默认的显存分配策略是先在进程所在CPU的本地显存中分配,会造成CPU节点间显存分配不均衡。
当一个CPU节点显存不足时,会导致swap ,而不是从远程节点分配显存。 这就是交换现象。
为什么MySQL服务器需要关闭numa?
MySQL是一个单进程多线程架构的数据库。 当numa采用默认的显存分配策略时,mysql进程将且只分配给numa的一个节点。
假设本节点本地显存为10GB,MySQL配置显存为20GB。 如果超出节点本地显存的部分(20GB-10GB)Linux将使用swap代替其他节点的math显存。
在这些情况下,可以观察到即使系统的可用显存总量还没有用完,MySQL 进程已经开始使用 swap。
如果单机只运行一个MySQL实例,可以选择关闭numa。 有两种方法可以关闭 nuam:
1、硬件层,在BIOS中设置为关闭;
2. 操作系统内核,启动时设置numa=off。
更改 /etc/grub.conf 文件并将 numa=off 添加到该行;
[root@~]#vim /boot/grub/grub.conf
标题(2.6.32-358.el6.)
根(HD0,0)
/-2.6.32-358.el6.=UUID=-28a5-4dbd-b04a-LANG=en_US.UTF-8=-sun16=auto=pc==off
保存后重启服务器,再次查看numa中只剩下一个节点就成功了:
[root@~]#--
:1个节点(0)
:0
node0大小:
:
节点:
节点0
0:10
输入输出调度
不同场景选择不同的IO调度器:
在完全随机接入的环境下,因为CFQ可能会减少small IO相应的延迟怎么看物理内存,所以应该设置为 ,这样更稳定。
对于 SSD 设备,使用 NOOP 或比默认调度器更好的性能也可以获得。
查看当前系统支持的IO调度算法:
[root@]#dmesg|grep -i
离子环
IO
IO
iocfq()
查看当前设备(/dev/sda)使用的IO调度算法:
[root@]#cat/sys/block/sda/queue/
noop[cfq]
修改当前块设备(/dev/sda)使用的IO调度算法,修改IO调度算法后立即生效:
echo "">>/sys/block/sda/queue/
要永久更改 IO 调度算法,可以通过更改内核引导参数来减少 = 调度算法:
vim/启动/grub/menu.lst
/boot/root=标签=/=
[root@]#vim /etc/grub.conf
标题(2.6.32-358.el6.)
根(HD0,0)
/-2.6.32-358.el6.=UUID=-f49d-49ae-9e63-LANG=en_US.UTF-8=-sun16=auto=pc==off=
交换分区
它是 Linux 的内核参数。 用户控制用于交换页面交换的Linux化学显存的相对权重,将系统的页面缓存从显存中移除的情况降到最低。 取值范围为0~100。 vm.的值越低,Linux内核会尽量不进行交换页操作。 vm. 的值越高,Linux 使用的交换空间就越多。 Linux系统默认值为60,当系统需要显存时,有60%的机会使用swap。 对于大多数桌面系统,设置为100可以提高系统的整体性能; 对于数据库应用服务器,设置为0可以提高数学显存的利用率,从而提高数据库服务的响应性能。
[root@~]#vim /etc/.conf
vm.=0
-p 生效
[root@~]#-a|
vm.=0