mirror of
https://github.com/xzeldon/htop.git
synced 2025-07-13 20:44: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
@ -134,7 +134,9 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* dynamicMeters, H
|
||||
ProcessList_init(&this->super, Class(DarwinProcess), usersTable, dynamicMeters, pidMatchList, userId);
|
||||
|
||||
/* Initialize the CPU information */
|
||||
this->super.cpuCount = ProcessList_allocateCPULoadInfo(&this->prev_load);
|
||||
this->super.activeCPUs = ProcessList_allocateCPULoadInfo(&this->prev_load);
|
||||
// TODO: support offline CPUs and hot swapping
|
||||
this->super.existingCPUs = this->super.activeCPUs;
|
||||
ProcessList_getHostInfo(&this->host_info);
|
||||
ProcessList_allocateCPULoadInfo(&this->curr_load);
|
||||
|
||||
@ -184,13 +186,13 @@ void ProcessList_goThroughEntries(ProcessList* super, bool pauseProcessUpdate) {
|
||||
|
||||
/* Get the time difference */
|
||||
dpl->global_diff = 0;
|
||||
for (unsigned int i = 0; i < dpl->super.cpuCount; ++i) {
|
||||
for (unsigned int i = 0; i < dpl->super.existingCPUs; ++i) {
|
||||
for (size_t j = 0; j < CPU_STATE_MAX; ++j) {
|
||||
dpl->global_diff += dpl->curr_load[i].cpu_ticks[j] - dpl->prev_load[i].cpu_ticks[j];
|
||||
}
|
||||
}
|
||||
|
||||
const double time_interval = ticksToNanoseconds(dpl->global_diff) / (double) dpl->super.cpuCount;
|
||||
const double time_interval = ticksToNanoseconds(dpl->global_diff) / (double) dpl->super.activeCPUs;
|
||||
|
||||
/* Clear the thread counts */
|
||||
super->kernelThreads = 0;
|
||||
|
@ -186,21 +186,21 @@ int Platform_getMaxPid() {
|
||||
|
||||
static double Platform_setCPUAverageValues(Meter* mtr) {
|
||||
const ProcessList* dpl = mtr->pl;
|
||||
unsigned int cpus = dpl->cpuCount;
|
||||
unsigned int activeCPUs = dpl->activeCPUs;
|
||||
double sumNice = 0.0;
|
||||
double sumNormal = 0.0;
|
||||
double sumKernel = 0.0;
|
||||
double sumPercent = 0.0;
|
||||
for (unsigned int i = 1; i <= cpus; i++) {
|
||||
for (unsigned int i = 1; i <= dpl->existingCPUs; i++) {
|
||||
sumPercent += Platform_setCPUValues(mtr, i);
|
||||
sumNice += mtr->values[CPU_METER_NICE];
|
||||
sumNormal += mtr->values[CPU_METER_NORMAL];
|
||||
sumKernel += mtr->values[CPU_METER_KERNEL];
|
||||
}
|
||||
mtr->values[CPU_METER_NICE] = sumNice / cpus;
|
||||
mtr->values[CPU_METER_NORMAL] = sumNormal / cpus;
|
||||
mtr->values[CPU_METER_KERNEL] = sumKernel / cpus;
|
||||
return sumPercent / cpus;
|
||||
mtr->values[CPU_METER_NICE] = sumNice / activeCPUs;
|
||||
mtr->values[CPU_METER_NORMAL] = sumNormal / activeCPUs;
|
||||
mtr->values[CPU_METER_KERNEL] = sumKernel / activeCPUs;
|
||||
return sumPercent / activeCPUs;
|
||||
}
|
||||
|
||||
double Platform_setCPUValues(Meter* mtr, unsigned int cpu) {
|
||||
|
Reference in New Issue
Block a user