本文将介绍openstack(grizzly)版本中nova是如何统计宿主机可用资源的,以便debug和运维openstack。
在openstack中,对虚拟机的管理有两层:openstack自身和Hypervisor(libvirt)。由于不同的层次可能导致数据不统一,比如vm在libvirt中,但是不在openstack中,或者相反。这时的资源统计要如何处理?openstack的做法是两者都统计,但是真正列入考虑范围(写入数据库)的是openstack自身统计出的结果。接下来将详细介绍openstack是如何进行资源统计的。
openstack关注宿主机的如下资源:
vcpus
vcpus_used
memory_mb
memory_mb_used
local_gb
local_gb_used
cpu_info
disk_available_least
free_ram_mb
free_disk_gb
这些数据在periodic task中会定时更新到数据库中,默认是60s一次。接下来详细说明这些的数据是如何获取的
核心的代码在nova/virt/libvirt/driver.py:LibvirtDriver.get_available_resource()中,有兴趣的同学可以自己看代码,
这里只列出各个资源是如何统计的。vcpus: 通过libvirt的nodeinfo直接获取
vcpus_used: 通过libvirt列出所有的vm,然后遍历叠加所有vm的vcpus
memory_mb: 通过libvirt nodeinfo直接获取
memory_mb_used: 计算/pro