现在的位置: 首页 > 综合 > 正文

openstack节点资源统计

2013年08月29日 ⁄ 综合 ⁄ 共 1806字 ⁄ 字号 评论关闭

今天跟踪了下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)

抱歉!评论已关闭.