# HG changeset patch # User Louis Opter # Date 1293822265 -3600 # Node ID 2cb8a6cbe468afdfab2966b1d6b7fb195bd2a6e2 # Parent ba9d8601d5f976932eae17fa1376077caf72fd09 cpuacct: convert per cpu usage from nanoseconds to jiffies diff -r ba9d8601d5f9 -r 2cb8a6cbe468 _lxcstats.h --- a/_lxcstats.h Thu Dec 30 19:01:47 2010 +0100 +++ b/_lxcstats.h Fri Dec 31 20:04:25 2010 +0100 @@ -4,6 +4,8 @@ # include "compat/compat.h" # include "probes/probes.h" +# define NSEC_PER_SEC 1000000000L + struct dirent; /** diff -r ba9d8601d5f9 -r 2cb8a6cbe468 container.c --- a/container.c Thu Dec 30 19:01:47 2010 +0100 +++ b/container.c Fri Dec 31 20:04:25 2010 +0100 @@ -5,7 +5,6 @@ #include #include #include -#include #include #include @@ -27,8 +26,6 @@ assert(ct); assert(name); - printf("new container %s\n", name); - c = calloc(1, sizeof(*c)); if (!c) return (NULL); diff -r ba9d8601d5f9 -r 2cb8a6cbe468 lxcstats.h --- a/lxcstats.h Thu Dec 30 19:01:47 2010 +0100 +++ b/lxcstats.h Fri Dec 31 20:04:25 2010 +0100 @@ -17,8 +17,8 @@ struct { uint32_t user; /*< CPU time spent in userland */ uint32_t system; /*< CPU time spent in kernelland */ - uint64_t *percpu; /*< CPU time per CPU (zero-terminated array or NULL) */ - } cpuacct; + uint32_t *percpu; /*< CPU time per CPU (zero-terminated array or NULL) */ + } cpuacct; /*< CPU accounting in USER_HZ */ }; /** diff -r ba9d8601d5f9 -r 2cb8a6cbe468 probes/cpuacct.c --- a/probes/cpuacct.c Thu Dec 30 19:01:47 2010 +0100 +++ b/probes/cpuacct.c Fri Dec 31 20:04:25 2010 +0100 @@ -6,10 +6,20 @@ #include #include #include +#include #include "lxcstats.h" #include "_lxcstats.h" +static inline uint32_t +nsecs_to_user_hz(uint64_t counter) +{ + /* + * XXX I don't know if it will work for custom values of HZ in the kernel. + */ + return (counter / (NSEC_PER_SEC / sysconf(_SC_CLK_TCK))); +} + static int read_stat(struct lxcst *c) { @@ -61,7 +71,7 @@ errno = 0; p = values; for (i = 0; i != ncpus && *p; ++i) { - c->cpuacct.percpu[i] = strtoll(p, &p, 10); + c->cpuacct.percpu[i] = nsecs_to_user_hz(strtoll(p, &p, 10)); if (errno) goto err; p += strcspn(p, "0123456789"); diff -r ba9d8601d5f9 -r 2cb8a6cbe468 probes/tests/cpuacct.c --- a/probes/tests/cpuacct.c Thu Dec 30 19:01:47 2010 +0100 +++ b/probes/tests/cpuacct.c Fri Dec 31 20:04:25 2010 +0100 @@ -28,7 +28,7 @@ printf("user %d\nsystem %d\n", c->cpuacct.user, c->cpuacct.system); for (i = 0; c->cpuacct.percpu[i]; ++i) - printf("cpu[%d] %lu\n", i, c->cpuacct.percpu[i]); + printf("cpu[%d] %u\n", i, c->cpuacct.percpu[i]); _lxcst_container_delete(c);