openstack資源統計實現

來源:互聯網
上載者:User

本文將介紹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 = 0memory_mb_used = CONF.reserved_host_memory_mblocal_gb_used = CONF.reserved_host_disk_mb / 1024free_ram_mb = memory_mb - memory_mb_usedfree_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:3312013-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:3322013-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): 104822013-07-29 17:03:25.557 AUDIT nova.compute.resource_tracker [-] Free disk (GB): 172013-07-29 17:03:25.557 AUDIT nova.compute.resource_tracker [-] Free VCPUS: 2

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.