广告位联系
返回顶部
分享到

linux关闭numa的教程

linux 来源:互联网 作者:佚名 发布时间:2024-05-23 21:40:13 人浏览
摘要

linux关闭numa 以下内容在Centos8操作系统演示 1、编辑/etc/default/grub 2、在 GRUB_CMDLINE_LINUX里添加 numa=off 3、输入命令 grub2-mkconfig -o /boot/grub2/grub.cfg 用更改的文件重新生成 /boot/grub2/grub.cfg 重启生效

linux关闭numa

以下内容在Centos8操作系统演示

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(对称多处理器)系统的应用越来越广泛,规模也越来越大,但由于传统的SMP系统中,所有处理器都共享系统总线,因此当处理器的数目增大时,系统总线的竞争冲突加大,系统总线将成为瓶颈,可扩展能力受到极大限制。

NUMA(Non-Uniform Memory Access Architecture)技术有效结合了SMP系统易编程性和MPP(大规模并行)系统易扩展性的特点,较好解决了SMP系统的可扩展性问题。

现在的机器上都是有多个CPU和多个内存块。以前都是将内存块看成是一大块内存,所有CPU到这个共享内存的访问消息是一样的。这就是之前普遍使用的SMP模型。但是随着处理器的增加,共享内存可能会导致内存访问冲突越来越厉害,且如果内存访问达到瓶颈的时候,性能就不能随之增加。

NUMA就是这样的环境下引入的一个模型。比如一台机器是有2个处理器,有4个内存块。将1个处理器和两个内存块合起来,称为一个NUMA node,这样这个机器就会有两个NUMA node。在物理分布上,NUMA node的处理器和内存块的物理距离更小,因此访问也更快。

比如这台机器会分左右两个处理器(cpu1, cpu2),在每个处理器两边放两个内存块(memory1.1, memory1.2, memory2.1,memory2.2),这样NUMA node1的cpu1访问memory1.1和memory1.2就比访问memory2.1和memory2.2更快。所以使用NUMA的模式如果能尽量保证本node内的CPU只访问本node内的内存块,那这样的效率就是最高的。

在运行程序的时候使用numactl -membind和-physcpubind就能制定将这个程序运行在哪个cpu和哪个memory中。当程序只使用一个node资源所需要的时间远小于使用多个node资源。所以限定程序在numa node中运行是有实际意义的。

但是呢,指定numa也就其弊端,当服务器还有内存的时候,发现它已经在开始使用swap了,甚至已经导致机器出现停滞的现象。这个就有可能是由于numa的限制,如果一个进程限制它只能使用自己的numa节点的内存,那么当自身numa node内存使用光之后,就不会去使用其他numa node的内存了,会开始使用swap,甚至更糟的情况,机器没有设置swap的时候,可能会直接死机。

使用如下命令查看NUMA的信息

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

<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>

综上所述得出的结论就是,根据具体业务决定NUMA的使用。

1)如果你的程序是会占用大规模内存的,建议关闭numa node的限制,可以使用numactl --interleave=all来取消numa node的限制。否则会导致swap的使用,影响性能。

2)如果你的程序并不占用大内存,而是要求更快的程序运行时间。建议选择限制只访问本numa node的方法来进行处理。

操作系统层面关闭NUMA

有如下方法:

1)BIOS中关闭NUMA设置

2)在操作系统中关闭,

在RHEL 4, RHEL 5, RHEL 6 中,在/boot/grub/grub.conf文件中添加numa=off,如下所示:

1

2

3

4

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:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[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]#

数据库层面

1)Oracle数据库层面关闭:

1

_enable_NUMA_optimization=false  (11g中参数为_enable_NUMA_support)

2)启动MySQL的时候,关闭NUMA特性:

1

numactl --interleave=all mysqld

当然,最好的方式是在BIOS中关闭。

vm.swappiness是操作系统控制物理内存交换出去的策略。它允许的值是一个百分比的值,最小为0,最大运行100,该值默认为60。vm.swappiness设置为0表示尽量少swap,100表示尽量将inactive的内存页交换出去。

具体的说:当内存基本用满的时候,系统会根据这个参数来判断是把内存中很少用到的inactive 内存交换出去,还是释放数据的cache。cache中缓存着从磁盘读出来的数据,根据程序的局部性原理,这些数据有可能在接下来又要被读 取;inactive 内存顾名思义,就是那些被应用程序映射着,但是 长时间 不用的内存。

一般来说,MySQL,特别是InnoDB管理内存缓存,它占用的内存比较多,不经常访问的内存也会不少,这些内存如果被Linux错误的交换出去了,将浪费很多CPU和IO资源。 InnoDB自己管理缓存,cache的文件数据来说占用了内存,对InnoDB几乎没有任何好处。

所以,在MySQL的服务器上最好设置vm.swappiness=0。

我们可以通过在sysctl.conf中添加一行:

1

echo vm.swappiness = 0 /etc/sysctl.conf

并使用sysctl -p来使得该参数生效。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计