handle the case where VM guest may have 1 virtual ncpu on multicore hosts
This commit is contained in:
		
							parent
							
								
									dffb588d0b
								
							
						
					
					
						commit
						a3364ec38d
					
				@ -139,6 +139,11 @@ sigar_iodev_t *sigar_iodev_get(sigar_t *sigar,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int sigar_cpu_core_count(sigar_t *sigar);
 | 
					int sigar_cpu_core_count(sigar_t *sigar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* e.g. VM guest may have 1 virtual ncpu on multicore hosts */
 | 
				
			||||||
 | 
					#define sigar_cpu_socket_count(sigar) \
 | 
				
			||||||
 | 
					    (sigar->ncpu < sigar->lcpu) ? sigar->ncpu : \
 | 
				
			||||||
 | 
					    (sigar->ncpu / sigar->lcpu)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int sigar_cpu_core_rollup(sigar_t *sigar);
 | 
					int sigar_cpu_core_rollup(sigar_t *sigar);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void sigar_cpu_model_adjust(sigar_t *sigar, sigar_cpu_info_t *info);
 | 
					void sigar_cpu_model_adjust(sigar_t *sigar, sigar_cpu_info_t *info);
 | 
				
			||||||
 | 
				
			|||||||
@ -2133,7 +2133,7 @@ int sigar_cpu_info_list_get(sigar_t *sigar,
 | 
				
			|||||||
        info->mhz = mhz;
 | 
					        info->mhz = mhz;
 | 
				
			||||||
        info->cache_size = cache_size;
 | 
					        info->cache_size = cache_size;
 | 
				
			||||||
        info->total_cores = sigar->ncpu;
 | 
					        info->total_cores = sigar->ncpu;
 | 
				
			||||||
        info->total_sockets = sigar->ncpu / lcpu;
 | 
					        info->total_sockets = sigar_cpu_socket_count(sigar);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return SIGAR_OK;
 | 
					    return SIGAR_OK;
 | 
				
			||||||
 | 
				
			|||||||
@ -212,7 +212,8 @@ char *sigar_os_error_string(sigar_t *sigar, int err)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static int sigar_cpu_total_count(sigar_t *sigar)
 | 
					static int sigar_cpu_total_count(sigar_t *sigar)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return (int)sysconf(_SC_NPROCESSORS_CONF);
 | 
					    sigar->ncpu = (int)sysconf(_SC_NPROCESSORS_CONF);
 | 
				
			||||||
 | 
					    return sigar->ncpu;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int get_ram(sigar_t *sigar, sigar_mem_t *mem)
 | 
					static int get_ram(sigar_t *sigar, sigar_mem_t *mem)
 | 
				
			||||||
@ -1569,12 +1570,12 @@ int sigar_cpu_info_list_get(sigar_t *sigar,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    FILE *fp;
 | 
					    FILE *fp;
 | 
				
			||||||
    int core_rollup = sigar_cpu_core_rollup(sigar), i=0;
 | 
					    int core_rollup = sigar_cpu_core_rollup(sigar), i=0;
 | 
				
			||||||
    int ncpu = sigar_cpu_total_count(sigar);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (!(fp = fopen(PROC_FS_ROOT "cpuinfo", "r"))) {
 | 
					    if (!(fp = fopen(PROC_FS_ROOT "cpuinfo", "r"))) {
 | 
				
			||||||
        return errno;
 | 
					        return errno;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    (void)sigar_cpu_total_count(sigar);
 | 
				
			||||||
    sigar_cpu_info_list_create(cpu_infos);
 | 
					    sigar_cpu_info_list_create(cpu_infos);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (get_cpu_info(sigar, &cpu_infos->data[cpu_infos->number], fp)) {
 | 
					    while (get_cpu_info(sigar, &cpu_infos->data[cpu_infos->number], fp)) {
 | 
				
			||||||
@ -1588,8 +1589,8 @@ int sigar_cpu_info_list_get(sigar_t *sigar,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        cpu_info = &cpu_infos->data[cpu_infos->number];
 | 
					        cpu_info = &cpu_infos->data[cpu_infos->number];
 | 
				
			||||||
        get_cpuinfo_max_freq(cpu_info, cpu_infos->number);
 | 
					        get_cpuinfo_max_freq(cpu_info, cpu_infos->number);
 | 
				
			||||||
        cpu_info->total_sockets = ncpu / sigar->lcpu;
 | 
					        cpu_info->total_sockets = sigar_cpu_socket_count(sigar);
 | 
				
			||||||
        cpu_info->total_cores   = ncpu;
 | 
					        cpu_info->total_cores   = sigar->ncpu;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ++cpu_infos->number;
 | 
					        ++cpu_infos->number;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -2005,7 +2005,7 @@ static int sigar_cpu_info_get(sigar_t *sigar, sigar_cpu_info_t *info)
 | 
				
			|||||||
    RegCloseKey(key);
 | 
					    RegCloseKey(key);
 | 
				
			||||||
    RegCloseKey(cpu);
 | 
					    RegCloseKey(cpu);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    info->total_sockets = sigar->ncpu / sigar->lcpu;
 | 
					    info->total_sockets = sigar_cpu_socket_count(sigar);
 | 
				
			||||||
    info->total_cores   = sigar->ncpu;
 | 
					    info->total_cores   = sigar->ncpu;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return SIGAR_OK;
 | 
					    return SIGAR_OK;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user