mirror of
https://github.com/xzeldon/htop.git
synced 2025-07-13 04:34:35 +03:00
Rework CPU counting
Currently htop does not support offline CPUs and hot-swapping, e.g. via echo 0 > /sys/devices/system/cpu/cpu2/online Split the current single cpuCount variable into activeCPUs and existingCPUs. Supersedes: #650 Related: #580
This commit is contained in:

committed by
Benny Baumann

parent
c9abd788b1
commit
41af31be7f
@ -184,7 +184,7 @@ int Platform_getMaxPid() {
|
||||
|
||||
double Platform_setCPUValues(Meter* this, unsigned int cpu) {
|
||||
const SolarisProcessList* spl = (const SolarisProcessList*) this->pl;
|
||||
unsigned int cpus = this->pl->cpuCount;
|
||||
unsigned int cpus = this->pl->activeCPUs;
|
||||
const CPUData* cpuData = NULL;
|
||||
|
||||
if (cpus == 1) {
|
||||
|
@ -59,20 +59,24 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* dynamicMeters, H
|
||||
CRT_fatalError("Cannot get pagesize by sysconf(_SC_PAGESIZE)");
|
||||
pageSizeKB = pageSize / 1024;
|
||||
|
||||
pl->cpuCount = sysconf(_SC_NPROCESSORS_ONLN);
|
||||
if (pl->cpuCount == (unsigned int)-1)
|
||||
pl->activeCPUs = sysconf(_SC_NPROCESSORS_ONLN);
|
||||
if (pl->activeCPUs == (unsigned int)-1)
|
||||
CRT_fatalError("Cannot get CPU count by sysconf(_SC_NPROCESSORS_ONLN)");
|
||||
else if (pl->cpuCount == 1)
|
||||
else if (pl->activeCPUs == 1)
|
||||
spl->cpus = xRealloc(spl->cpus, sizeof(CPUData));
|
||||
else
|
||||
spl->cpus = xRealloc(spl->cpus, (pl->cpuCount + 1) * sizeof(CPUData));
|
||||
spl->cpus = xRealloc(spl->cpus, (pl->activeCPUs + 1) * sizeof(CPUData));
|
||||
|
||||
/* TODO: support offline CPUs and hot swapping
|
||||
* pl->existingCPUs = sysconf(_SC_NPROCESSORS_CONF) */
|
||||
pl->existingCPUs = pl->activeCPUs;
|
||||
|
||||
return pl;
|
||||
}
|
||||
|
||||
static inline void SolarisProcessList_scanCPUTime(ProcessList* pl) {
|
||||
const SolarisProcessList* spl = (SolarisProcessList*) pl;
|
||||
unsigned int cpus = pl->cpuCount;
|
||||
unsigned int cpus = pl->existingCPUs;
|
||||
kstat_t* cpuinfo = NULL;
|
||||
kstat_named_t* idletime = NULL;
|
||||
kstat_named_t* intrtime = NULL;
|
||||
|
Reference in New Issue
Block a user