X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=vswitchd%2Fsystem-stats.c;h=4dc2723c23521b9a50cba1ba0f3aaf45a9de4c60;hb=57c8677b511908b3120df3cbf44244423cfefc34;hp=cecd8f482cb506dbbf8ca295c97639b95e2debaa;hpb=51c82a49d58daebe289e045fe44009d59b1f9236;p=openvswitch diff --git a/vswitchd/system-stats.c b/vswitchd/system-stats.c index cecd8f48..4dc2723c 100644 --- a/vswitchd/system-stats.c +++ b/vswitchd/system-stats.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2010 Nicira, Inc. +/* Copyright (c) 2010, 2012 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,8 @@ #include +#include "system-stats.h" + #include #include #include @@ -34,7 +36,7 @@ #include "dirs.h" #include "dynamic-string.h" #include "shash.h" -#include "system-stats.h" +#include "smap.h" #include "timeval.h" #include "vlog.h" @@ -52,24 +54,23 @@ VLOG_DEFINE_THIS_MODULE(system_stats); #endif static void -get_cpu_cores(struct shash *stats) +get_cpu_cores(struct smap *stats) { long int n_cores = sysconf(_SC_NPROCESSORS_ONLN); if (n_cores > 0) { - shash_add(stats, "cpu", xasprintf("%ld", n_cores)); + smap_add_format(stats, "cpu", "%ld", n_cores); } } static void -get_load_average(struct shash *stats OVS_UNUSED) +get_load_average(struct smap *stats OVS_UNUSED) { #if HAVE_GETLOADAVG double loadavg[3]; if (getloadavg(loadavg, 3) == 3) { - shash_add(stats, "load_average", - xasprintf("%.2f,%.2f,%.2f", - loadavg[0], loadavg[1], loadavg[2])); + smap_add_format(stats, "load_average", "%.2f,%.2f,%.2f", + loadavg[0], loadavg[1], loadavg[2]); } #endif } @@ -90,7 +91,7 @@ get_page_size(void) } static void -get_memory_stats(struct shash *stats) +get_memory_stats(struct smap *stats) { if (!LINUX) { unsigned int pagesize = get_page_size(); @@ -108,7 +109,7 @@ get_memory_stats(struct shash *stats) mem_total = phys_pages * (pagesize / 1024); mem_used = (phys_pages - avphys_pages) * (pagesize / 1024); - shash_add(stats, "memory", xasprintf("%d,%d", mem_total, mem_used)); + smap_add_format(stats, "memory", "%d,%d", mem_total, mem_used); } else { static const char file_name[] = "/proc/meminfo"; int mem_used, mem_cache, swap_used; @@ -152,9 +153,8 @@ get_memory_stats(struct shash *stats) mem_used = mem_total - mem_free; mem_cache = buffers + cached; swap_used = swap_total - swap_free; - shash_add(stats, "memory", - xasprintf("%d,%d,%d,%d,%d", mem_total, mem_used, mem_cache, - swap_total, swap_used)); + smap_add_format(stats, "memory", "%d,%d,%d,%d,%d", + mem_total, mem_used, mem_cache, swap_total, swap_used); } } @@ -385,7 +385,7 @@ get_process_info(pid_t pid, struct process_info *pinfo) } static void -get_process_stats(struct shash *stats) +get_process_stats(struct smap *stats) { struct dirent *de; DIR *dir; @@ -398,9 +398,9 @@ get_process_stats(struct shash *stats) while ((de = readdir(dir)) != NULL) { struct process_info pinfo; - char *key, *value; char *file_name; char *extension; + char *key; pid_t pid; #ifdef _DIRENT_HAVE_D_TYPE @@ -423,27 +423,23 @@ get_process_stats(struct shash *stats) key = xasprintf("process_%.*s", (int) (extension - de->d_name), de->d_name); - if (shash_find(stats, key)) { - free(key); - continue; - } - - if (LINUX && get_process_info(pid, &pinfo)) { - value = xasprintf("%lu,%lu,%lld,%d,%lld,%lld", - pinfo.vsz, pinfo.rss, pinfo.cputime, - pinfo.crashes, pinfo.booted, pinfo.uptime); - } else { - value = xstrdup(""); + if (!smap_get(stats, key)) { + if (LINUX && get_process_info(pid, &pinfo)) { + smap_add_format(stats, key, "%lu,%lu,%lld,%d,%lld,%lld", + pinfo.vsz, pinfo.rss, pinfo.cputime, + pinfo.crashes, pinfo.booted, pinfo.uptime); + } else { + smap_add(stats, key, ""); + } } - - shash_add_nocopy(stats, key, value); + free(key); } closedir(dir); } static void -get_filesys_stats(struct shash *stats OVS_UNUSED) +get_filesys_stats(struct smap *stats OVS_UNUSED) { #if HAVE_SETMNTENT && HAVE_STATVFS static const char file_name[] = "/etc/mtab"; @@ -489,14 +485,14 @@ get_filesys_stats(struct shash *stats OVS_UNUSED) endmntent(stream); if (s.length) { - shash_add(stats, "file_systems", ds_steal_cstr(&s)); + smap_add(stats, "file_systems", ds_cstr(&s)); } ds_destroy(&s); #endif /* HAVE_SETMNTENT && HAVE_STATVFS */ } void -get_system_stats(struct shash *stats) +get_system_stats(struct smap *stats) { get_cpu_cores(stats); get_load_average(stats);