欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

linux如何關閉numa

 更新時間:2024年05月23日 09:44:59   作者:宇宙超級無敵天下第一爆龍戰(zhàn)士  
這篇文章主要介紹了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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關文章

最新評論