Update memdcd engine for userswap page filter.

Filter out vmas without userswap flags in the memdcd engine.

Signed-off-by: YangXin <245051644@qq.com>
This commit is contained in:
YangXin 2021-12-16 12:25:31 +08:00 committed by Yangxin
parent a9ddc8b96f
commit 2eab52f2d0
2 changed files with 104 additions and 1 deletions

View File

@ -0,0 +1,99 @@
From 6b25858292a295ab928cd8bfb89715ecee2e600b Mon Sep 17 00:00:00 2001
From: yangxin <245051644@qq.com>
Date: Wed, 15 Dec 2021 10:19:43 +0000
Subject: [PATCH] update memdcd engine for userswap
Filter out vmas without userswap flags in the memdcd engine.
Signed-off-by: YangXin <245051644@qq.com>
---
etmem/src/etmemd_src/etmemd_memdcd.c | 54 ++++++++++++++++++++++++++--
1 file changed, 51 insertions(+), 3 deletions(-)
diff --git a/etmem/src/etmemd_src/etmemd_memdcd.c b/etmem/src/etmemd_src/etmemd_memdcd.c
index 635e5a2..28590e2 100644
--- a/etmem/src/etmemd_src/etmemd_memdcd.c
+++ b/etmem/src/etmemd_src/etmemd_memdcd.c
@@ -235,6 +235,54 @@ FREE_SWAP:
return ret;
}
+static struct page_refs *memdcd_do_scan(const struct task_pid *tpid, const struct task *tk)
+{
+ int i = 0;
+ struct vmas *vmas = NULL;
+ struct page_refs *page_refs = NULL;
+ int ret = 0;
+ char pid[PID_STR_MAX_LEN] = {0};
+ char *us = "us";
+
+ if(tpid == NULL) {
+ etmemd_log(ETMEMD_LOG_ERR, "task pid is null\n");
+ return NULL;
+ }
+
+ if (tk == NULL) {
+ etmemd_log(ETMEMD_LOG_ERR, "task struct is null for pid %u\n", tpid->pid);
+ return NULL;
+ }
+
+ if (snprintf_s(pid, PID_STR_MAX_LEN, PID_STR_MAX_LEN - 1, "%u", tpid->pid) <= 0) {
+ etmemd_log(ETMEMD_LOG_ERR, "snprintf pid fail %u", tpid->pid);
+ return NULL;
+ }
+ /* get vmas of target pid first. */
+ vmas = get_vmas_with_flags(pid, &us, 1, true);
+ if (vmas == NULL) {
+ etmemd_log(ETMEMD_LOG_ERR, "get vmas for %s fail\n", pid);
+ return NULL;
+ }
+
+ /* loop for scanning idle_pages to get result of memory access. */
+ for (i = 0; i < tk->eng->proj->loop; i++) {
+ ret = get_page_refs(vmas, pid, &page_refs, NULL, 0);
+ if (ret != 0) {
+ etmemd_log(ETMEMD_LOG_ERR, "scan operation failed\n");
+ /* free page_refs nodes already exist */
+ etmemd_free_page_refs(page_refs);
+ page_refs = NULL;
+ break;
+ }
+ sleep((unsigned)tk->eng->proj->sleep);
+ }
+
+ free_vmas(vmas);
+
+ return page_refs;
+}
+
static void *memdcd_executor(void *arg)
{
struct task_pid *tk_pid = (struct task_pid *)arg;
@@ -244,7 +292,7 @@ static void *memdcd_executor(void *arg)
/* register cleanup function in case of unexpected cancellation detected,
* and register for memory_grade first, because it needs to clean after page_refs is cleaned */
pthread_cleanup_push(clean_page_refs_unexpected, &page_refs);
- page_refs = etmemd_do_scan(tk_pid, tk_pid->tk);
+ page_refs = memdcd_do_scan(tk_pid, tk_pid->tk);
if (page_refs != NULL) {
if (memdcd_do_migrate(tk_pid->pid, page_refs, memdcd_params->memdcd_socket) != 0) {
etmemd_log(ETMEMD_LOG_WARN, "memdcd migrate for pid %u fail\n", tk_pid->pid);
@@ -290,13 +338,13 @@ static struct config_item g_memdcd_task_config_items[] = {
static int memdcd_fill_task(GKeyFile *config, struct task *tk)
{
struct memdcd_params *params = calloc(1, sizeof(struct memdcd_params));
- memset_s(params->memdcd_socket, MAX_SOCK_PATH_LENGTH, 0, MAX_SOCK_PATH_LENGTH);
-
if (params == NULL) {
etmemd_log(ETMEMD_LOG_ERR, "alloc memdcd param fail\n");
return -1;
}
+ memset_s(params->memdcd_socket, MAX_SOCK_PATH_LENGTH, 0, MAX_SOCK_PATH_LENGTH);
+
if (parse_file_config(config, TASK_GROUP, g_memdcd_task_config_items, ARRAY_SIZE(g_memdcd_task_config_items),
(void *)params) != 0) {
etmemd_log(ETMEMD_LOG_ERR, "memdcd fill task fail\n");
--
2.27.0

View File

@ -2,7 +2,7 @@
Name: etmem
Version: 1.0
Release: 9
Release: 10
Summary: etmem
License: Mulan PSL v2
URL: https://gitee.com/openeuler/etmem
@ -58,6 +58,7 @@ Patch46: 0047-move-all-the-files-to-sub-directory-of-etmem.patch
Patch47: 0048-Commit-new-features-memRouter-and-userswap-to-etmem.patch
Patch48: 0049-Add-engine-memdcd-to-etmemd.patch
Patch49: 0050-Add-CMakeLists.txt-for-three-features-of-etmem.patch
Patch50: 0051-update-memdcd-engine-for-userswap.patch
#Dependency
BuildRequires: cmake gcc gcc-c++ glib2-devel
@ -105,6 +106,9 @@ install -m 0644 userswap/include/uswap_api.h $RPM_BUILD_ROOT%{_includedir}
%postun -p /sbin/ldconfig
%changelog
* Fri Dec 15 2021 YangXin <245051644@qq.com> 1.0-10
- Update memdcd engine for userswap page filter.
* Fri Oct 29 2021 liubo <liubo254@huawei.com> 1.0-9
- Add missing URL and source to etmem.spec