[openstack]資源統計實現

聲明:

本博客歡迎轉發,但請保留原作者信息!內容系本人學習、研究和總結,如有雷同,實屬榮幸!

原文地址:http://blog.csdn.net/gtt116/article/details/9618403



本文將介紹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: 計算/proc/meminfo中的信息,計算出可用的(MemFree + Buffers + cached),然後用上面的memory_mb - 可用,剩下的就是used
  • local_gb: 通過python的os.statvfg接口查看instance目錄的大小
  • local_gb_used: 和local_gb一樣
  • cpu_info: 從libvirt中獲取
  • disk_available_least: 它和local_gb的區別是local_gb是鏡像的實際大小,此項是計算了虛擬大小之後的剩餘量。所以一定小於(local_gb - local_gb_used)。
  • free_ram_mb: memory_mb - memory_mb_used
  • free_disk_gb: local_gb - local_gb_used


但是,但是! 在nova不是簡單的把這些數據放到數據庫中,而是另外計算了一遍vcpus, memory和local_gb。

在第一次獲取上面的基本數據之後,nova會從數據庫中拿到所有理論上在此宿主機上的instance,然後基於instance重新計算這些資源使用情況。


1. 首先,重設vcpu, memory, local_gb的使用情況。
vcpus_used = 0
memory_mb_used = CONF.reserved_host_memory_mb
local_gb_used = CONF.reserved_host_disk_mb / 1024
free_ram_mb = memory_mb - memory_mb_used
free_disk_gb = local_gb - local_gb_used

2. 然後,找出所有沒有刪除的instance,
根據每一個instance的詳細信息計算vcpus_used,local_gb_used, memory_mb_used,之後再算出free_ram_mb, free_disk_gb


所以在日誌中,可以發現有兩中彙報資源的格式:
格式1.
2013-07-29 17:03:25.486 DEBUG nova.compute.resource_tracker [-] Hypervisor: free ram (MB): 10253 from (pid=17247) _report_hypervisor_resource_view /opt/stack/nova/nova/compute/resource_tracker.py:331
2013-07-29 17:03:25.487 DEBUG nova.compute.resource_tracker [-] Hypervisor: free disk (GB): 13 from (pid=17247) _report_hypervisor_resource_view /opt/stack/nova/nova/compute/resource_tracker.py:332
2013-07-29 17:03:25.487 DEBUG nova.compute.resource_tracker [-] Hypervisor: free VCPUs: 4 from (pid=17247) _report_hypervisor_resource_view /opt/stack/nova/nova/compute/resource_tracker.py:337

格式2.
2013-07-29 17:03:25.556 AUDIT nova.compute.resource_tracker [-] Free ram (MB): 10482
2013-07-29 17:03:25.557 AUDIT nova.compute.resource_tracker [-] Free disk (GB): 17
2013-07-29 17:03:25.557 AUDIT nova.compute.resource_tracker [-] Free VCPUS: 2

格式1中的數據就是直接從libvirt中的資源情況,格式2中的數據是openstack中的資源情況。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章