怎么查看一个计算节点具体的Numa资源分布详情

Posted whd-672701

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么查看一个计算节点具体的Numa资源分布详情相关的知识,希望对你有一定的参考价值。

计算节点使用Numa资源划分后,资源划分的更细了,计算节点整体资源看起来足够,实际可能无法分配所需资源了。

查看一个计算节点Numa资源的方法如下:

 

1:查看巨页内存剩余资源

一般情况下,配置的巨页是在Node0 和 Node1 上平均分配的,如果不是平均分配的,这个和刀片上内存条插入的槽位有关。能平均分配尽量保证内存在两个Numa node上平均分配。

 

 

E9000 G3刀片的物理内存插槽对应numa的关系:内存1~8属于cpu0,也就是node0;9~16属于cpu1,也就是node1.

可以在os下执行numactl命令查看numa状态。

[root@controller15 ~]# numactl --hardware

available: 2 nodes (0-1)

node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 24 25 26 27 28 29 30 31 32 33 34 35

node 0 size: 97918 MB

node 0 free: 80217 MB

node 1 cpus: 12 13 14 15 16 17 18 19 20 21 22 23 36 37 38 39 40 41 42 43 44 45 46 47

node 1 size: 65536 MB

node 1 free: 45193 MB

node distances:

node   0   1 

  0:  10  21 

  1:  21  10 

 

使用numastat -m可以查看每个numa node上的内存分配情况,HugePages_Total 

 

[root@opencos4 /]# numastat -m

Per-node system memory usage (in MBs):

                          Node 0          Node 1           Total

                 --------------- --------------- ---------------

MemTotal                16349.62        16351.00        32700.62

MemFree                   504.89           24.32          529.21

MemUsed                 15844.74        16326.68        32171.41

Active                    514.18           80.14          594.33

Inactive                 1069.77          408.77         1478.54

Active(anon)              421.71           47.61          469.32

Inactive(anon)             64.99           50.09          115.08

Active(file)               92.47           32.54          125.00

Inactive(file)           1004.78          358.68         1363.45

Unevictable               136.22           11.82          148.04

Mlocked                   136.22           11.82          148.04

Dirty                       0.10            0.07            0.17

Writeback                   0.00            0.00            0.00

FilePages                1115.43          400.08         1515.51

Mapped                     54.63            9.45           64.08

AnonPages                 604.70          100.84          705.54

Shmem                       8.68            8.82           17.50

KernelStack                 7.25            2.92           10.17

PageTables                  5.20            5.98           11.17

NFS_Unstable                0.00            0.00            0.00

Bounce                      0.00            0.00            0.00

WritebackTmp                0.00            0.00            0.00

Slab                       97.57           65.51          163.08

SReclaimable               56.91           29.01           85.92

SUnreclaim                 40.66           36.50           77.16

AnonHugePages             408.00           12.00          420.00

HugePages_Total         13312.00        15360.00        28672.00

HugePages_Free              0.00        15360.00        15360.00

HugePages_Surp              0.00            0.00            0.00



查看刀片的整体巨页分配情况:

[root@opencos4 /]# cat /proc/meminfo | grep HugePages

AnonHugePages:   4290560 kB

HugePages_Total:      80

HugePages_Free:       26

HugePages_Rsvd:        1

HugePages_Surp:        0

 

查看NUMA节点下的巨页分配情况:

[root@opencos4 /]# cat /sys/devices/system/node/node*/meminfo | grep Huge

Node 0 AnonHugePages:   2390016 kB

Node 0 HugePages_Total:    40

Node 0 HugePages_Free:     10

Node 0 HugePages_Surp:      0

Node 1 AnonHugePages:   1900544 kB

Node 1 HugePages_Total:    40

Node 1 HugePages_Free:     16

Node 1 HugePages_Surp:      0

 

2:查看Numa Node 上VCPU的占用和分配情况

ssh 到主用控制节点,输入如下命令:

mysql -unova -pnova

use nova;

select host_ip,numa_topology from compute_nodes;

 

显示信息是IP 和 这个节点NumaTopology的相关信息:

 

| 192.168.40.242 | {"nova_object.version": "1.2", "nova_object.changes": ["cells"], "nova_object.name": "NUMATopology", "nova_object.data": {"cells": [{"nova_object.version": "1.2", "nova_object.changes": ["high_performance", "cpu_usage", "memory_usage", "cpuset", "pinned_cpus", "siblings", "memory", "mempages", "id"], "nova_object.name": "NUMACell", "nova_object.data": 

{"cpu_usage": 6, "memory_usage": 18432, "cpuset": [0, 1, 2, 3, 8, 9, 10, 11], "pinned_cpus": [0, 2, 3, 8, 10, 11], "id": 0, "siblings": [[3, 11], [0, 8], [1, 9], [2, 10]], "memory": 24559, 

"mempages": [{"nova_object.version": "1.0", "nova_object.changes": ["total", "size_kb", "used"], "nova_object.name": "NUMAPagesTopology", "nova_object.data": {"total": 6025175, "used": 2621440, "size_kb": 4}, "nova_object.namespace": "nova"}, {"nova_object.version": "1.0", "nova_object.changes": ["total", "size_kb", "used"], "nova_object.name": "NUMAPagesTopology", "nova_object.data": {"total": 8704, "used": 4096, "size_kb": 2048}, "nova_object.namespace": "nova"}], "high_performance": ["dvs_low", "vsg_anti_affinity"]}, "nova_object.namespace": "nova"}, {"nova_object.version": "1.2", "nova_object.changes": ["high_performance", "cpu_usage", "memory_usage", "cpuset", "pinned_cpus", "siblings", "memory", "mempages", "id"], "nova_object.name": "NUMACell", "nova_object.data": 

{"cpu_usage": 0, "memory_usage": 0, "cpuset": [4, 5, 6, 7, 12, 13, 14, 15], "pinned_cpus": [], "id": 1, "siblings": [[7, 15], [4, 12], [5, 13], [6, 14]], "memory": 24544, 

"mempages": [{"nova_object.version": "1.0", "nova_object.changes": ["total", "size_kb", "used"], "nova_object.name": "NUMAPagesTopology", "nova_object.data": {"total": 6021120, "used": 0, "size_kb": 4}, "nova_object.namespace": "nova"}, {"nova_object.version": "1.0", "nova_object.changes": ["total", "size_kb", "used"], "nova_object.name": "NUMAPagesTopology", "nova_object.data": {"total": 8704, "used": 0, "size_kb": 2048}, "nova_object.namespace": "nova"}], "high_performance": ["dvs_low", "vsg_anti_affinity"]}, "nova_object.namespace": "nova"}]}, "nova_object.namespace": "nova"} |


{"cpu_usage": 6, "memory_usage": 18432, "cpuset": [0, 1, 2, 3, 8, 9, 10, 11], "pinned_cpus": [0, 2, 3, 8, 10, 11], "id": 0, "siblings": [[3, 11], [0, 8], [1, 9], [2, 10]], "memory": 24559, 

这个意思就是Node 0 上使用了6 个cpu,内存使用了18G,node 0的CPU是0,1,2,3,8,9,10,11,已经使用的CPU是0,2,3,8,10,11。

{"cpu_usage": 0, "memory_usage": 0, "cpuset": [4, 5, 6, 7, 12, 13, 14, 15], "pinned_cpus": [], "id": 1, "siblings": [[7, 15], [4, 12], [5, 13], [6, 14]], "memory": 24544, 

这个意思就是Node 1 上使用了0 个cpu,内存使用了0G,node 1的CPU是4,5,6,7,12,13,14,15,已经使用的CPU是没有。

 

新版本对于 numa_topology 显示做了优化,看起来更简洁了:

 

[root@Controller0115 ~(keystone_admin)]# nova hypervisor-show 1 | grep  numa_topology

| numa_topology             | [

{

numa 0

numa 0 上虚拟机可以使用的CPU总数 :"cpuset": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35], 

numa 0 上CPU的亲和关系    :"siblings": [[4, 28], [1, 25], [9, 33], [5, 29], [10, 34], [8, 32], [7, 31], [11, 35], [6, 30], [3, 27], [2, 26]], 

numa 0 上已经使用的CPU    :"pinned_cpus": [32, 33, 34, 3, 4, 5, 6, 7, 8, 9, 10, 11, 35, 1, 25, 27, 28, 29, 30, 31], 

numa 0 上已经使用的RAM    :"id": 0, "mempages": [{"total": 20348525, "used": 0, "size_kb": 4}, {"total": 70, "used": 64, "size_kb": 1048576}]}, 

巨页一般是1G的,看后面那个1G类型的

 

下面是numa 1的

numa 1

{"cpuset": [36, 40, 41, 42, 43, 12, 45, 46, 44, 16, 17, 18, 19, 20, 21, 22, 23, 47], 

"siblings": [[20, 44], [17, 41], [16, 40], [21, 45], [22, 46], [12, 36], [18, 42], [23, 47], [19, 43]], 

"pinned_cpus": [40, 41, 44, 45, 16, 17, 20, 21], 

"id": 1, "mempages": [{"total": 20447232, "used": 0, "size_kb": 4}, {"total": 70, "used": 44, "size_kb": 1048576}]}] |

 

 

 

3:创建虚拟机的时候,虚拟机的规格,flavor的设置:

技术图片

创建dvs网络的虚拟机,

mem_page_size 必须 配置为 large ,不能配置 any

numa_nodes,不配置的时候,默认是1,和配置为1是一样的效果,表示虚拟机只能使用一个numa node的资源,如果所有节点1个numa node的资源都不够,虚拟机就会部署失败,这也就是为什么在部署DVS虚拟机的时候,物理机看起来资源很多,但是部署虚拟机失败的原因。虚拟机的VCPU 和内存都在一个numa node上的时候,虚拟机性能最高。

numa_nodes = 2,表示虚拟机可以跨numa node部署,默认情况下虚拟机的CPU 和内存平均分配在两个numa node上。

 

网元配置这些参数都是在网元的模板info文件里面配置的。

虚拟机绑核:hw:cpu_policy=dedicated

虚拟机使用巨页:hw:mem_page_size=large

虚拟机跨Numa node部署:hw:numa_nodes=2

如果需要手工配置可以使用如下命令:

nova flavor-key flavorUUID set hw:cpu_policy=dedicated hw:mem_page_size=large hw:numa_nodes=2

取消某个属性的配置如下:

nova flavor-key flavorUUID unset hw:cpu_policy

 

4:

numa_nodes=2 的情况下,比如要创建一个16核64G内存的虚拟机,要求每一个numa node至少有8个空闲的核和32G空闲的巨页,如果其中一个numa node上的资源少于上面的要求,且两个numa node的总资源是足够的,这种情况下虚拟机也是无法在这个物理机上创建成功的。

如果配置  numa_nodes=2 ,物理节点两个numa nodes上cpu总数是够的,vcpu 或者 内存 不是均分在两个numa nodes上,则需要对vcpu或者内存 配置进行调整。

 

比如一个虚拟机需要16个cpu ,64G内存,numa node0上vcpu只有6个,内存80G,numa node1上有14个,内存30G,单numa node都不够,需要两个合起来才足够,而vcpu/内存还不是均分在两个node上,如果要分配16个vcpu,64G内存,就要进行微调,调整参数如下:

hw:numa_cpus.0:如果此项没有配置,则虚机内部的cpuset按照numa_nodes数量和vcpu数量平均分配。即物理机上单个numa节点内承接vcpu/numa_nodes的数量个vcpu。 如果此项没有配置,则如果hw:numa_mem.0 有配置则报错。如果此项有配置,则hw:numa_mem也必须一起配置。

hw:numa_mem.0:和hw:numa_cpus.0配对使用,用于指明物理机某个numa节点上承接的虚机的内存数量。请注意此处的mem累加后不得超过flavor内存。这个0表示numa节点编号,这个编号并不是说0就一定部署在物理机的0号numa节点上,而仅仅用来说明一个逻辑编号。

调整的方法如下(可分配的内存和vcpu可以通过上面第二步获取):

我们可以在node 0 上分配6个vcpu,40G内存;在node 1上分配10个vcpu,24G内存。

nova flavor-key flavorUUID set hw:numa_mem.0=40960 hw:numa_mem.1=24576 hw:numa_cpus.0=0,1,2,3,4,5, hw:numa_cpus.1=6,7,8,9,10,11,12,13,14,15

示例 1

技术图片

然后再次创建虚拟机,这个大规格的虚拟机创建成功。

 

 

示例2:

计算节点 

numa 0 剩余10个cpu,40G巨页

numa 1 剩余22个cpu,88G巨页

需要创建一个32核128G的虚拟机示例

 

nova flavor-key 60e636ce-3336-4043-a1af-6fdd4dbcedb0 set hw:numa_mem.0=40960 hw:numa_mem.1=90112 hw:numa_cpus.0="0-9" hw:numa_cpus.1="10-31"

 

 

技术图片

以上是关于怎么查看一个计算节点具体的Numa资源分布详情的主要内容,如果未能解决你的问题,请参考以下文章

kubernetes 查看资源详细信息(describe)

linux如何计算两个numa节点之间的numa距离(任何numa库的内部逻辑,如libnuma..etc)?

怎么查看kafka集群中所有broker节点

跨NUMA Hammerdb总是只跑到一个NUMA节点

kafka 怎样查看kafka状态

怎么查看kafka集群中所有的broker节点