rusage: Fix available page sizes

Change-Id: I418075ff4b5341e0f5c7ff317e96461879a60f87
This commit is contained in:
Masamichi Takagi
2018-12-13 13:54:18 +09:00
committed by Dominique Martinet
parent c82c2c1231
commit 6810506c3d
19 changed files with 65 additions and 186 deletions

View File

@ -1,60 +0,0 @@
#ifndef ARCH_RUSAGE_H_INCLUDED
#define ARCH_RUSAGE_H_INCLUDED
#define DEBUG_RUSAGE
#define IHK_OS_PGSIZE_4KB 0
#define IHK_OS_PGSIZE_2MB 1
#define IHK_OS_PGSIZE_1GB 2
extern struct ihk_os_monitor *monitor;
extern int sprintf(char * buf, const char *fmt, ...);
#define DEBUG_ARCH_RUSAGE
#ifdef DEBUG_ARCH_RUSAGE
#define dprintf(...) \
do { \
char msg[1024]; \
sprintf(msg, __VA_ARGS__); \
kprintf("%s,%s", __FUNCTION__, msg); \
} while (0);
#define eprintf(...) \
do { \
char msg[1024]; \
sprintf(msg, __VA_ARGS__); \
kprintf("%s,%s", __FUNCTION__, msg); \
} while (0);
#else
#define dprintf(...) do { } while (0)
#define eprintf(...) \
do { \
char msg[1024]; \
sprintf(msg, __VA_ARGS__); \
kprintf("%s,%s", __FUNCTION__, msg); \
} while (0);
#endif
static inline int rusage_pgsize_to_pgtype(size_t pgsize)
{
int ret = IHK_OS_PGSIZE_4KB;
#if 0 /* postk-TODO */
switch (pgsize) {
case PTL1_SIZE:
ret = IHK_OS_PGSIZE_4KB;
break;
case PTL2_SIZE:
ret = IHK_OS_PGSIZE_2MB;
break;
case PTL3_SIZE:
ret = IHK_OS_PGSIZE_1GB;
break;
default:
eprintf("unknown pgsize=%ld\n", pgsize);
break;
}
#endif
return ret;
}
#endif /* !defined(ARCH_RUSAGE_H_INCLUDED) */

View File

@ -1,33 +0,0 @@
#ifndef ARCH_RUSAGE_H_INCLUDED
#define ARCH_RUSAGE_H_INCLUDED
#include <arch-memory.h>
#define DEBUG_RUSAGE
#define IHK_OS_PGSIZE_4KB 0
#define IHK_OS_PGSIZE_2MB 1
#define IHK_OS_PGSIZE_1GB 2
extern struct rusage_global rusage;
static inline int rusage_pgsize_to_pgtype(size_t pgsize)
{
int ret = IHK_OS_PGSIZE_4KB;
if (pgsize == PTL1_SIZE) {
ret = IHK_OS_PGSIZE_4KB;
}
else if (pgsize == PTL2_SIZE) {
ret = IHK_OS_PGSIZE_2MB;
}
else if (pgsize == PTL3_SIZE) {
ret = IHK_OS_PGSIZE_1GB;
}
else {
kprintf("%s: Error: Unknown pgsize=%ld\n", __FUNCTION__, pgsize);
}
return ret;
}
#endif /* !defined(ARCH_RUSAGE_H_INCLUDED) */

View File

@ -1,32 +0,0 @@
#ifndef ARCH_RUSAGE_H_INCLUDED
#define ARCH_RUSAGE_H_INCLUDED
#define DEBUG_RUSAGE
#define IHK_OS_PGSIZE_4KB 0
#define IHK_OS_PGSIZE_2MB 1
#define IHK_OS_PGSIZE_1GB 2
extern struct rusage_global rusage;
static inline int rusage_pgsize_to_pgtype(size_t pgsize)
{
int ret = IHK_OS_PGSIZE_4KB;
switch (pgsize) {
case PTL1_SIZE:
ret = IHK_OS_PGSIZE_4KB;
break;
case PTL2_SIZE:
ret = IHK_OS_PGSIZE_2MB;
break;
case PTL3_SIZE:
ret = IHK_OS_PGSIZE_1GB;
break;
default:
kprintf("%s: Error: Unknown pgsize=%ld\n", __FUNCTION__, pgsize);
break;
}
return ret;
}
#endif /* !defined(ARCH_RUSAGE_H_INCLUDED) */

View File

@ -1,27 +0,0 @@
#ifndef IHKLIB_RUSAGE_H_INCLUDED
#define IHKLIB_RUSAGE_H_INCLUDED
#define IHK_MAX_NUM_PGSIZES 4
#define IHK_MAX_NUM_NUMA_NODES 1024
#define IHK_MAX_NUM_CPUS 1024
#define IHK_OS_PGSIZE_4KB 0
#define IHK_OS_PGSIZE_2MB 1
#define IHK_OS_PGSIZE_1GB 2
struct mckernel_rusage {
unsigned long memory_stat_rss[IHK_MAX_NUM_PGSIZES];
unsigned long memory_stat_mapped_file[IHK_MAX_NUM_PGSIZES];
unsigned long memory_max_usage;
unsigned long memory_kmem_usage;
unsigned long memory_kmem_max_usage;
unsigned long memory_numa_stat[IHK_MAX_NUM_NUMA_NODES];
unsigned long cpuacct_stat_system;
unsigned long cpuacct_stat_user;
unsigned long cpuacct_usage;
unsigned long cpuacct_usage_percpu[IHK_MAX_NUM_CPUS];
int num_threads;
int max_num_threads;
};
#endif /* !defined(IHKLIB_RUSAGE_H_INCLUDED) */

View File

@ -44,7 +44,6 @@
#include <config.h>
#include "mcctrl.h"
#include <ihk/ihk_host_user.h>
#include <ihklib_rusage.h>
#include <rusage.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
#include <uapi/linux/sched/types.h>
@ -2376,7 +2375,7 @@ long mcctrl_getrusage(ihk_os_t ihk_os, struct mcctrl_ioctl_getrusage_desc *__use
{
struct mcctrl_ioctl_getrusage_desc desc;
struct rusage_global *rusage_global = ihk_os_get_rusage(ihk_os);
struct mckernel_rusage *rusage = NULL;
struct ihk_os_rusage *rusage = NULL;
int ret = 0;
int i;
unsigned long ut;
@ -2388,13 +2387,13 @@ long mcctrl_getrusage(ihk_os_t ihk_os, struct mcctrl_ioctl_getrusage_desc *__use
goto out;
}
rusage = kmalloc(sizeof(struct mckernel_rusage), GFP_KERNEL);
rusage = kmalloc(sizeof(struct ihk_os_rusage), GFP_KERNEL);
if (!rusage) {
printk("%s: kmalloc failed\n", __FUNCTION__);
ret = -ENOMEM;
goto out;
}
memset(rusage, 0, sizeof(struct mckernel_rusage));
memset(rusage, 0, sizeof(struct ihk_os_rusage));
/* Compile statistics */
for (i = 0; i < IHK_MAX_NUM_PGSIZES; i++) {
@ -2422,8 +2421,10 @@ long mcctrl_getrusage(ihk_os_t ihk_os, struct mcctrl_ioctl_getrusage_desc *__use
rusage->num_threads = rusage_global->num_threads;
rusage->max_num_threads = rusage_global->max_num_threads;
if (desc.size_rusage > sizeof(struct mckernel_rusage)) {
printk("%s: desc.size_rusage=%ld > sizeof(struct mckernel_rusage)=%ld\n", __FUNCTION__, desc.size_rusage, sizeof(struct mckernel_rusage));
if (desc.size_rusage > sizeof(struct ihk_os_rusage)) {
printk("%s: desc.size_rusage=%ld > sizeof(struct mckernel_rusage)=%ld\n",
__func__, desc.size_rusage,
sizeof(struct ihk_os_rusage));
ret = -EINVAL;
goto out;
}

View File

@ -555,7 +555,7 @@ struct ihk_perf_event_attr{
};
struct mcctrl_ioctl_getrusage_desc {
void* rusage;
struct ihk_os_rusage *rusage;
size_t size_rusage;
};

View File

@ -77,7 +77,7 @@ install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/vmcore2mckdump"
DESTINATION "${CMAKE_INSTALL_BINDIR}")
install(TARGETS sched_yield ldump2mcdump
DESTINATION "${CMAKE_INSTALL_LIBDIR}")
install(FILES "../include/ihklib_rusage.h"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/mckernel")
install(FILES "${IHK_FULL_SOURCE_DIR}/linux/include/ihk/ihk_rusage.h"
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ihk")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mcexec.1"
DESTINATION "${CMAKE_INSTALL_MANDIR}/man1")

2
ihk

Submodule ihk updated: 58ed04c571...fc5807c12e

View File

@ -3,11 +3,50 @@
#ifndef __RUSAGE_H
#define __RUSAGE_H
#include <ihk/ihk_rusage.h>
//#define RUSAGE_DEBUG
#define IHK_MAX_NUM_PGSIZES 4
#define IHK_MAX_NUM_NUMA_NODES 1024
#define IHK_MAX_NUM_CPUS 1024
extern struct rusage_global rusage;
static inline int rusage_pgsize_to_pgtype(size_t pgsize)
{
int ret = IHK_OS_PGSIZE_4KB;
int pgshift = pgsize_to_pgshift(pgsize);
switch (pgshift) {
case 12:
ret = IHK_OS_PGSIZE_4KB;
break;
case 16:
ret = IHK_OS_PGSIZE_64KB;
break;
case 21:
ret = IHK_OS_PGSIZE_2MB;
break;
case 25:
ret = IHK_OS_PGSIZE_32MB;
break;
case 30:
ret = IHK_OS_PGSIZE_1GB;
break;
case 34:
ret = IHK_OS_PGSIZE_16GB;
break;
case 29:
ret = IHK_OS_PGSIZE_512MB;
break;
case 42:
ret = IHK_OS_PGSIZE_4TB;
break;
default:
kprintf("%s: Error: Unknown pgsize=%ld\n",
__func__, pgsize);
break;
}
return ret;
}
struct rusage_percpu {
unsigned long user_tsc;
@ -36,7 +75,7 @@ struct rusage_global {
#ifdef RUSAGE_DEBUG
unsigned long total_memory_max_usage_old; /* debug */
#endif
/* Used for translating results into struct mckernel_rusage */
/* Used for translating results into struct ihk_os_rusage */
unsigned long num_numa_nodes;
unsigned long num_processors;
unsigned long ns_per_tsc;

View File

@ -9,7 +9,6 @@
#include <memobj.h>
#include <rusage.h>
#include <ihk/ihk_monitor.h>
#include <arch_rusage.h>
#include <debug.h>
#ifdef ENABLE_RUSAGE

View File

@ -84,7 +84,7 @@ Interface for Heterogeneous Kernels and McKernel.
%{_libdir}/libldump2mcdump.so
%{_includedir}/ihklib.h
%{_includedir}/ihk/affinity.h
%{_includedir}/mckernel/ihklib_rusage.h
%{_includedir}/ihk/ihk_rusage.h
%{_sysconfdir}/irqbalance_mck.in
%{_sysconfdir}/irqbalance_mck.service
%{_mandir}/man1/mcreboot.1.gz

View File

@ -3,7 +3,6 @@
#include <stdlib.h>
#include <string.h>
#include <ihklib.h>
#include <mckernel/ihklib_rusage.h>
static void usage(char *cmd)
{
@ -16,7 +15,7 @@ int main(int argc, char *argv[])
int os_num = 0;
int ret = -1;
int i = 0;
struct mckernel_rusage mck_rusage;
struct ihk_os_rusage mck_rusage;
if (argc != 2) {
usage(argv[0]);

View File

@ -6,7 +6,6 @@
#include <sys/types.h>
#include <getopt.h>
#include <ihklib.h>
#include <mckernel/ihklib_rusage.h>
#include "util.h"
#include "mck_bps_conflict.h"
@ -37,7 +36,7 @@ int main(int argc, char **argv)
unsigned long memfree[4];
int num_pgsizes;
long pgsizes[3];
struct mckernel_rusage rusage;
struct ihk_os_rusage rusage;
char *retstr;
int boot_shutdown = 0;
int mcexec_shutdown = 0;

View File

@ -4,7 +4,6 @@
#include <sys/syscall.h> /* For SYS_xxx definitions */
#include "util.h"
#include "ihklib.h"
#include "mckernel/ihklib_rusage.h"
#define DEBUG
@ -21,7 +20,7 @@ int main(int argc, char **argv)
{
int i, j, ret = 0;
void *mem;
struct mckernel_rusage rusage;
struct ihk_os_rusage rusage;
for (j = 0; j < NLOOP; j++) {
mem = mmap(0, sz_anon[SZ_INDEX], PROT_READ | PROT_WRITE,

View File

@ -6,7 +6,6 @@
#include <sys/syscall.h> /* For SYS_xxx definitions */
#include "util.h"
#include "ihklib.h"
#include "mckernel/ihklib_rusage.h"
#define DEBUG
@ -23,7 +22,7 @@ int main(int argc, char **argv)
{
int i, j, ret = 0;
void *mem;
struct mckernel_rusage rusage;
struct ihk_os_rusage rusage;
pid_t pid;
int status;

View File

@ -7,7 +7,6 @@
#include <fcntl.h>
#include "util.h"
#include "ihklib.h"
#include "mckernel/ihklib_rusage.h"
#define DEBUG
@ -25,7 +24,7 @@ int main(int argc, char **argv)
int i, j, ret = 0;
void *mem;
int fd;
struct mckernel_rusage rusage;
struct ihk_os_rusage rusage;
fd = open("./file", O_RDWR);
CHKANDJUMP(fd == -1, 255, "open failed\n");

View File

@ -4,7 +4,6 @@
#include <sys/syscall.h> /* For SYS_xxx definitions */
#include "util.h"
#include "ihklib.h"
#include "mckernel/ihklib_rusage.h"
#define DEBUG
@ -21,7 +20,7 @@ int main(int argc, char **argv)
{
int i, j, ret = 0;
void *mem;
struct mckernel_rusage rusage;
struct ihk_os_rusage rusage;
for (j = 0; j < NLOOP; j++) {
mem = mmap(0, sz_anon[SZ_INDEX], PROT_READ | PROT_WRITE,

View File

@ -4,7 +4,6 @@
#include <unistd.h>
#include <errno.h>
#include "ihklib.h"
#include "mckernel/ihklib_rusage.h"
#include "util.h"
#define DELAY0 (100UL * 1000 * 1000)
@ -15,7 +14,7 @@
int main(int argc, char **argv)
{
int ret = 0;
struct mckernel_rusage rusage;
struct ihk_os_rusage rusage;
if ((ret = ihk_os_getrusage(0, &rusage, sizeof(rusage)))) {
fprintf(stderr, "%s: ihk_os_getrusage failed\n", __func__);

View File

@ -18,8 +18,7 @@
#include <ihklib.h>
#include <ihk/ihk_host_user.h>
#undef IHK_MAX_NUM_NUMA_NODES
#include <ihklib_rusage.h> // mckernel_rusage is defined here
#include <ihk/ihk_rusage.h> // ihk_os_rusage is defined here
#define MAX_CPUS 256
#define MiB100 (100*1024*1024) // 100 MiB
@ -29,7 +28,7 @@
#define UPDATE_COUNTER(c) (c = (c + 1) % 10)
struct my_rusage {
struct mckernel_rusage rusage;
struct ihk_os_rusage rusage;
/* Initial amount posted to allocator. Note that the amount
* used before the initialization is not included.
@ -137,7 +136,7 @@ mygetrusage(int idx, struct my_rusage *rbp)
unsigned long *memtotal = NULL;
rc = ihk_os_getrusage(idx, &rbp->rusage,
sizeof(struct mckernel_rusage));
sizeof(struct ihk_os_rusage));
if (rc) {
printf("%s: error: ihk_os_getrusage: %s\n",
__func__, strerror(-rc));