天天看點

openstack節點資源統計

今天跟蹤了下openstack 資源的一個統計情況,記錄下

1.節點資源統計在compute_notes表中

2.利用update_available_resource函數讀取系統  /proc/meminfo中的總共資源以及可用的資源,算出已經使用的資源(這些值跟執行個體是沒多大關系的,完全是系統值)

3.關鍵的屬性 free_ram_mb  free_disk_gb 的值是會随執行個體的建立和删除進行加減的。

update_available_resource調用db.compute_node_update

調用_adjust_compute_node_values_for_utilization

def _adjust_compute_node_values_for_utilization(context, values, session):
    service_ref = service_get(context, values['service_id'], session=session)
    host = service_ref['host']
    ram_mb = values['memory_mb']
    disk_gb = values['local_gb']
    values.update(_get_host_utilization(context, host, ram_mb, disk_gb))

根據執行個體表進行統計
def _get_host_utilization(context, host, ram_mb, disk_gb):
    """Compute the current utilization of a given host."""
    instances = instance_get_all_by_host(context, host)
    vms = len(instances)
    free_ram_mb = ram_mb - FLAGS.reserved_host_memory_mb
    free_disk_gb = disk_gb - (FLAGS.reserved_host_disk_mb * 1024)

    work = 0
    for instance in instances:
        free_ram_mb -= instance.memory_mb
        free_disk_gb -= instance.root_gb
        free_disk_gb -= instance.ephemeral_gb
        if instance.vm_state in [vm_states.BUILDING, vm_states.REBUILDING,
                                 vm_states.MIGRATING, vm_states.RESIZING]:
            work += 1
    return dict(free_ram_mb=free_ram_mb,
                free_disk_gb=free_disk_gb,
                current_workload=work,
                running_vms=vms)
           

通過Capacity_notifier 中的nodify實作,每次執行個體操作的時候都會去更新。

例如删除執行個體:

if ended and event == 'delete':
        vms = -1
        payload = message.get('payload', {})
        free_ram_mb = payload.get('memory_mb', 0)
        free_disk_gb = payload.get('disk_gb', 0)

    LOG.debug("EventType=%(event_type)s -> host %(host)s: "
              "ram %(free_ram_mb)d, disk %(free_disk_gb)d, "
              "work %(work)d, vms%(vms)d" % locals())

    db.api.compute_node_utilization_update(context.get_admin_context(), host,
        free_ram_mb_delta=free_ram_mb, free_disk_gb_delta=free_disk_gb,
        work_delta=work, vm_delta=vms)
           

繼續閱讀