[SIGAR-106] Add cpu irq, soft_irq and steal
This commit is contained in:
parent
e3510e0805
commit
9a1f45cd7b
|
@ -442,6 +442,21 @@ use vars qw(%classes %cmds);
|
||||||
desc => 'Total system cpu io wait time',
|
desc => 'Total system cpu io wait time',
|
||||||
plat => 'ALHS'
|
plat => 'ALHS'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name => 'irq', type => 'Long',
|
||||||
|
desc => 'Total system cpu time servicing interrupts',
|
||||||
|
plat => 'FLH'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name => 'soft_irq', type => 'Long',
|
||||||
|
desc => 'Total system cpu time servicing softirqs',
|
||||||
|
plat => 'L'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name => 'steal', type => 'Long',
|
||||||
|
desc => 'Total system cpu involuntary wait time',
|
||||||
|
plat => 'L'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name => 'total', type => 'Long',
|
name => 'total', type => 'Long',
|
||||||
desc => 'Total system cpu time',
|
desc => 'Total system cpu time',
|
||||||
|
@ -474,6 +489,21 @@ use vars qw(%classes %cmds);
|
||||||
desc => 'Percent system cpu io wait time',
|
desc => 'Percent system cpu io wait time',
|
||||||
plat => 'ALHS'
|
plat => 'ALHS'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name => 'irq', type => 'Double',
|
||||||
|
desc => 'Percent system cpu time servicing interrupts',
|
||||||
|
plat => 'FLH'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name => 'soft_irq', type => 'Double',
|
||||||
|
desc => 'Percent system cpu time servicing softirqs',
|
||||||
|
plat => 'L'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name => 'steal', type => 'Double',
|
||||||
|
desc => 'Percent system cpu involuntary wait time',
|
||||||
|
plat => 'L'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name => 'combined', type => 'Double',
|
name => 'combined', type => 'Double',
|
||||||
desc => 'Sum of User + Sys + Nice + Wait',
|
desc => 'Sum of User + Sys + Nice + Wait',
|
||||||
|
|
|
@ -23,13 +23,16 @@ package org.hyperic.sigar;
|
||||||
*/
|
*/
|
||||||
public class CpuPerc implements java.io.Serializable {
|
public class CpuPerc implements java.io.Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 02242007L;
|
private static final long serialVersionUID = 05242007L;
|
||||||
|
|
||||||
private double user;
|
private double user;
|
||||||
private double sys;
|
private double sys;
|
||||||
private double nice;
|
private double nice;
|
||||||
private double idle;
|
private double idle;
|
||||||
private double wait;
|
private double wait;
|
||||||
|
private double irq;
|
||||||
|
private double softIrq;
|
||||||
|
private double steal;
|
||||||
private double combined;
|
private double combined;
|
||||||
|
|
||||||
CpuPerc() {}
|
CpuPerc() {}
|
||||||
|
@ -74,6 +77,18 @@ public class CpuPerc implements java.io.Serializable {
|
||||||
return this.wait;
|
return this.wait;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getIrq() {
|
||||||
|
return this.irq;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getSoftIrq() {
|
||||||
|
return this.softIrq;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getSteal() {
|
||||||
|
return this.steal;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Sum of User + Sys + Nice + Wait
|
* @return Sum of User + Sys + Nice + Wait
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.hyperic.sigar.cmd;
|
||||||
|
|
||||||
import org.hyperic.sigar.CpuPerc;
|
import org.hyperic.sigar.CpuPerc;
|
||||||
import org.hyperic.sigar.Sigar;
|
import org.hyperic.sigar.Sigar;
|
||||||
|
import org.hyperic.sigar.SigarLoader;
|
||||||
import org.hyperic.sigar.SigarException;
|
import org.hyperic.sigar.SigarException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -48,6 +49,11 @@ public class CpuInfo extends SigarCommandBase {
|
||||||
println("Wait Time....." + CpuPerc.format(cpu.getWait()));
|
println("Wait Time....." + CpuPerc.format(cpu.getWait()));
|
||||||
println("Nice Time....." + CpuPerc.format(cpu.getNice()));
|
println("Nice Time....." + CpuPerc.format(cpu.getNice()));
|
||||||
println("Combined......" + CpuPerc.format(cpu.getCombined()));
|
println("Combined......" + CpuPerc.format(cpu.getCombined()));
|
||||||
|
if (SigarLoader.IS_LINUX) {
|
||||||
|
println("Irq Time......" + CpuPerc.format(cpu.getIrq()));
|
||||||
|
println("SoftIrq Time.." + CpuPerc.format(cpu.getSoftIrq()));
|
||||||
|
println("Steal Time...." + CpuPerc.format(cpu.getSteal()));
|
||||||
|
}
|
||||||
println("");
|
println("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,15 @@ public class TestCpu extends SigarTestCase {
|
||||||
traceln("Wait..." + cpu.getWait());
|
traceln("Wait..." + cpu.getWait());
|
||||||
assertTrue(cpu.getWait() >= 0);
|
assertTrue(cpu.getWait() >= 0);
|
||||||
|
|
||||||
|
traceln("Irq..." + cpu.getIrq());
|
||||||
|
assertTrue(cpu.getIrq() >= 0);
|
||||||
|
|
||||||
|
traceln("SIrq.." + cpu.getSoftIrq());
|
||||||
|
assertTrue(cpu.getSoftIrq() >= 0);
|
||||||
|
|
||||||
|
traceln("Stl..." + cpu.getSteal());
|
||||||
|
assertTrue(cpu.getSteal() >= 0);
|
||||||
|
|
||||||
traceln("Total.." + cpu.getTotal());
|
traceln("Total.." + cpu.getTotal());
|
||||||
assertTrue(cpu.getTotal() > 0);
|
assertTrue(cpu.getTotal() > 0);
|
||||||
|
|
||||||
|
|
|
@ -165,6 +165,9 @@ typedef struct {
|
||||||
nice,
|
nice,
|
||||||
idle,
|
idle,
|
||||||
wait,
|
wait,
|
||||||
|
irq,
|
||||||
|
soft_irq,
|
||||||
|
steal,
|
||||||
total;
|
total;
|
||||||
} sigar_cpu_t;
|
} sigar_cpu_t;
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,9 @@ typedef struct {
|
||||||
double nice;
|
double nice;
|
||||||
double idle;
|
double idle;
|
||||||
double wait;
|
double wait;
|
||||||
|
double irq;
|
||||||
|
double soft_irq;
|
||||||
|
double steal;
|
||||||
double combined;
|
double combined;
|
||||||
} sigar_cpu_perc_t;
|
} sigar_cpu_perc_t;
|
||||||
|
|
||||||
|
|
|
@ -717,6 +717,9 @@ int sigar_cpu_get(sigar_t *sigar, sigar_cpu_t *cpu)
|
||||||
cpu->sys = SIGAR_TICK2MSEC(cpu_data.sys);
|
cpu->sys = SIGAR_TICK2MSEC(cpu_data.sys);
|
||||||
cpu->idle = SIGAR_TICK2MSEC(cpu_data.idle);
|
cpu->idle = SIGAR_TICK2MSEC(cpu_data.idle);
|
||||||
cpu->wait = SIGAR_TICK2MSEC(cpu_data.wait);
|
cpu->wait = SIGAR_TICK2MSEC(cpu_data.wait);
|
||||||
|
cpu->irq = 0; /*N/A*/
|
||||||
|
cpu->soft_irq = 0; /*N/A*/
|
||||||
|
cpu->steal = 0; /*N/A*/
|
||||||
cpu->total = cpu->user + cpu->sys + cpu->idle + cpu->wait;
|
cpu->total = cpu->user + cpu->sys + cpu->idle + cpu->wait;
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
}
|
}
|
||||||
|
@ -736,6 +739,9 @@ int sigar_cpu_get(sigar_t *sigar, sigar_cpu_t *cpu)
|
||||||
cpu->sys = SIGAR_TICK2MSEC(data.cpu[CPU_KERNEL]);
|
cpu->sys = SIGAR_TICK2MSEC(data.cpu[CPU_KERNEL]);
|
||||||
cpu->idle = SIGAR_TICK2MSEC(data.cpu[CPU_IDLE]);
|
cpu->idle = SIGAR_TICK2MSEC(data.cpu[CPU_IDLE]);
|
||||||
cpu->wait = SIGAR_TICK2MSEC(data.cpu[CPU_WAIT]);
|
cpu->wait = SIGAR_TICK2MSEC(data.cpu[CPU_WAIT]);
|
||||||
|
cpu->irq = 0; /*N/A*/
|
||||||
|
cpu->soft_irq = 0; /*N/A*/
|
||||||
|
cpu->steal = 0; /*N/A*/
|
||||||
cpu->total = cpu->user + cpu->sys + cpu->idle + cpu->wait;
|
cpu->total = cpu->user + cpu->sys + cpu->idle + cpu->wait;
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
|
|
|
@ -634,6 +634,9 @@ int sigar_cpu_get(sigar_t *sigar, sigar_cpu_t *cpu)
|
||||||
cpu->idle = SIGAR_TICK2MSEC(cpuload.cpu_ticks[CPU_STATE_IDLE]);
|
cpu->idle = SIGAR_TICK2MSEC(cpuload.cpu_ticks[CPU_STATE_IDLE]);
|
||||||
cpu->nice = SIGAR_TICK2MSEC(cpuload.cpu_ticks[CPU_STATE_NICE]);
|
cpu->nice = SIGAR_TICK2MSEC(cpuload.cpu_ticks[CPU_STATE_NICE]);
|
||||||
cpu->wait = 0; /*N/A*/
|
cpu->wait = 0; /*N/A*/
|
||||||
|
cpu->irq = 0; /*N/A*/
|
||||||
|
cpu->soft_irq = 0; /*N/A*/
|
||||||
|
cpu->steal = 0; /*N/A*/
|
||||||
cpu->total = cpu->user + cpu->nice + cpu->sys + cpu->idle;
|
cpu->total = cpu->user + cpu->nice + cpu->sys + cpu->idle;
|
||||||
|
|
||||||
#elif defined(__FreeBSD__) || (__OpenBSD__) || defined(__NetBSD__)
|
#elif defined(__FreeBSD__) || (__OpenBSD__) || defined(__NetBSD__)
|
||||||
|
@ -663,10 +666,13 @@ int sigar_cpu_get(sigar_t *sigar, sigar_cpu_t *cpu)
|
||||||
|
|
||||||
cpu->user = SIGAR_TICK2MSEC(cp_time[CP_USER]);
|
cpu->user = SIGAR_TICK2MSEC(cp_time[CP_USER]);
|
||||||
cpu->nice = SIGAR_TICK2MSEC(cp_time[CP_NICE]);
|
cpu->nice = SIGAR_TICK2MSEC(cp_time[CP_NICE]);
|
||||||
cpu->sys = SIGAR_TICK2MSEC(cp_time[CP_SYS] + cp_time[CP_INTR]);
|
cpu->sys = SIGAR_TICK2MSEC(cp_time[CP_SYS]);
|
||||||
cpu->idle = SIGAR_TICK2MSEC(cp_time[CP_IDLE]);
|
cpu->idle = SIGAR_TICK2MSEC(cp_time[CP_IDLE]);
|
||||||
cpu->wait = 0; /*N/A*/
|
cpu->wait = 0; /*N/A*/
|
||||||
cpu->total = cpu->user + cpu->nice + cpu->sys + cpu->idle;
|
cpu->irq = SIGAR_TICK2MSEC(cp_time[CP_INTR]);
|
||||||
|
cpu->soft_irq = 0; /*N/A*/
|
||||||
|
cpu->steal = 0; /*N/A*/
|
||||||
|
cpu->total = cpu->user + cpu->nice + cpu->sys + cpu->idle + cpu->irq;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
|
@ -704,6 +710,9 @@ int sigar_cpu_list_get(sigar_t *sigar, sigar_cpu_list_t *cpulist)
|
||||||
cpu->idle = SIGAR_TICK2MSEC(cpuload[i].cpu_ticks[CPU_STATE_IDLE]);
|
cpu->idle = SIGAR_TICK2MSEC(cpuload[i].cpu_ticks[CPU_STATE_IDLE]);
|
||||||
cpu->nice = SIGAR_TICK2MSEC(cpuload[i].cpu_ticks[CPU_STATE_NICE]);
|
cpu->nice = SIGAR_TICK2MSEC(cpuload[i].cpu_ticks[CPU_STATE_NICE]);
|
||||||
cpu->wait = 0; /*N/A*/
|
cpu->wait = 0; /*N/A*/
|
||||||
|
cpu->irq = 0; /*N/A*/
|
||||||
|
cpu->soft_irq = 0; /*N/A*/
|
||||||
|
cpu->steal = 0; /*N/A*/
|
||||||
cpu->total = cpu->user + cpu->nice + cpu->sys + cpu->idle;
|
cpu->total = cpu->user + cpu->nice + cpu->sys + cpu->idle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,8 +128,7 @@ static void get_cpu_metrics(sigar_t *sigar,
|
||||||
cpu->user = SIGAR_TICK2MSEC(cpu_time[CP_USER]);
|
cpu->user = SIGAR_TICK2MSEC(cpu_time[CP_USER]);
|
||||||
|
|
||||||
cpu->sys = SIGAR_TICK2MSEC(cpu_time[CP_SYS] +
|
cpu->sys = SIGAR_TICK2MSEC(cpu_time[CP_SYS] +
|
||||||
cpu_time[CP_SSYS] +
|
cpu_time[CP_SSYS]);
|
||||||
cpu_time[CP_INTR]);
|
|
||||||
|
|
||||||
cpu->nice = SIGAR_TICK2MSEC(cpu_time[CP_NICE]);
|
cpu->nice = SIGAR_TICK2MSEC(cpu_time[CP_NICE]);
|
||||||
|
|
||||||
|
@ -139,8 +138,12 @@ static void get_cpu_metrics(sigar_t *sigar,
|
||||||
cpu_time[CP_SWAIT] +
|
cpu_time[CP_SWAIT] +
|
||||||
cpu_time[CP_BLOCK]);
|
cpu_time[CP_BLOCK]);
|
||||||
|
|
||||||
|
cpu->irq = SIGAR_TICK2MSEC(cpu_time[CP_INTR]);
|
||||||
|
cpu->soft_irq = 0; /*N/A*/
|
||||||
|
cpu->steal = 0; /*N/A*/
|
||||||
|
|
||||||
cpu->total =
|
cpu->total =
|
||||||
cpu->user + cpu->sys + cpu->nice + cpu->idle + cpu->wait;
|
cpu->user + cpu->sys + cpu->nice + cpu->idle + cpu->wait + cpu->irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sigar_cpu_get(sigar_t *sigar, sigar_cpu_t *cpu)
|
int sigar_cpu_get(sigar_t *sigar, sigar_cpu_t *cpu)
|
||||||
|
|
|
@ -411,8 +411,16 @@ static void get_cpu_metrics(sigar_t *sigar, sigar_cpu_t *cpu, char *line)
|
||||||
if (*ptr == ' ') {
|
if (*ptr == ' ') {
|
||||||
/* 2.6+ kernels only */
|
/* 2.6+ kernels only */
|
||||||
cpu->wait += SIGAR_TICK2MSEC(sigar_strtoull(ptr));
|
cpu->wait += SIGAR_TICK2MSEC(sigar_strtoull(ptr));
|
||||||
|
cpu->irq += SIGAR_TICK2MSEC(sigar_strtoull(ptr));
|
||||||
|
cpu->soft_irq += SIGAR_TICK2MSEC(sigar_strtoull(ptr));
|
||||||
}
|
}
|
||||||
cpu->total = cpu->user + cpu->nice + cpu->sys + cpu->idle + cpu->wait;
|
if (*ptr == ' ') {
|
||||||
|
/* 2.6.11+ kernels only */
|
||||||
|
cpu->steal += SIGAR_TICK2MSEC(sigar_strtoull(ptr));
|
||||||
|
}
|
||||||
|
cpu->total =
|
||||||
|
cpu->user + cpu->nice + cpu->sys + cpu->idle +
|
||||||
|
cpu->wait + cpu->irq + cpu->soft_irq + cpu->steal;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sigar_cpu_get(sigar_t *sigar, sigar_cpu_t *cpu)
|
int sigar_cpu_get(sigar_t *sigar, sigar_cpu_t *cpu)
|
||||||
|
|
|
@ -104,6 +104,9 @@ int sigar_cpu_get(sigar_t *sigar, sigar_cpu_t *cpu)
|
||||||
cpu->sys = sysinfo.si_sys;
|
cpu->sys = sysinfo.si_sys;
|
||||||
cpu->idle = sysinfo.si_idle;
|
cpu->idle = sysinfo.si_idle;
|
||||||
cpu->wait = 0; /*N/A?*/
|
cpu->wait = 0; /*N/A?*/
|
||||||
|
cpu->irq = 0; /*N/A*/
|
||||||
|
cpu->soft_irq = 0; /*N/A*/
|
||||||
|
cpu->steal = 0; /*N/A*/
|
||||||
cpu->total = cpu->user + cpu->nice + cpu->sys + cpu->idle + cpu->wait;
|
cpu->total = cpu->user + cpu->nice + cpu->sys + cpu->idle + cpu->wait;
|
||||||
|
|
||||||
return SIGAR_OK;
|
return SIGAR_OK;
|
||||||
|
|
|
@ -610,28 +610,42 @@ SIGAR_DECLARE(int) sigar_cpu_perc_calculate(sigar_cpu_t *prev,
|
||||||
sigar_cpu_t *curr,
|
sigar_cpu_t *curr,
|
||||||
sigar_cpu_perc_t *perc)
|
sigar_cpu_perc_t *perc)
|
||||||
{
|
{
|
||||||
double diff_user, diff_sys, diff_nice, diff_idle, diff_wait, diff_total;
|
double diff_user, diff_sys, diff_nice, diff_idle;
|
||||||
|
double diff_wait, diff_irq, diff_soft_irq, diff_steal;
|
||||||
|
double diff_total;
|
||||||
|
|
||||||
diff_user = (sigar_int64_t)(curr->user - prev->user);
|
diff_user = (sigar_int64_t)(curr->user - prev->user);
|
||||||
diff_sys = (sigar_int64_t)(curr->sys - prev->sys);
|
diff_sys = (sigar_int64_t)(curr->sys - prev->sys);
|
||||||
diff_nice = (sigar_int64_t)(curr->nice - prev->nice);
|
diff_nice = (sigar_int64_t)(curr->nice - prev->nice);
|
||||||
diff_idle = (sigar_int64_t)(curr->idle - prev->idle);
|
diff_idle = (sigar_int64_t)(curr->idle - prev->idle);
|
||||||
diff_wait = (sigar_int64_t)(curr->wait - prev->wait);
|
diff_wait = (sigar_int64_t)(curr->wait - prev->wait);
|
||||||
|
diff_irq = (sigar_int64_t)(curr->irq - prev->irq);
|
||||||
|
diff_soft_irq = (sigar_int64_t)(curr->soft_irq - prev->soft_irq);
|
||||||
|
diff_steal = (sigar_int64_t)(curr->steal - prev->steal);
|
||||||
|
|
||||||
diff_user = diff_user < 0 ? 0 : diff_user;
|
diff_user = diff_user < 0 ? 0 : diff_user;
|
||||||
diff_sys = diff_sys < 0 ? 0 : diff_sys;
|
diff_sys = diff_sys < 0 ? 0 : diff_sys;
|
||||||
diff_nice = diff_nice < 0 ? 0 : diff_nice;
|
diff_nice = diff_nice < 0 ? 0 : diff_nice;
|
||||||
diff_idle = diff_idle < 0 ? 0 : diff_idle;
|
diff_idle = diff_idle < 0 ? 0 : diff_idle;
|
||||||
diff_wait = diff_wait < 0 ? 0 : diff_wait;
|
diff_wait = diff_wait < 0 ? 0 : diff_wait;
|
||||||
|
diff_irq = diff_irq < 0 ? 0 : diff_irq;
|
||||||
|
diff_soft_irq = diff_soft_irq < 0 ? 0 : diff_soft_irq;
|
||||||
|
diff_steal = diff_steal < 0 ? 0 : diff_steal;
|
||||||
|
|
||||||
diff_total =
|
diff_total =
|
||||||
diff_user + diff_sys + diff_nice + diff_idle + diff_wait;
|
diff_user + diff_sys + diff_nice + diff_idle +
|
||||||
|
diff_wait + diff_irq + diff_soft_irq +
|
||||||
|
diff_steal;
|
||||||
|
|
||||||
perc->user = diff_user / diff_total;
|
perc->user = diff_user / diff_total;
|
||||||
perc->sys = diff_sys / diff_total;
|
perc->sys = diff_sys / diff_total;
|
||||||
perc->nice = diff_nice / diff_total;
|
perc->nice = diff_nice / diff_total;
|
||||||
perc->idle = diff_idle / diff_total;
|
perc->idle = diff_idle / diff_total;
|
||||||
perc->wait = diff_wait / diff_total;
|
perc->wait = diff_wait / diff_total;
|
||||||
|
perc->irq = diff_irq / diff_total;
|
||||||
|
perc->soft_irq = diff_soft_irq / diff_total;
|
||||||
|
perc->steal = diff_steal / diff_total;
|
||||||
|
|
||||||
perc->combined =
|
perc->combined =
|
||||||
perc->user + perc->sys + perc->nice + perc->wait;
|
perc->user + perc->sys + perc->nice + perc->wait;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue