linux如何關(guān)閉numa
linux關(guān)閉numa
以下內(nèi)容在Centos8操作系統(tǒng)演示
1、編輯/etc/default/grub
2、在 GRUB_CMDLINE_LINUX里添加 numa=off
3、輸入命令 grub2-mkconfig -o /boot/grub2/grub.cfg 用更改的文件重新生成 /boot/grub2/grub.cfg
重啟生效
4、重啟后查看
cat /proc/cmdline 再次確認(rèn)
linux numa技術(shù)說(shuō)明
隨著科學(xué)計(jì)算、事務(wù)處理對(duì)計(jì)算機(jī)性能要求的不斷提高,SMP(對(duì)稱(chēng)多處理器)系統(tǒng)的應(yīng)用越來(lái)越廣泛,規(guī)模也越來(lái)越大,但由于傳統(tǒng)的SMP系統(tǒng)中,所有處理器都共享系統(tǒng)總線(xiàn),因此當(dāng)處理器的數(shù)目增大時(shí),系統(tǒng)總線(xiàn)的競(jìng)爭(zhēng)沖突加大,系統(tǒng)總線(xiàn)將成為瓶頸,可擴(kuò)展能力受到極大限制。
NUMA(Non-Uniform Memory Access Architecture)技術(shù)有效結(jié)合了SMP系統(tǒng)易編程性和MPP(大規(guī)模并行)系統(tǒng)易擴(kuò)展性的特點(diǎn),較好解決了SMP系統(tǒng)的可擴(kuò)展性問(wèn)題。
現(xiàn)在的機(jī)器上都是有多個(gè)CPU和多個(gè)內(nèi)存塊。以前都是將內(nèi)存塊看成是一大塊內(nèi)存,所有CPU到這個(gè)共享內(nèi)存的訪(fǎng)問(wèn)消息是一樣的。這就是之前普遍使用的SMP模型。但是隨著處理器的增加,共享內(nèi)存可能會(huì)導(dǎo)致內(nèi)存訪(fǎng)問(wèn)沖突越來(lái)越厲害,且如果內(nèi)存訪(fǎng)問(wèn)達(dá)到瓶頸的時(shí)候,性能就不能隨之增加。
NUMA就是這樣的環(huán)境下引入的一個(gè)模型。比如一臺(tái)機(jī)器是有2個(gè)處理器,有4個(gè)內(nèi)存塊。將1個(gè)處理器和兩個(gè)內(nèi)存塊合起來(lái),稱(chēng)為一個(gè)NUMA node,這樣這個(gè)機(jī)器就會(huì)有兩個(gè)NUMA node。在物理分布上,NUMA node的處理器和內(nèi)存塊的物理距離更小,因此訪(fǎng)問(wèn)也更快。
比如這臺(tái)機(jī)器會(huì)分左右兩個(gè)處理器(cpu1, cpu2),在每個(gè)處理器兩邊放兩個(gè)內(nèi)存塊(memory1.1, memory1.2, memory2.1,memory2.2),這樣NUMA node1的cpu1訪(fǎng)問(wèn)memory1.1和memory1.2就比訪(fǎng)問(wèn)memory2.1和memory2.2更快。所以使用NUMA的模式如果能盡量保證本node內(nèi)的CPU只訪(fǎng)問(wèn)本node內(nèi)的內(nèi)存塊,那這樣的效率就是最高的。
在運(yùn)行程序的時(shí)候使用numactl -membind和-physcpubind就能制定將這個(gè)程序運(yùn)行在哪個(gè)cpu和哪個(gè)memory中。當(dāng)程序只使用一個(gè)node資源所需要的時(shí)間遠(yuǎn)小于使用多個(gè)node資源。所以限定程序在numa node中運(yùn)行是有實(shí)際意義的。
但是呢,指定numa也就其弊端,當(dāng)服務(wù)器還有內(nèi)存的時(shí)候,發(fā)現(xiàn)它已經(jīng)在開(kāi)始使用swap了,甚至已經(jīng)導(dǎo)致機(jī)器出現(xiàn)停滯的現(xiàn)象。這個(gè)就有可能是由于numa的限制,如果一個(gè)進(jìn)程限制它只能使用自己的numa節(jié)點(diǎn)的內(nèi)存,那么當(dāng)自身numa node內(nèi)存使用光之后,就不會(huì)去使用其他numa node的內(nèi)存了,會(huì)開(kāi)始使用swap,甚至更糟的情況,機(jī)器沒(méi)有設(shè)置swap的時(shí)候,可能會(huì)直接死機(jī)。
使用如下命令查看NUMA的信息
<span style="color:#333333">[root@web8 ~]# numastat node0 node1 numa_hit 735166632 261638764 numa_miss 12766 1411671 numa_foreign 1411671 12766 interleave_hit 11097 11138 local_node 735166389 261590090 other_node 13009 1460345 [root@web8 ~]# [root@web8 ~]# numactl --show policy: default preferred node: current physcpubind: 0 1 2 3 4 5 6 7 cpubind: 0 1 nodebind: 0 1 membind: 0 1 [root@web8 ~]# numactl --hardware available: 2 nodes (0-1) node 0 cpus: 0 1 2 3 node 0 size: 8113 MB node 0 free: 5567 MB node 1 cpus: 4 5 6 7 node 1 size: 8192 MB node 1 free: 5871 MB node distances: node 0 1 0: 10 21 1: 21 10 [root@web8 ~]# numactl usage: numactl [--interleave=nodes] [--preferred=node] [--physcpubind=cpus] [--cpunodebind=nodes] [--membind=nodes] [--localalloc] command args ... numactl [--show] numactl [--hardware] numactl [--length length] [--offset offset] [--shmmode shmmode] [--strict] [--shmid id] --shm shmkeyfile | --file tmpfsfile [--huge] [--touch] memory policy | --dump | --dump-nodes memory policy is --interleave, --preferred, --membind, --localalloc nodes is a comma delimited list of node numbers or A-B ranges or all. cpus is a comma delimited list of cpu numbers or A-B ranges or all all ranges can be inverted with ! all numbers and ranges can be made cpuset-relative with + the old --cpubind argument is deprecated. use --cpunodebind or --physcpubind instead length can have g (GB), m (MB) or k (KB) suffixes [root@web8 ~]#</span>
綜上所述得出的結(jié)論就是,根據(jù)具體業(yè)務(wù)決定NUMA的使用。
1)如果你的程序是會(huì)占用大規(guī)模內(nèi)存的,建議關(guān)閉numa node的限制,可以使用numactl --interleave=all來(lái)取消numa node的限制。否則會(huì)導(dǎo)致swap的使用,影響性能。
2)如果你的程序并不占用大內(nèi)存,而是要求更快的程序運(yùn)行時(shí)間。建議選擇限制只訪(fǎng)問(wèn)本numa node的方法來(lái)進(jìn)行處理。
操作系統(tǒng)層面關(guān)閉NUMA
有如下方法:
1)BIOS中關(guān)閉NUMA設(shè)置
2)在操作系統(tǒng)中關(guān)閉,
在RHEL 4, RHEL 5, RHEL 6 中,在/boot/grub/grub.conf文件中添加numa=off,如下所示:
title Red Hat Enterprise Linux AS (2.6.9-55.EL) root (hd0,0) kernel /vmlinuz-2.6.9-55.EL ro root=/dev/VolGroup00/LogVol00 rhgb quiet numa=off initrd /initrd-2.6.9-55.EL.img
在RHEL 7 中,需要修改/etc/default/grub文件,添加numa=off,并且需要重建grub,然后重啟OS:
[root@18cRac1 software]# cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rhgb quiet transparent_hugepage=never numa=off" GRUB_DISABLE_RECOVERY="true" [root@18cRac1 software]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-862.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-862.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-4c7b16d0887748f883ee1a722ec96352 Found initrd image: /boot/initramfs-0-rescue-4c7b16d0887748f883ee1a722ec96352.img done [root@18cRac1 software]#
數(shù)據(jù)庫(kù)層面
1)Oracle數(shù)據(jù)庫(kù)層面關(guān)閉:
_enable_NUMA_optimization=false (11g中參數(shù)為_(kāi)enable_NUMA_support)
2)啟動(dòng)MySQL的時(shí)候,關(guān)閉NUMA特性:
numactl --interleave=all mysqld
當(dāng)然,最好的方式是在BIOS中關(guān)閉。
vm.swappiness是操作系統(tǒng)控制物理內(nèi)存交換出去的策略。它允許的值是一個(gè)百分比的值,最小為0,最大運(yùn)行100,該值默認(rèn)為60。vm.swappiness設(shè)置為0表示盡量少swap,100表示盡量將inactive的內(nèi)存頁(yè)交換出去。
具體的說(shuō):當(dāng)內(nèi)存基本用滿(mǎn)的時(shí)候,系統(tǒng)會(huì)根據(jù)這個(gè)參數(shù)來(lái)判斷是把內(nèi)存中很少用到的inactive 內(nèi)存交換出去,還是釋放數(shù)據(jù)的cache。cache中緩存著從磁盤(pán)讀出來(lái)的數(shù)據(jù),根據(jù)程序的局部性原理,這些數(shù)據(jù)有可能在接下來(lái)又要被讀 取;inactive 內(nèi)存顧名思義,就是那些被應(yīng)用程序映射著,但是 長(zhǎng)時(shí)間 不用的內(nèi)存。
一般來(lái)說(shuō),MySQL,特別是InnoDB管理內(nèi)存緩存,它占用的內(nèi)存比較多,不經(jīng)常訪(fǎng)問(wèn)的內(nèi)存也會(huì)不少,這些內(nèi)存如果被Linux錯(cuò)誤的交換出去了,將浪費(fèi)很多CPU和IO資源。 InnoDB自己管理緩存,cache的文件數(shù)據(jù)來(lái)說(shuō)占用了內(nèi)存,對(duì)InnoDB幾乎沒(méi)有任何好處。
所以,在MySQL的服務(wù)器上最好設(shè)置vm.swappiness=0。
我們可以通過(guò)在sysctl.conf中添加一行:
echo vm.swappiness = 0 /etc/sysctl.conf
并使用sysctl -p來(lái)使得該參數(shù)生效。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Apache Prefork、Worker和Event三種MPM詳解
這篇文章主要介紹了Apache Prefork、Worker和Event三種MPM詳解,著重介紹了配置參數(shù)部分,需要的朋友可以參考下2014-06-06apache中使用mod_gnutls模塊實(shí)現(xiàn)多個(gè)SSL站點(diǎn)配置(多個(gè)HTTPS協(xié)議的虛擬主機(jī))
這篇文章主要介紹了apache中使用mod_gnutls模塊實(shí)現(xiàn)多個(gè)SSL站點(diǎn)配置,也就是多個(gè)HTTPS協(xié)議的虛擬主機(jī)配置方法,需要的朋友可以參考下2014-06-06Linux gzip命令壓縮文件實(shí)現(xiàn)原理及代碼實(shí)例
這篇文章主要介紹了Linux gzip命令壓縮文件實(shí)現(xiàn)原理及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08CentOS 離線(xiàn)安裝gcc(版本4.8.2)詳細(xì)介紹
這篇文章主要介紹了CentOS 離線(xiàn)安裝gcc4.8.2詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-01-01Linux 內(nèi)核通用鏈表學(xué)習(xí)小結(jié)
本篇文章主要介紹了Linux 內(nèi)核通用鏈表學(xué)習(xí)小結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Linux運(yùn)維工具Supervisor的安裝使用(進(jìn)程管理工具)
這篇文章主要介紹了Linux運(yùn)維工具Supervisor的安裝使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02怎樣給centos系統(tǒng)擴(kuò)展磁盤(pán)分區(qū)的實(shí)現(xiàn)方法
這篇文章主要介紹了怎樣給centos系統(tǒng)擴(kuò)展磁盤(pán)分區(qū)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12