diff options
| author | Andrew Morton <akpm@digeo.com> | 2002-10-31 20:02:08 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2002-10-31 20:02:08 -0800 |
| commit | ef890de655048e67bfa262d9e1821c6b3d61f39a (patch) | |
| tree | 12ffbeb88764e980d20129cfae6ed8f0c7a88732 /drivers/base/node.c | |
| parent | de642de7c20830f18916890e698d5b9310b429f1 (diff) | |
[PATCH] NUMA meminfo for driverfs Topology
From Matthew Dobson.
Create nodeX/meminfo files for DriverFS Topology.
This patch adds code to DriverFS Topology to expose per-node memory
statistics. This information is exposed via: cat nodeX/meminfo
The patch also adds 2 helper functions to gather per-node memory info.
Diffstat (limited to 'drivers/base/node.c')
| -rw-r--r-- | drivers/base/node.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/base/node.c b/drivers/base/node.c index 87ed0be8fe56..e2192eee8380 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -35,6 +35,34 @@ static ssize_t node_read_cpumap(struct device * dev, char * buf, size_t count, l } static DEVICE_ATTR(cpumap,S_IRUGO,node_read_cpumap,NULL); +#define K(x) ((x) << (PAGE_SHIFT - 10)) +static ssize_t node_read_meminfo(struct device * dev, char * buf, size_t count, loff_t off) +{ + struct sys_root *node = to_root(dev); + int nid = node->id; + struct sysinfo i; + si_meminfo_node(&i, nid); + return off ? 0 : sprintf(buf, "\n" + "Node %d MemTotal: %8lu kB\n" + "Node %d MemFree: %8lu kB\n" + "Node %d MemUsed: %8lu kB\n" + "Node %d HighTotal: %8lu kB\n" + "Node %d HighFree: %8lu kB\n" + "Node %d LowTotal: %8lu kB\n" + "Node %d LowFree: %8lu kB\n", + nid, K(i.totalram), + nid, K(i.freeram), + nid, K(i.totalram-i.freeram), + nid, K(i.totalhigh), + nid, K(i.freehigh), + nid, K(i.totalram-i.totalhigh), + nid, K(i.freeram-i.freehigh)); + + return 0; +} +#undef K +static DEVICE_ATTR(meminfo,S_IRUGO,node_read_meminfo,NULL); + /* * register_node - Setup a driverfs device for a node. @@ -54,6 +82,7 @@ void __init register_node(struct node *node, int num, struct node *parent) node->sysroot.dev.bus = &system_bus_type; if (!sys_register_root(&node->sysroot)){ device_create_file(&node->sysroot.dev, &dev_attr_cpumap); + device_create_file(&node->sysroot.dev, &dev_attr_meminfo); } } |
