From 51cd7cbb6c79048c90b349d17fc0e5cfff5e810a Mon Sep 17 00:00:00 2001 From: Masamichi Takagi Date: Tue, 30 Jul 2019 11:45:38 +0900 Subject: [PATCH] arm64: rusage: Fix counting contiguous PTEs Change-Id: I7e89c25d49dc1f6efe1c27c76c66c6fedd22af1f Refs: #1342 --- arch/arm64/kernel/memory.c | 75 +++++++--- test/issues/1342/1342.sh | 14 ++ test/issues/1342/Makefile | 14 ++ test/issues/1342/README | 18 +++ test/issues/1342/get_rusage.c | 109 ++++++++++++++ test/issues/1342/issue_1325.c | 47 ++++++ test/issues/1342/match.pl | 20 +++ test/issues/1342/patch.ihk | 13 ++ test/issues/1342/patch.mck | 272 ++++++++++++++++++++++++++++++++++ 9 files changed, 559 insertions(+), 23 deletions(-) create mode 100755 test/issues/1342/1342.sh create mode 100644 test/issues/1342/Makefile create mode 100644 test/issues/1342/README create mode 100644 test/issues/1342/get_rusage.c create mode 100644 test/issues/1342/issue_1325.c create mode 100755 test/issues/1342/match.pl create mode 100644 test/issues/1342/patch.ihk create mode 100644 test/issues/1342/patch.mck diff --git a/arch/arm64/kernel/memory.c b/arch/arm64/kernel/memory.c index f5674f14..a84bc218 100644 --- a/arch/arm64/kernel/memory.c +++ b/arch/arm64/kernel/memory.c @@ -2671,17 +2671,28 @@ int set_range_l1(void *args0, pte_t *ptep, uintptr_t base, uintptr_t start, } phys = args->phys + (base - start); - if (__page_offset(base, PTL1_CONT_SIZE) == 0) { //check head pte + + /* Check if we can begin / end a series of contiguous PTEs */ + if (__page_offset(base, PTL1_CONT_SIZE) == 0) { uintptr_t next_addr = base + PTL1_CONT_SIZE; if (end < next_addr) { next_addr = end; } - // set contiguous bit until the next head pte - // if phys is aligned and range does not end early. + /* Begin the series if physical address is also aligned and + * the range covers the series. Don't start or end it if + * physical address is not aligned or the range ends early. + */ if (__page_offset(phys | next_addr, PTL1_CONT_SIZE) == 0) { args->attr[0] |= PTE_CONT; + if (rusage_memory_stat_add(args->range, phys, + PTL1_CONT_SIZE, + PTL1_CONT_SIZE)) { + dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", + phys, __func__, base, phys, + PTL1_CONT_SIZE, PTL1_CONT_SIZE); + } } else { args->attr[0] &= ~PTE_CONT; } @@ -2691,12 +2702,13 @@ int set_range_l1(void *args0, pte_t *ptep, uintptr_t base, uintptr_t start, error = 0; // call memory_stat_rss_add() here because pgshift is resolved here - if (rusage_memory_stat_add(args->range, phys, PTL1_SIZE, PTL1_SIZE)) { - dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", - phys, __func__, base, phys, PTL1_SIZE, PTL1_SIZE); - } else { - dkprintf("%s: !calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", - __func__, base, phys, PTL1_SIZE, PTL1_SIZE); + if (!(args->attr[0] & PTE_CONT)) { + if (rusage_memory_stat_add(args->range, phys, + PTL1_SIZE, PTL1_SIZE)) { + dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", + phys, __func__, base, phys, + PTL1_SIZE, PTL1_SIZE); + } } out: @@ -2760,7 +2772,9 @@ retry: phys = args->phys + (base - start); - //check head pte + /* Check if we can begin / end a series of + * contiguous PTEs + */ if (__page_offset(base, tbl.cont_pgsize) == 0) { uintptr_t next_addr = base + tbl.cont_pgsize; @@ -2769,11 +2783,24 @@ retry: next_addr = end; } - // set contiguous bit until the - // next head pte if phys is aligned - // and range does not end early. + /* Begin the series if physical address + * is also aligned and the range covers + * the series. Don't start or end it if + * physical address is not aligned or + * the range ends early. + */ if (__page_offset(phys | next_addr, tbl.cont_pgsize) == 0) { args->attr[level-1] |= PTE_CONT; + if (rusage_memory_stat_add(args->range, + phys, + tbl.cont_pgsize, + tbl.cont_pgsize)) { + dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", + phys, __func__, + base, phys, + tbl.cont_pgsize, + tbl.cont_pgsize); + } } else { args->attr[level-1] &= ~PTE_CONT; } @@ -2781,21 +2808,23 @@ retry: ptl_set(ptep, phys | args->attr[level-1], level); + error = 0; dkprintf("set_range_middle(%lx,%lx,%lx,%d):" "large page. %d %lx\n", base, start, end, level, error, *ptep); // Call memory_stat_rss_add() here because pgshift is resolved here - if (rusage_memory_stat_add(args->range, phys, - tbl.pgsize, - tbl.pgsize)) { - dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", - phys, __func__, base, phys, - tbl.pgsize, tbl.pgsize); - } else { - dkprintf("%s: !calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", - __func__, base, phys, - tbl.pgsize, tbl.pgsize); + if (!(args->attr[level-1] & PTE_CONT)) { + if (rusage_memory_stat_add(args->range, + phys, + tbl.pgsize, + tbl.pgsize)) { + dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", + phys, __func__, base, + phys, + tbl.pgsize, + tbl.pgsize); + } } goto out; } diff --git a/test/issues/1342/1342.sh b/test/issues/1342/1342.sh new file mode 100755 index 00000000..c58a2d79 --- /dev/null +++ b/test/issues/1342/1342.sh @@ -0,0 +1,14 @@ +echo "Don't forget to apply patch.mck and patch.ihk" + +. $HOME/.mck_test_config + +BOOTPARAM="-c 4-7 -m 512M@0" + +. ../../common.sh + +$BIN/mcexec ./get_rusage 0 +$BIN/mcexec ./issue_1325 +$BIN/mcexec ./get_rusage 0 + +$SBIN/ihkosctl 0 kmsg > ./log +cat ./log | perl match.pl > ./diff diff --git a/test/issues/1342/Makefile b/test/issues/1342/Makefile new file mode 100644 index 00000000..4354ad5a --- /dev/null +++ b/test/issues/1342/Makefile @@ -0,0 +1,14 @@ +include $(HOME)/.mck_test_config.mk + +CFLAGS=-g -O0 -Wall -I$(MCK_DIR)/include +LDFLAGS=-L$(MCK_DIR)/lib64 -lihk -Wl,-rpath=$(MCK_DIR)/lib64 + +all: + $(CC) $(CFLAGS) $(LDFLAGS) get_rusage.c -o get_rusage + $(CC) $(CFLAGS) issue_1325.c -o issue_1325 + +test: all + ./1342.sh + +clean: + rm -f get_rusage issue_1325 diff --git a/test/issues/1342/README b/test/issues/1342/README new file mode 100644 index 00000000..f8022457 --- /dev/null +++ b/test/issues/1342/README @@ -0,0 +1,18 @@ +========== +How to run +========== +$ (cd ; patch -p1 < test/issues/1342/patch.mck) +$ (cd ; patch -p1 < test/issues/1342/patch.ihk) +Build McKernel +$ make test +Check if "log" file contains "
+,..." and the size of "diff" +file is zero. + +================ +Test description +================ +(1) Show memory_stat_rss[] +(2) malloc 350 MB, touch the region, free it +(3) malloc 400 MB, touch the region, free it +(4) Show memory_stat_rss[], expecting the amounts are the same as in + (1) diff --git a/test/issues/1342/get_rusage.c b/test/issues/1342/get_rusage.c new file mode 100644 index 00000000..a9e0be72 --- /dev/null +++ b/test/issues/1342/get_rusage.c @@ -0,0 +1,109 @@ +/* get_rusage.c COPYRIGHT FUJITSU LIMITED 2019 */ +#include +#include +#include +#include +#include + +static void usage(char *cmd) +{ + printf("Usage:\n"); + printf(" %s \n", cmd); +} + +int main(int argc, char *argv[]) +{ + int os_num = 0; + int ret = -1; + int i = 0; + int nonzero = 0; + struct ihk_os_rusage mck_rusage; + + if (argc != 2) { + usage(argv[0]); + goto out; + } + + os_num = atoi(argv[1]); + if (os_num < 0 || 63 < os_num) { + printf("Invalid argument 1 os_num.\n"); + usage(argv[0]); + goto out; + } + + memset(&mck_rusage, 0, sizeof(mck_rusage)); + ret = ihk_os_getrusage(os_num, &mck_rusage, sizeof(mck_rusage)); + if (ret) { + perror("ihk_os_getrusage()"); + goto out; + } + + printf("show rusage:\n"); + nonzero = 0; + for (i = 0; i < IHK_MAX_NUM_PGSIZES; i++) { + if (mck_rusage.memory_stat_rss[i] != 0) { + printf(" memory_stat_rss[%d] : 0x%lx\n", i, + mck_rusage.memory_stat_rss[i]); + nonzero = 1; + } + } + + if (nonzero == 0) { + printf(" memory_stat_rss is all 0x0\n"); + } + + nonzero = 0; + for (i = 0; i < IHK_MAX_NUM_PGSIZES; i++) { + if (mck_rusage.memory_stat_mapped_file[i] != 0) { + printf(" memory_stat_mapped_file[%d] : 0x%lx\n", i, + mck_rusage.memory_stat_mapped_file[i]); + nonzero = 1; + } + } + + if (nonzero == 0) { + printf(" memory_stat_mapped_file is all 0x0\n"); + } + + printf(" memory_max_usage : 0x%lx\n", mck_rusage.memory_max_usage); + printf(" memory_kmem_usage : 0x%lx\n", mck_rusage.memory_kmem_usage); + printf(" memory_kmem_max_usage : 0x%lx\n", + mck_rusage.memory_kmem_max_usage); + + nonzero = 0; + for (i = 0; i < IHK_MAX_NUM_NUMA_NODES; i++) { + if (mck_rusage.memory_numa_stat[i] != 0) { + printf(" memory_numa_stat[%d] : 0x%lx\n", i, + mck_rusage.memory_numa_stat[i]); + nonzero = 1; + } + } + + if (nonzero == 0) { + printf(" memory_numa_stat is all 0x0\n"); + } + + printf(" cpuacct_stat_system : 0x%lx\n", + mck_rusage.cpuacct_stat_system); + printf(" cpuacct_stat_user : 0x%lx\n", mck_rusage.cpuacct_stat_user); + printf(" cpuacct_usage : 0x%lx\n", mck_rusage.cpuacct_usage); + + nonzero = 0; + for (i = 0; i < IHK_MAX_NUM_CPUS; i++) { + if (mck_rusage.cpuacct_usage_percpu[i] != 0) { + printf(" cpuacct_usage_percpu[%d] : 0x%lx\n", i, + mck_rusage.cpuacct_usage_percpu[i]); + nonzero = 1; + } + } + + if (nonzero == 0) { + printf(" cpuacct_usage_percpu is all 0x0\n"); + } + + printf(" num_threads : 0x%x\n", mck_rusage.num_threads); + printf(" max_num_threads : 0x%x\n", mck_rusage.max_num_threads); + +out: + return ret; +} diff --git a/test/issues/1342/issue_1325.c b/test/issues/1342/issue_1325.c new file mode 100644 index 00000000..4257a787 --- /dev/null +++ b/test/issues/1342/issue_1325.c @@ -0,0 +1,47 @@ +/* issue_1325.c COPYRIGHT FUJITSU LIMITED 2019 */ +#include +#include +#include + +/* for 512MiB allocated McKernel failure sizes */ +#define MALLOC1_SIZE (350 * 1024 * 1024) +#define MALLOC2_SIZE (400 * 1024 * 1024) + +int main(int argc, char *argv[]) +{ + const long pgsize = sysconf(_SC_PAGESIZE); + char *p1 = NULL; + char *p2 = NULL; + size_t off = 0; + int ret = -1; + + p1 = malloc(MALLOC1_SIZE); + if (p1 == NULL) { + printf("malloc1:allocate failed.\n"); + goto err; + } + printf("malloc1:allocate 0x%lx\n", (unsigned long)p1); + + for (off = 0; off < MALLOC1_SIZE; off += pgsize) { + *(p1 + off) = 'Z'; + } + printf("malloc1:access ok, free\n"); + free(p1); + + p2 = malloc(MALLOC2_SIZE); + if (p2 == NULL) { + printf("malloc2:allocate failed.\n"); + goto err; + } + printf("malloc2:allocate 0x%lx\n", (unsigned long)p2); + + for (off = 0; off < MALLOC2_SIZE; off += pgsize) { + *(p2 + off) = 'Z'; + } + printf("malloc2:access ok, free\n"); + free(p2); + + ret = 0; +err: + return ret; +} diff --git a/test/issues/1342/match.pl b/test/issues/1342/match.pl new file mode 100755 index 00000000..8a3d0903 --- /dev/null +++ b/test/issues/1342/match.pl @@ -0,0 +1,20 @@ +#!/usr/bin/perl + +while(<>) { + if(/\[\s+\d+\]\:\s([^+^ ]+)\+,/) { + $addr = $1; + $count{$addr}++; + #print $addr . "\n"; + } + if(/\[\s+\d+\]\:\s([^-^ ]+)\-,/) { + $addr = $1; + $count{$addr}--; + #print $addr . "\n"; + } +} + +foreach $key (sort keys(%count)) { + if($count{$key} != 0) { + print $key.",count=".$count{$key}."\n"; + } +} diff --git a/test/issues/1342/patch.ihk b/test/issues/1342/patch.ihk new file mode 100644 index 00000000..9750f2c7 --- /dev/null +++ b/test/issues/1342/patch.ihk @@ -0,0 +1,13 @@ +diff --git a/linux/include/ihk/ihk_debug.h b/linux/include/ihk/ihk_debug.h +index 9b53dd7..90ea713 100644 +--- a/linux/include/ihk/ihk_debug.h ++++ b/linux/include/ihk/ihk_debug.h +@@ -8,7 +8,7 @@ + #ifndef IHK_DEBUG_H_INCLUDED + #define IHK_DEBUG_H_INCLUDED + +-#define IHK_KMSG_SIZE 8192 ++#define IHK_KMSG_SIZE (1UL<<21) + #define IHK_KMSG_HIGH_WATER_MARK (IHK_KMSG_SIZE / 2) + #define IHK_KMSG_NOTIFY_DELAY 400 /* Unit is us, 400 us would avoid overloading fwrite of ihkmond */ + diff --git a/test/issues/1342/patch.mck b/test/issues/1342/patch.mck new file mode 100644 index 00000000..7ffa9b77 --- /dev/null +++ b/test/issues/1342/patch.mck @@ -0,0 +1,272 @@ +diff --git a/arch/arm64/kernel/memory.c b/arch/arm64/kernel/memory.c +index 30ec5eed..97d814b3 100644 +--- a/arch/arm64/kernel/memory.c ++++ b/arch/arm64/kernel/memory.c +@@ -1715,7 +1715,7 @@ static int split_large_page(pte_t *ptep, size_t pgsize) + } + tt[i] = pte; + if (pgsize == PTL3_SIZE) { +- dkprintf("%lx+,%s: calling memory_stat_rss_add(),size=%ld,pgsize=%ld\n", ++ kprintf("%lx+,%s: calling memory_stat_rss_add(),size=%ld,pgsize=%ld\n", + pte_is_fileoff(ptep, pgsize) ? + pte_get_off(&pte, pgsize) : + pte_get_phys(&pte), +@@ -1723,7 +1723,7 @@ static int split_large_page(pte_t *ptep, size_t pgsize) + memory_stat_rss_add(PTL2_SIZE, PTL2_SIZE); + } + else if (pgsize == PTL2_SIZE) { +- dkprintf("%lx+,%s: calling memory_stat_rss_add(),size=%ld,pgsize=%ld\n", ++ kprintf("%lx+,%s: calling memory_stat_rss_add(),size=%ld,pgsize=%ld\n", + pte_is_fileoff(ptep, pgsize) ? + pte_get_off(&pte, pgsize) : + pte_get_phys(&pte), +@@ -1737,7 +1737,7 @@ static int split_large_page(pte_t *ptep, size_t pgsize) + PFL_PDIR_TBL_ATTR; + ptl_set(ptep, d_table, table_level); + +- dkprintf("%lx-,%s: calling memory_stat_rss_sub(),size=%ld,pgsize=%ld\n", ++ kprintf("%lx-,%s: calling memory_stat_rss_sub(),size=%ld,pgsize=%ld\n", + phys_base, __func__, pgsize, pgsize); + memory_stat_rss_sub(pgsize, pgsize); + +@@ -2147,7 +2147,7 @@ static void unmap_free_stat(struct page *page, unsigned long phys, + if (!page || page_unmap(page)) { + ihk_mc_free_pages_user(phys_to_virt(phys), + free_size >> PAGE_SHIFT); +- dkprintf("%lx-,%s: memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", ++ kprintf("%lx-,%s: memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", + phys, func, phys, free_size, free_size); + memory_stat_rss_sub(free_size, free_size); + } +@@ -2689,7 +2689,7 @@ int set_range_l1(void *args0, pte_t *ptep, uintptr_t base, uintptr_t start, + if (rusage_memory_stat_add(args->range, phys, + PTL1_CONT_SIZE, + PTL1_CONT_SIZE)) { +- dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", ++ kprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", + phys, __func__, base, phys, + PTL1_CONT_SIZE, PTL1_CONT_SIZE); + } +@@ -2705,7 +2705,7 @@ int set_range_l1(void *args0, pte_t *ptep, uintptr_t base, uintptr_t start, + if (!(args->attr[0] & PTE_CONT)) { + if (rusage_memory_stat_add(args->range, phys, + PTL1_SIZE, PTL1_SIZE)) { +- dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", ++ kprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", + phys, __func__, base, phys, + PTL1_SIZE, PTL1_SIZE); + } +@@ -2795,7 +2795,7 @@ retry: + phys, + tbl.cont_pgsize, + tbl.cont_pgsize)) { +- dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", ++ kprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", + phys, __func__, + base, phys, + tbl.cont_pgsize, +@@ -2819,7 +2819,7 @@ retry: + phys, + tbl.pgsize, + tbl.pgsize)) { +- dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", ++ kprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", + phys, __func__, base, + phys, + tbl.pgsize, +diff --git a/arch/x86_64/kernel/memory.c b/arch/x86_64/kernel/memory.c +index df545e1b..c99db31e 100644 +--- a/arch/x86_64/kernel/memory.c ++++ b/arch/x86_64/kernel/memory.c +@@ -893,11 +893,11 @@ static int split_large_page(pte_t *ptep, size_t pgsize) + pt->entry[i] = pte; + switch(pgsize) { + case PTL3_SIZE: +- dkprintf("%lx+,%s: calling memory_stat_rss_add(),size=%ld,pgsize=%ld\n", pte_is_fileoff(ptep, pgsize) ? pte_get_off(&pte, pgsize) : pte_get_phys(&pte), __FUNCTION__, PTL2_SIZE, PTL2_SIZE); ++ kprintf("%lx+,%s: calling memory_stat_rss_add(),size=%ld,pgsize=%ld\n", pte_is_fileoff(ptep, pgsize) ? pte_get_off(&pte, pgsize) : pte_get_phys(&pte), __FUNCTION__, PTL2_SIZE, PTL2_SIZE); + memory_stat_rss_add(PTL2_SIZE, PTL2_SIZE); + break; + case PTL2_SIZE: +- dkprintf("%lx+,%s: calling memory_stat_rss_add(),size=%ld,pgsize=%ld\n", pte_is_fileoff(ptep, pgsize) ? pte_get_off(&pte, pgsize) : pte_get_phys(&pte), __FUNCTION__, PTL1_SIZE, PTL1_SIZE); ++ kprintf("%lx+,%s: calling memory_stat_rss_add(),size=%ld,pgsize=%ld\n", pte_is_fileoff(ptep, pgsize) ? pte_get_off(&pte, pgsize) : pte_get_phys(&pte), __FUNCTION__, PTL1_SIZE, PTL1_SIZE); + memory_stat_rss_add(PTL1_SIZE, PTL1_SIZE); + break; + } +@@ -906,7 +906,7 @@ static int split_large_page(pte_t *ptep, size_t pgsize) + + *ptep = (virt_to_phys(pt) & PT_PHYSMASK) | PFL2_PDIR_ATTR; + +- dkprintf("%lx-,%s: calling memory_stat_rss_sub(),size=%ld,pgsize=%ld\n", phys_base, __FUNCTION__, pgsize, pgsize); ++ kprintf("%lx-,%s: calling memory_stat_rss_sub(),size=%ld,pgsize=%ld\n", phys_base, __FUNCTION__, pgsize, pgsize); + memory_stat_rss_sub(pgsize, pgsize); + + /* Do not do this check for large pages as they don't come from the zeroobj +@@ -1410,7 +1410,7 @@ static int clear_range_l1(void *args0, pte_t *ptep, uint64_t base, + if (!args->memobj || !(args->memobj->flags & MF_XPMEM)) { + ihk_mc_free_pages_user(phys_to_virt(phys), 1); + dkprintf("%s: freeing regular page at 0x%lx\n", __FUNCTION__, base); +- dkprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL1_SIZE, PTL1_SIZE); ++ kprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL1_SIZE, PTL1_SIZE); + memory_stat_rss_sub(PTL1_SIZE, PTL1_SIZE); + } else { + dkprintf("%s: XPMEM attach,phys=%lx\n", __FUNCTION__, phys); +@@ -1419,7 +1419,7 @@ static int clear_range_l1(void *args0, pte_t *ptep, uint64_t base, + ihk_mc_free_pages_user(phys_to_virt(phys), 1); + dkprintf("%s: freeing file-backed page at 0x%lx\n", __FUNCTION__, base); + /* Track page->count for !MF_PREMAP pages */ +- dkprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL1_SIZE, PTL1_SIZE); ++ kprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL1_SIZE, PTL1_SIZE); + rusage_memory_stat_sub(args->memobj, PTL1_SIZE, PTL1_SIZE); + } + } else { +@@ -1479,7 +1479,7 @@ static int clear_range_l2(void *args0, pte_t *ptep, uint64_t base, + ihk_mc_free_pages_user(phys_to_virt(phys), + PTL2_SIZE/PTL1_SIZE); + dkprintf("%s: freeing large page at 0x%lx\n", __FUNCTION__, base); +- dkprintf("%lx-,%s: memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old),__FUNCTION__, pte_get_phys(&old), PTL2_SIZE, PTL2_SIZE); ++ kprintf("%lx-,%s: memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old),__FUNCTION__, pte_get_phys(&old), PTL2_SIZE, PTL2_SIZE); + memory_stat_rss_sub(PTL2_SIZE, PTL2_SIZE); + } else { + dkprintf("%s: XPMEM attach,phys=%lx\n", __FUNCTION__, phys); +@@ -1489,7 +1489,7 @@ static int clear_range_l2(void *args0, pte_t *ptep, uint64_t base, + PTL2_SIZE/PTL1_SIZE); + dkprintf("%s: having unmapped page-struct, freeing large page at 0x%lx\n", __FUNCTION__, base); + /* Track page->count for !MF_PREMAP pages */ +- dkprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL2_SIZE, PTL2_SIZE); ++ kprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL2_SIZE, PTL2_SIZE); + rusage_memory_stat_sub(args->memobj, PTL2_SIZE, PTL2_SIZE); + } + } +@@ -1563,7 +1563,7 @@ static int clear_range_l3(void *args0, pte_t *ptep, uint64_t base, + if (!args->memobj || !(args->memobj->flags & MF_XPMEM)) { + ihk_mc_free_pages_user(phys_to_virt(phys), + PTL3_SIZE/PTL1_SIZE); +- dkprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%ld,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL3_SIZE, PTL3_SIZE); ++ kprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%ld,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL3_SIZE, PTL3_SIZE); + memory_stat_rss_sub(PTL3_SIZE, PTL3_SIZE); + } else { + dkprintf("%s: XPMEM attach,phys=%lx\n", __FUNCTION__, phys); +@@ -1572,7 +1572,7 @@ static int clear_range_l3(void *args0, pte_t *ptep, uint64_t base, + ihk_mc_free_pages_user(phys_to_virt(phys), + PTL3_SIZE/PTL1_SIZE); + /* Track page->count for !MF_PREMAP pages */ +- dkprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL3_SIZE, PTL3_SIZE); ++ kprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", pte_get_phys(&old), __FUNCTION__, pte_get_phys(&old), PTL3_SIZE, PTL3_SIZE); + rusage_memory_stat_sub(args->memobj, PTL3_SIZE, PTL3_SIZE); + } + } +@@ -1895,7 +1895,7 @@ int set_range_l1(void *args0, pte_t *ptep, uintptr_t base, uintptr_t start, + error = 0; + // call memory_stat_rss_add() here because pgshift is resolved here + if (rusage_memory_stat_add(args->range, phys, PTL1_SIZE, PTL1_SIZE)) { +- dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", phys, __FUNCTION__, base, phys, PTL1_SIZE, PTL1_SIZE); ++ kprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", phys, __FUNCTION__, base, phys, PTL1_SIZE, PTL1_SIZE); + } else { + dkprintf("%s: !calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", __FUNCTION__, base, phys, PTL1_SIZE, PTL1_SIZE); + } +@@ -1933,7 +1933,7 @@ retry: + base, start, end, error, *ptep); + // Call memory_stat_rss_add() here because pgshift is resolved here + if (rusage_memory_stat_add(args->range, phys, PTL2_SIZE, PTL2_SIZE)) { +- dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", phys, __FUNCTION__, base, phys, PTL2_SIZE, PTL2_SIZE); ++ kprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", phys, __FUNCTION__, base, phys, PTL2_SIZE, PTL2_SIZE); + } else { + dkprintf("%s: !calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", __FUNCTION__, base, phys, PTL2_SIZE, PTL2_SIZE); + } +@@ -2022,7 +2022,7 @@ retry: + + // Call memory_stat_rss_add() here because pgshift is resolved here + if (rusage_memory_stat_add(args->range, phys, PTL3_SIZE, PTL3_SIZE)) { +- dkprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", phys, __FUNCTION__, base, phys, PTL3_SIZE, PTL3_SIZE); ++ kprintf("%lx+,%s: calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", phys, __FUNCTION__, base, phys, PTL3_SIZE, PTL3_SIZE); + } else { + dkprintf("%s: !calling memory_stat_rss_add(),base=%lx,phys=%lx,size=%ld,pgsize=%ld\n", __FUNCTION__, base, phys, PTL3_SIZE, PTL3_SIZE); + } +diff --git a/kernel/fileobj.c b/kernel/fileobj.c +index ed6dd1df..a3c7b6f5 100644 +--- a/kernel/fileobj.c ++++ b/kernel/fileobj.c +@@ -300,7 +300,7 @@ int fileobj_create(int fd, struct memobj **objp, int *maxprotp, int flags, + goto error_cleanup; + } + // Track change in memobj->pages[] for MF_PREMAP pages (MPOL_SHM_PREMAP case) +- dkprintf("%lx+,%s: MF_PREMAP&&MPOL_SHM_PREMAP,memory_stat_rss_add,phys=%lx,size=%ld,pgsize=%ld\n", virt_to_phys(mo->pages[j]), __FUNCTION__, virt_to_phys(mo->pages[j]), PAGE_SIZE, PAGE_SIZE); ++ kprintf("%lx+,%s: MF_PREMAP&&MPOL_SHM_PREMAP,memory_stat_rss_add,phys=%lx,size=%ld,pgsize=%ld\n", virt_to_phys(mo->pages[j]), __FUNCTION__, virt_to_phys(mo->pages[j]), PAGE_SIZE, PAGE_SIZE); + rusage_memory_stat_mapped_file_add(PAGE_SIZE, PAGE_SIZE); + + memset(mo->pages[j], 0, PAGE_SIZE); +@@ -390,7 +390,7 @@ static void fileobj_free(struct memobj *memobj) + /* Track change in page->count for !MF_PREMAP pages. + * It is decremented here or in clear_range() + */ +- dkprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", ++ kprintf("%lx-,%s: calling memory_stat_rss_sub(),phys=%lx,size=%ld,pgsize=%ld\n", + phys, __func__, phys, PAGE_SIZE, PAGE_SIZE); + rusage_memory_stat_mapped_file_sub(PAGE_SIZE, + PAGE_SIZE); +@@ -409,7 +409,7 @@ static void fileobj_free(struct memobj *memobj) + // Track change in fileobj->pages[] for MF_PREMAP pages + // Note that page_unmap() isn't called for MF_PREMAP in + // free_process_memory_range() --> ihk_mc_pt_free_range() +- dkprintf("%lx-,%s: memory_stat_rss_sub,phys=%lx,size=%ld,pgsize=%ld\n", ++ kprintf("%lx-,%s: memory_stat_rss_sub,phys=%lx,size=%ld,pgsize=%ld\n", + virt_to_phys(to_memobj(obj)->pages[i]), + __func__, + virt_to_phys(to_memobj(obj)->pages[i]), +@@ -595,7 +595,7 @@ static int fileobj_get_page(struct memobj *memobj, off_t off, + dkprintf("%s: MF_ZEROFILL: off: %lu -> 0x%lx allocated\n", + __FUNCTION__, off, virt_to_phys(virt)); + // Track change in memobj->pages[] for MF_PREMAP pages (!MPOL_SHM_PREMAP case) +- dkprintf("%lx+,%s: MF_PREMAP&&!MPOL_SHM_PREMAP,memory_stat_rss_add,phys=%lx,size=%ld,pgsize=%ld\n", virt_to_phys(virt), __FUNCTION__, virt_to_phys(virt), PAGE_SIZE, PAGE_SIZE); ++ kprintf("%lx+,%s: MF_PREMAP&&!MPOL_SHM_PREMAP,memory_stat_rss_add,phys=%lx,size=%ld,pgsize=%ld\n", virt_to_phys(virt), __FUNCTION__, virt_to_phys(virt), PAGE_SIZE, PAGE_SIZE); + rusage_memory_stat_mapped_file_add(PAGE_SIZE, PAGE_SIZE); + } + } +diff --git a/kernel/process.c b/kernel/process.c +index b63dba69..7e1fce7c 100644 +--- a/kernel/process.c ++++ b/kernel/process.c +@@ -1558,7 +1558,7 @@ static int remap_one_page(void *arg0, page_table_t pt, pte_t *ptep, + page = phys_to_page(phys); + if (page && page_unmap(page)) { + ihk_mc_free_pages_user(phys_to_virt(phys), pgsize/PAGE_SIZE); +- dkprintf("%lx-,%s: calling memory_stat_rss_sub(),size=%ld,pgsize=%ld\n", phys, __FUNCTION__, pgsize, pgsize); ++ kprintf("%lx-,%s: calling memory_stat_rss_sub(),size=%ld,pgsize=%ld\n", phys, __FUNCTION__, pgsize, pgsize); + rusage_memory_stat_sub(args->memobj, pgsize, pgsize); + } + +@@ -2022,12 +2022,12 @@ retry: + * (5) Reach here + */ + if (rusage_memory_stat_add(range, phys, pgsize, pgsize)) { +- dkprintf("%lx+,%s: COW-source pointed-to by only fileobj, calling memory_stat_rss_add(),pgsize=%ld\n", ++ kprintf("%lx+,%s: COW-source pointed-to by only fileobj, calling memory_stat_rss_add(),pgsize=%ld\n", + phys, __FUNCTION__, pgsize); + } + if (page) { + if (page_unmap(page)) { +- dkprintf("%lx-,%s: cow,calling memory_stat_rss_sub(),size=%ld,pgsize=%ld\n", phys, __FUNCTION__, pgsize, pgsize); ++ kprintf("%lx-,%s: cow,calling memory_stat_rss_sub(),size=%ld,pgsize=%ld\n", phys, __FUNCTION__, pgsize, pgsize); + rusage_memory_stat_sub(range->memobj, pgsize, pgsize); + } + } +@@ -2048,8 +2048,8 @@ retry: + if (!(reason & PF_PATCH) && + rusage_memory_stat_add(range, phys, pgsize, pgsize)) { + /* on-demand paging, phys pages are obtained by ihk_mc_alloc_aligned_pages_user() or get_page() */ +- dkprintf("%lx+,%s: (on-demand paging && first map) || cow,calling memory_stat_rss_add(),phys=%lx,pgsize=%ld\n", +- phys, __FUNCTION__, phys, pgsize); ++ kprintf("%lx+,%s: paging or cow,calling memory_stat_rss_add(),base=%lx,phys=%lx,pgsize=%ld\n", ++ phys, __FUNCTION__, fault_addr, phys, pgsize); + } else { + dkprintf("%s: !calling memory_stat_rss_add(),phys=%lx,pgsize=%ld\n", + __FUNCTION__, phys, pgsize); +@@ -2087,7 +2087,7 @@ out: + __FUNCTION__, page_to_phys(page), + range->start, range->end, range->flag, fault_addr, reason); + if (page_unmap(page)) { +- dkprintf("%lx-,%s: out,calling memory_stat_rss_sub(),size=%ld,pgsize=%ld\n", page_to_phys(page), __FUNCTION__, pgsize, pgsize); ++ kprintf("%lx-,%s: out,calling memory_stat_rss_sub(),size=%ld,pgsize=%ld\n", page_to_phys(page), __FUNCTION__, pgsize, pgsize); + rusage_memory_stat_sub(range->memobj, pgsize, pgsize); + } + }