Skip to content

Commit c1a468e

Browse files
committed
1 parent 3a9f468 commit c1a468e

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

freebsd/FreeBSDProcessTable.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,13 @@ void ProcessTable_goThroughEntries(ProcessTable* super) {
165165
int count = 0;
166166
const struct kinfo_proc* kprocs = kvm_getprocs(fhost->kd, KERN_PROC_PROC, 0, &count);
167167

168+
int ccpu;
169+
size_t size = sizeof(ccpu);
170+
if (sysctlbyname("kern.ccpu", &ccpu, &size, NULL, 0) == -1) {
171+
ccpu = 0;
172+
}
173+
const double decayfactor = log(ccpu / fhost->kernelFScale);
174+
168175
for (int i = 0; i < count; i++) {
169176
const struct kinfo_proc* kproc = &kprocs[i];
170177
bool preExisting = false;
@@ -234,7 +241,7 @@ void ProcessTable_goThroughEntries(ProcessTable* super) {
234241
proc->nlwp = kproc->ki_numthreads;
235242
proc->time = (kproc->ki_runtime + 5000) / 10000;
236243

237-
proc->percent_cpu = 100.0 * ((double)kproc->ki_pctcpu / (double)fhost->kernelFScale);
244+
proc->percent_cpu = 100.0 * ((double)kproc->ki_pctcpu / (double)fhost->kernelFScale) / (1.0 - exp(kproc->ki_swtime * decayfactor));
238245
proc->percent_mem = 100.0 * proc->m_resident / (double)(host->totalMem);
239246
Process_updateCPUFieldWidths(proc->percent_cpu);
240247

0 commit comments

Comments
 (0)