annotate probes/memory.c @ 9:6f2e13f5fcfd

Add the memory probe
author Louis Opter <louis@dotcloud.com>
date Sun, 02 Jan 2011 01:50:27 +0100
parents
children 3a1977ecccc7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
1 #include <sys/types.h>
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
2
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
3 #include <assert.h>
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
4 #include <errno.h>
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
5 #include <limits.h>
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
6 #include <stdlib.h>
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
7 #include <string.h>
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
8
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
9 #include "lxcstats.h"
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
10 #include "_lxcstats.h"
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
11
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
12 static int
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
13 read_stat(struct lxcst *c)
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
14 {
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
15 char path[PATH_MAX];
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
16 char *values;
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
17 char *fields[12];
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
18 int ret;
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
19
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
20 _lxcst_join_path(path, sizeof(path), c->cgroup_dir, "memory.stat");
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
21 ret = _lxcst_read_file(path, &values);
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
22 if (ret > 0) {
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
23 values[ret - 1] = '\0'; /* Replace the last \n by a \0 */
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
24 if (_lxcst_strsplit(values, fields, ARRAY_SIZE(fields)) == ARRAY_SIZE(fields)) {
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
25 errno = 0;
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
26 c->memory.cached = strtoull(fields[1], NULL, 10);
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
27 c->memory.used = strtoull(fields[3], NULL, 10);
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
28 c->memory.mapped = strtoull(fields[5], NULL, 10);
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
29 c->memory.swapped = strtoull(fields[11], NULL, 10);
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
30 if (!errno) {
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
31 free(values);
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
32 return (0);
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
33 }
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
34 }
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
35 free(values);
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
36 }
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
37
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
38 memset(&c->memory, 0, sizeof(c->memory));
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
39 return (-1);
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
40 }
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
41
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
42 int
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
43 _lxcst_probe_memory(struct lxcst *c)
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
44 {
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
45 assert(c);
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
46
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
47 return (read_stat(c));
6f2e13f5fcfd Add the memory probe
Louis Opter <louis@dotcloud.com>
parents:
diff changeset
48 }