linux如何關閉numa
linux關閉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 再次確認
linux numa技術說明
隨著科學計算、事務處理對計算機性能要求的不斷提高,SMP(對稱多處理器)系統(tǒng)的應用越來越廣泛,規(guī)模也越來越大,但由于傳統(tǒng)的SMP系統(tǒng)中,所有處理器都共享系統(tǒng)總線,因此當處理器的數(shù)目增大時,系統(tǒng)總線的競爭沖突加大,系統(tǒng)總線將成為瓶頸,可擴展能力受到極大限制。
NUMA(Non-Uniform Memory Access Architecture)技術有效結合了SMP系統(tǒng)易編程性和MPP(大規(guī)模并行)系統(tǒng)易擴展性的特點,較好解決了SMP系統(tǒng)的可擴展性問題。
現(xiàn)在的機器上都是有多個CPU和多個內(nèi)存塊。以前都是將內(nèi)存塊看成是一大塊內(nèi)存,所有CPU到這個共享內(nèi)存的訪問消息是一樣的。這就是之前普遍使用的SMP模型。但是隨著處理器的增加,共享內(nèi)存可能會導致內(nèi)存訪問沖突越來越厲害,且如果內(nèi)存訪問達到瓶頸的時候,性能就不能隨之增加。
NUMA就是這樣的環(huán)境下引入的一個模型。比如一臺機器是有2個處理器,有4個內(nèi)存塊。將1個處理器和兩個內(nèi)存塊合起來,稱為一個NUMA node,這樣這個機器就會有兩個NUMA node。在物理分布上,NUMA node的處理器和內(nèi)存塊的物理距離更小,因此訪問也更快。
比如這臺機器會分左右兩個處理器(cpu1, cpu2),在每個處理器兩邊放兩個內(nèi)存塊(memory1.1, memory1.2, memory2.1,memory2.2),這樣NUMA node1的cpu1訪問memory1.1和memory1.2就比訪問memory2.1和memory2.2更快。所以使用NUMA的模式如果能盡量保證本node內(nèi)的CPU只訪問本node內(nèi)的內(nèi)存塊,那這樣的效率就是最高的。
在運行程序的時候使用numactl -membind和-physcpubind就能制定將這個程序運行在哪個cpu和哪個memory中。當程序只使用一個node資源所需要的時間遠小于使用多個node資源。所以限定程序在numa node中運行是有實際意義的。
但是呢,指定numa也就其弊端,當服務器還有內(nèi)存的時候,發(fā)現(xiàn)它已經(jīng)在開始使用swap了,甚至已經(jīng)導致機器出現(xiàn)停滯的現(xiàn)象。這個就有可能是由于numa的限制,如果一個進程限制它只能使用自己的numa節(jié)點的內(nèi)存,那么當自身numa node內(nèi)存使用光之后,就不會去使用其他numa node的內(nèi)存了,會開始使用swap,甚至更糟的情況,機器沒有設置swap的時候,可能會直接死機。
使用如下命令查看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>
綜上所述得出的結論就是,根據(jù)具體業(yè)務決定NUMA的使用。
1)如果你的程序是會占用大規(guī)模內(nèi)存的,建議關閉numa node的限制,可以使用numactl --interleave=all來取消numa node的限制。否則會導致swap的使用,影響性能。
2)如果你的程序并不占用大內(nèi)存,而是要求更快的程序運行時間。建議選擇限制只訪問本numa node的方法來進行處理。
操作系統(tǒng)層面關閉NUMA
有如下方法:
1)BIOS中關閉NUMA設置
2)在操作系統(tǒng)中關閉,
在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ù)庫層面
1)Oracle數(shù)據(jù)庫層面關閉:
_enable_NUMA_optimization=false (11g中參數(shù)為_enable_NUMA_support)
2)啟動MySQL的時候,關閉NUMA特性:
numactl --interleave=all mysqld
當然,最好的方式是在BIOS中關閉。
vm.swappiness是操作系統(tǒng)控制物理內(nèi)存交換出去的策略。它允許的值是一個百分比的值,最小為0,最大運行100,該值默認為60。vm.swappiness設置為0表示盡量少swap,100表示盡量將inactive的內(nèi)存頁交換出去。
具體的說:當內(nèi)存基本用滿的時候,系統(tǒng)會根據(jù)這個參數(shù)來判斷是把內(nèi)存中很少用到的inactive 內(nèi)存交換出去,還是釋放數(shù)據(jù)的cache。cache中緩存著從磁盤讀出來的數(shù)據(jù),根據(jù)程序的局部性原理,這些數(shù)據(jù)有可能在接下來又要被讀 取;inactive 內(nèi)存顧名思義,就是那些被應用程序映射著,但是 長時間 不用的內(nèi)存。
一般來說,MySQL,特別是InnoDB管理內(nèi)存緩存,它占用的內(nèi)存比較多,不經(jīng)常訪問的內(nèi)存也會不少,這些內(nèi)存如果被Linux錯誤的交換出去了,將浪費很多CPU和IO資源。 InnoDB自己管理緩存,cache的文件數(shù)據(jù)來說占用了內(nèi)存,對InnoDB幾乎沒有任何好處。
所以,在MySQL的服務器上最好設置vm.swappiness=0。
我們可以通過在sysctl.conf中添加一行:
echo vm.swappiness = 0 /etc/sysctl.conf
并使用sysctl -p來使得該參數(shù)生效。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Apache Prefork、Worker和Event三種MPM詳解
這篇文章主要介紹了Apache Prefork、Worker和Event三種MPM詳解,著重介紹了配置參數(shù)部分,需要的朋友可以參考下2014-06-06apache中使用mod_gnutls模塊實現(xiàn)多個SSL站點配置(多個HTTPS協(xié)議的虛擬主機)
這篇文章主要介紹了apache中使用mod_gnutls模塊實現(xiàn)多個SSL站點配置,也就是多個HTTPS協(xié)議的虛擬主機配置方法,需要的朋友可以參考下2014-06-06Linux gzip命令壓縮文件實現(xiàn)原理及代碼實例
這篇文章主要介紹了Linux gzip命令壓縮文件實現(xiàn)原理及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08Linux運維工具Supervisor的安裝使用(進程管理工具)
這篇文章主要介紹了Linux運維工具Supervisor的安裝使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02怎樣給centos系統(tǒng)擴展磁盤分區(qū)的實現(xiàn)方法
這篇文章主要介紹了怎樣給centos系統(tǒng)擴展磁盤分區(qū)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12