!31 在etmemd的memdcd引擎中添加userswap所需的页面过滤
Merge pull request !31 from yangxin/master
This commit is contained in:
commit
afbc2ddd64
99
0051-update-memdcd-engine-for-userswap.patch
Normal file
99
0051-update-memdcd-engine-for-userswap.patch
Normal 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
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Name: etmem
|
Name: etmem
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
Release: 9
|
Release: 10
|
||||||
Summary: etmem
|
Summary: etmem
|
||||||
License: Mulan PSL v2
|
License: Mulan PSL v2
|
||||||
URL: https://gitee.com/openeuler/etmem
|
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
|
Patch47: 0048-Commit-new-features-memRouter-and-userswap-to-etmem.patch
|
||||||
Patch48: 0049-Add-engine-memdcd-to-etmemd.patch
|
Patch48: 0049-Add-engine-memdcd-to-etmemd.patch
|
||||||
Patch49: 0050-Add-CMakeLists.txt-for-three-features-of-etmem.patch
|
Patch49: 0050-Add-CMakeLists.txt-for-three-features-of-etmem.patch
|
||||||
|
Patch50: 0051-update-memdcd-engine-for-userswap.patch
|
||||||
|
|
||||||
#Dependency
|
#Dependency
|
||||||
BuildRequires: cmake gcc gcc-c++ glib2-devel
|
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
|
%postun -p /sbin/ldconfig
|
||||||
|
|
||||||
%changelog
|
%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
|
* Fri Oct 29 2021 liubo <liubo254@huawei.com> 1.0-9
|
||||||
- Add missing URL and source to etmem.spec
|
- Add missing URL and source to etmem.spec
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user