stats_r->invol_cs = usage.ru_nivcsw;
stats_r->disk_input = (unsigned long long)usage.ru_inblock * 512ULL;
stats_r->disk_output = (unsigned long long)usage.ru_oublock * 512ULL;
+ (void)gettimeofday(&stats_r->clock_time, NULL);
process_read_io_stats(stats_r);
user_trans_stats_get(suser, &stats_r->trans_stats);
}
&old_stats->user_cpu);
timeval_add_diff(&dest->sys_cpu, &new_stats->sys_cpu,
&old_stats->sys_cpu);
+ timeval_add_diff(&dest->clock_time, &new_stats->clock_time,
+ &old_stats->clock_time);
trans_stats_dec(&dest->trans_stats, &old_stats->trans_stats);
trans_stats_add(&dest->trans_stats, &new_stats->trans_stats);
}
(long)stats->user_cpu.tv_usec);
str_printfa(str, "\tscpu=%ld.%ld", (long)stats->sys_cpu.tv_sec,
(long)stats->sys_cpu.tv_usec);
+ str_printfa(str, "\ttime=%ld.%ld", (long)stats->clock_time.tv_sec,
+ (long)stats->clock_time.tv_usec);
str_printfa(str, "\tminflt=%u", stats->min_faults);
str_printfa(str, "\tmajflt=%u", stats->maj_faults);
str_printfa(str, "\tvolcs=%u", stats->vol_cs);
struct mail_stats {
/* user/system CPU time used */
struct timeval user_cpu, sys_cpu;
+ /* clock time used (not counting the time in ioloop wait) */
+ struct timeval clock_time;
/* minor / major page faults */
uint32_t min_faults, maj_faults;
/* voluntary / involuntary context switches */
#define EN(parsename, name) E(parsename, name, TYPE_NUM)
E("ucpu", user_cpu, TYPE_TIMEVAL),
E("scpu", sys_cpu, TYPE_TIMEVAL),
+ E("time", clock_time, TYPE_TIMEVAL),
EN("minflt", min_faults),
EN("majflt", maj_faults),
EN("volcs", vol_cs),
#include "guid.h"
struct mail_stats {
- struct timeval user_cpu, sys_cpu;
+ struct timeval user_cpu, sys_cpu, clock_time;
uint32_t min_faults, maj_faults;
uint32_t vol_cs, invol_cs;
uint64_t disk_input, disk_output;