etmem/0016-add-some-dfx-info.patch
YangXin ce6533c4bd Update etmem.
Signed-off-by: YangXin <245051644@qq.com>
2021-09-30 22:57:41 +08:00

123 lines
4.4 KiB
Diff

From 3ffad08c0870cabea2656de19047b558c53d7fbd Mon Sep 17 00:00:00 2001
From: Kemeng Shi <shikemeng@huawei.com>
Date: Thu, 29 Apr 2021 14:33:52 +0800
Subject: [PATCH 16/50] add some dfx info
Signed-off-by: Kemeng Shi <shikemeng@huawei.com>
---
src/etmemd_src/etmemd_cslide.c | 43 +++++++++++++++++++++++-----------
1 file changed, 29 insertions(+), 14 deletions(-)
diff --git a/src/etmemd_src/etmemd_cslide.c b/src/etmemd_src/etmemd_cslide.c
index 18a78d3..f311a44 100644
--- a/src/etmemd_src/etmemd_cslide.c
+++ b/src/etmemd_src/etmemd_cslide.c
@@ -1300,7 +1300,7 @@ static int cslide_scan_vmas(struct cslide_pid_params *params)
fd = fileno(scan_fp);
if (fd == -1) {
fclose(scan_fp);
- etmemd_log(ETMEMD_LOG_ERR, "fileno file fail for %s\n", IDLE_SCAN_FILE);
+ etmemd_log(ETMEMD_LOG_ERR, "task %u fileno file fail for %s\n", params->pid, IDLE_SCAN_FILE);
return -1;
}
for (i = 0; i < vmas->vma_cnt; i++) {
@@ -1309,7 +1309,7 @@ static int cslide_scan_vmas(struct cslide_pid_params *params)
walk_address.walk_start = vma->start;
walk_address.walk_end = vma->end;
if (walk_vmas(fd, &walk_address, &vma_pf->page_refs, NULL) == NULL) {
- etmemd_log(ETMEMD_LOG_ERR, "scan vma start %llu end %llu fail\n", vma->start, vma->end);
+ etmemd_log(ETMEMD_LOG_ERR, "task %u scan vma start %llu end %llu fail\n", params->pid, vma->start, vma->end);
fclose(scan_fp);
return -1;
}
@@ -1349,14 +1349,16 @@ static int cslide_do_scan(struct cslide_eng_params *eng_params)
return 0;
}
+// error return -1; success return moved pages number
static int do_migrate_pages(unsigned int pid, struct page_refs *page_refs, int node)
{
int batch_size = BATCHSIZE;
- int ret = -1;
+ int ret;
void **pages = NULL;
int *nodes = NULL;
int *status = NULL;
int actual_num = 0;
+ int moved = -1;
if (page_refs == NULL) {
return 0;
@@ -1379,6 +1381,8 @@ static int do_migrate_pages(unsigned int pid, struct page_refs *page_refs, int n
etmemd_log(ETMEMD_LOG_ERR, "malloc pages fail\n");
goto free_status;
}
+
+ moved = 0;
while (page_refs != NULL) {
pages[actual_num] = (void *)page_refs->addr;
nodes[actual_num] = node;
@@ -1386,11 +1390,13 @@ static int do_migrate_pages(unsigned int pid, struct page_refs *page_refs, int n
page_refs = page_refs->next;
if (actual_num == batch_size || page_refs == NULL) {
ret = move_pages(pid, actual_num, pages, nodes, status, MPOL_MF_MOVE_ALL);
- actual_num = 0;
if (ret != 0) {
etmemd_log(ETMEMD_LOG_ERR, "task %d move_pages fail with %d errno %d\n", pid, ret, errno);
+ moved = -1;
break;
}
+ moved += actual_num;
+ actual_num = 0;
}
}
@@ -1402,25 +1408,34 @@ free_status:
free_nodes:
free(nodes);
nodes = NULL;
- return ret;
+ return moved;
}
static int migrate_single_task(unsigned int pid, const struct memory_grade *memory_grade, int hot_node, int cold_node)
{
- int ret = -1;
+ int moved;
- if (do_migrate_pages(pid, memory_grade->cold_pages, cold_node) != 0) {
- etmemd_log(ETMEMD_LOG_ERR, "migrate cold pages fail\n");
- return ret;
+ moved = do_migrate_pages(pid, memory_grade->cold_pages, cold_node);
+ if (moved == -1) {
+ etmemd_log(ETMEMD_LOG_ERR, "task %u migrate cold pages fail\n", pid);
+ return -1;
+ }
+ if (moved != 0) {
+ etmemd_log(ETMEMD_LOG_INFO, "task %u move pages %lld KB from node %d to node %d\n",
+ pid, HUGE_2M_TO_KB((unsigned int)moved), hot_node, cold_node);
}
- if (do_migrate_pages(pid, memory_grade->hot_pages, hot_node) != 0) {
- etmemd_log(ETMEMD_LOG_ERR, "migrate hot pages fail\n");
- return ret;
+ moved = do_migrate_pages(pid, memory_grade->hot_pages, hot_node);
+ if (moved == -1) {
+ etmemd_log(ETMEMD_LOG_ERR, "task %u migrate hot pages fail\n", pid);
+ return -1;
+ }
+ if (moved != 0) {
+ etmemd_log(ETMEMD_LOG_INFO, "task %u move pages %lld KB from node %d to %d\n",
+ pid, HUGE_2M_TO_KB((unsigned int)moved), cold_node, hot_node);
}
- ret = 0;
- return ret;
+ return 0;
}
static int cslide_do_migrate(struct cslide_eng_params *eng_params)
--
2.27.0