NUMA: expose correct /sys/devices/system/node/nodeX/meminfo

This commit is contained in:
Balazs Gerofi
2017-07-07 00:22:25 +09:00
parent 72e3f5ee50
commit 0f58e9e77d
6 changed files with 51 additions and 0 deletions

View File

@ -30,6 +30,7 @@ extern void init_host_ikc2mckernel(void);
extern void sched_init(void);
extern void pc_ap_init(void);
extern void cpu_sysfs_setup(void);
extern void numa_sysfs_setup(void);
extern void rusage_sysfs_setup(void);
extern void status_sysfs_setup(void);

View File

@ -350,6 +350,7 @@ static void setup_remote_snooping_samples(void)
static void populate_sysfs(void)
{
cpu_sysfs_setup();
numa_sysfs_setup();
#ifdef ENABLE_RUSAGE
rusage_sysfs_setup();
status_sysfs_setup();

View File

@ -40,6 +40,8 @@
#include <rusage.h>
#include <syscall.h>
#include <profile.h>
#include <limits.h>
#include <sysfs.h>
//#define DEBUG_PRINT_MEM
@ -1147,6 +1149,7 @@ static void numa_init(void)
mcs_lock_init(&memory_nodes[i].lock);
memory_nodes[i].min_addr = 0xFFFFFFFFFFFFFFFF;
memory_nodes[i].max_addr = 0;
memory_nodes[i].nr_pages = 0;
memory_nodes[i].nr_free_pages = 0;
#endif
@ -1268,6 +1271,46 @@ static void numa_distances_init()
}
}
static ssize_t numa_sysfs_show_meminfo(struct sysfs_ops *ops,
void *instance, void *buf, size_t size)
{
struct ihk_mc_numa_node *node =
(struct ihk_mc_numa_node *)instance;
char *sbuf = (char *)buf;
int len = 0;
#ifdef IHK_RBTREE_ALLOCATOR
len += snprintf(&sbuf[len], size - len, "Node %d MemTotal:%15d kB\n",
node->id, node->nr_pages << 2);
len += snprintf(&sbuf[len], size - len, "Node %d MemFree:%16d kB\n",
node->id, node->nr_free_pages << 2);
len += snprintf(&sbuf[len], size - len, "Node %d MemUsed:%16d kB\n",
node->id, (node->nr_pages - node->nr_free_pages) << 2);
#endif
return len;
}
struct sysfs_ops numa_sysfs_meminfo = {
.show = &numa_sysfs_show_meminfo,
};
void numa_sysfs_setup(void) {
int i;
int error;
char path[PATH_MAX];
for (i = 0; i < ihk_mc_get_nr_numa_nodes(); ++i) {
sprintf(path, "/sys/devices/system/node/node%d/meminfo", i);
error = sysfs_createf(&numa_sysfs_meminfo, &memory_nodes[i],
0444, path);
if (error) {
kprintf("%s: ERROR: creating %s\n", __FUNCTION__, path);
}
}
}
#define PHYS_PAGE_HASH_SHIFT (10)
#define PHYS_PAGE_HASH_SIZE (1 << PHYS_PAGE_HASH_SHIFT)
#define PHYS_PAGE_HASH_MASK (PHYS_PAGE_HASH_SIZE - 1)