openstack-NUMA排错记录
生成环境中有使用到numa 技术, 但是对numa 知道也是一知半解。如果有理解错误请大家指正啊。
什么是numa ?
非统一内存访问(NUMA)
内存访问时间取决于处理器的内存位置。 在NUMA下,处理器访问它自己的本地存储器的速度比非本地存储器(存储器的地方到另一个处理器之间共享的处理器或存储器)快一些。
因为同一时间只能有一个处理器访问计算机的存储器,所以在一个系统中可能存在多个处理器在等待访问存储器 ,随着CPU核心数的增加,这样的架构难免遇到问题,比如对总线的带宽带来挑战、访问同一块内存的冲突问题 ,延申出来得解决方法:NUMA
numa 注意得问题:
-
默认情况下,内核不会将内存页面从一个 NUMA Node 迁移到另外一个 NUMA Node;
问题得描述:
用户在openstakc 在用一个大的flavor 在指定得compute 节点启虚机失败提示Insufficient compute resources: Requested instance NUMA topology cannot fit the given host NUMA topology 报错 ,检查compute 节点资源充足但是无法创建虚机
排查问题记录:
1. 检查了创建虚机得flavor 调用资源是有多少,检查compute 节点得资源是否满足
检查虚机使用得flavor
nova flavor show test-yk-113
+----------------------------+---------------------------------------------------------------+
| Property | Value |
+----------------------------+---------------------------------------------------------------+
| OS-FLV-DISABLED:disabled | False |
| OS-FLV-EXT-DATA:ephemeral | 0 |
| disk | 20 |
| extra_specs | {"hw:cpu_policy": "dedicated", "hw:mem_page_size": "1048576"} |
| id | 1998 |
| name | test-yk-113 |
| os-flavor-access:is_public | True |
| ram | 20480 |
| rxtx_factor | 1.0 |
| swap | |
| vcpus | 20 |
+----------------------------+---------------------------------------------------------------+
检查compute 节点资源 (没有报错compute 资源截图,为了查看用了一台初始得环境得节点)
nova hypervisor-show conpute节点
hypervisor_type | QEMU |
| hypervisor_version | 2011001 |
| id | 43 |
| local_gb | 6532 |
| local_gb_used | 0 |
| memory_mb | 515075 |
| memory_mb_used | 0 |
| running_vms | 0 |
| service_disabled_reason | None |
| service_host | ca-compute-0-9.internal.ca.fuel |
| service_id | 121 |
| state | up |
| status | enabled |
| vcpus | 68 |
| vcpus_used | 0 |
+---------------------------+------------------------------------------+
2. compute 检查资源充足,但是看到我们flavor 使用得HugePages 检查一下我们大页内存
如果配置了大页内存,检查物理节点上的剩余大页内存是否满足需求,我们flavor 的内存应该是小于HugePages_Free: 20 。 这里的应该是20G
cat /sys/devices/system/node/node*/meminfo | fgrep Huge
Node 0 AnonHugePages: 0 kB
Node 0 HugePages_Total: 50
Node 0 HugePages_Free: 20
Node 0 HugePages_Surp: 0
Node 1 AnonHugePages: 0 kB
Node 1 HugePages_Total: 50
Node 1 HugePages_Free: 14
Node 1 HugePages_Surp: 0
HugePages_Total表示目前总共有多少个大页,
HugePages_Free表示程序运行起来之后还剩余多少个大页,
HugePages_Rsvd表示系统当前总共保留的HugePages数目,更具体点就是指程序已经向系统申请,
但是由于程序还没有实质的HugePages读写操作,因此系统尚未实际分配给程序的HugePages数目。
Hugepagesize表示每个大页的大小,在此为1GB。
3. 修改flavor 大小创建虚机验证
修改flavor 大小小于20G
+----------------------------+---------------------------------------------------------------+
| Property | Value |
+----------------------------+---------------------------------------------------------------+
| OS-FLV-DISABLED:disabled | False |
| OS-FLV-EXT-DATA:ephemeral | 0 |
| disk | 20 |
| extra_specs | {"hw:cpu_policy": "dedicated", "hw:mem_page_size": "1048576"} |
| id | 1998 |
| name | test-yk-113 |
| os-flavor-access:is_public | True |
| ram | 18432 |
| rxtx_factor | 1.0 |
| swap | |
| vcpus | 20 |
+----------------------------+---------------------------------------------------------------+
创建虚机检查(创建虚机命令可以查看openstack 创建实例得随笔)
nova list| grep test-yk
| 9e201369-12ee-4f65-b656-c1210c786f34 | test-yk | ACTIVE | - | Running | test=100.100.0.33
nova show test-yk | grep flavor
| flavor | test-yk-113 (1998)