Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1570741 > unrolled thread
| Started by | ysxie@foxmail.com |
|---|---|
| First post | 2017-01-31 14:30 +0100 |
| Last post | 2017-01-31 14:40 +0100 |
| Articles | 3 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH v5 0/4] HWPOISON: soft offlining for non-lru movable page ysxie@foxmail.com - 2017-01-31 14:30 +0100
[PATCH v5 2/4] mm/migration: make isolate_movable_page always defined ysxie@foxmail.com - 2017-01-31 14:30 +0100
[PATCH v5 3/4] HWPOISON: soft offlining for non-lru movable page ysxie@foxmail.com - 2017-01-31 14:40 +0100
| From | ysxie@foxmail.com |
|---|---|
| Date | 2017-01-31 14:30 +0100 |
| Subject | [PATCH v5 0/4] HWPOISON: soft offlining for non-lru movable page |
| Message-ID | <t5GFs-1cI-29@gated-at.bofh.it> |
From: Yisheng Xie <xieyisheng1@huawei.com>
Hi Andrew,
Could you please help to abandon the v3 of this patch for it will compile
error with CONFIG_MIGRATION=n, and it also has error path handling problem.
I am so sorry about troubling you.
Hi Michal, Minchan and all,
Could you please help to review it?
Any suggestion is more than welcome. And Thanks for all of you.
After Minchan's commit bda807d44454 ("mm: migrate: support non-lru movable
page migration"), some type of non-lru page like zsmalloc and virtio-balloon
page also support migration.
Therefore, we can:
1) soft offlining no-lru movable pages, which means when memory corrected
errors occur on a non-lru movable page, we can stop to use it by migrating
data onto another page and disable the original (maybe half-broken) one.
2) enable memory hotplug for non-lru movable pages, i.e. we may offline
blocks, which include such pages, by using non-lru page migration.
This patchset is heavily depend on non-lru movable page migration.
--------
v5:
* change the return type of isolate_movable_page() from bool to int as
Michal's suggestion.
* add "enable memory hotplug for non-lru movable pages" to this patchset,
which also make some change as Michal's suggestion here.
v4:
* make isolate_movable_page always defined to avoid compile error with
CONFIG_MIGRATION = n
* return -EBUSY when isolate_movable_page return false which means failed
to isolate movable page.
v3:
* delete some unneed limitation and use !__PageMovable instead of PageLRU
after isolate page to avoid isolated count mismatch, as Minchan Kim's suggestion.
v2:
* delete function soft_offline_movable_page() and hanle non-lru movable
page in __soft_offline_page() as Michal Hocko suggested.
Yisheng Xie (4):
mm/migration: make isolate_movable_page() return int type
mm/migration: make isolate_movable_page always defined
HWPOISON: soft offlining for non-lru movable page
mm/hotplug: enable memory hotplug for non-lru movable pages
include/linux/migrate.h | 4 +++-
mm/compaction.c | 2 +-
mm/memory-failure.c | 26 ++++++++++++++++----------
mm/memory_hotplug.c | 28 +++++++++++++++++-----------
mm/migrate.c | 11 +++++++----
mm/page_alloc.c | 8 ++++++--
6 files changed, 50 insertions(+), 29 deletions(-)
--
1.9.1
[toc] | [next] | [standalone]
| From | ysxie@foxmail.com |
|---|---|
| Date | 2017-01-31 14:30 +0100 |
| Subject | [PATCH v5 2/4] mm/migration: make isolate_movable_page always defined |
| Message-ID | <t5GFs-1cI-43@gated-at.bofh.it> |
| In reply to | #1570741 |
From: Yisheng Xie <xieyisheng1@huawei.com>
Define isolate_movable_page as a static inline function when
CONFIG_MIGRATION is not enable. It should return -EBUSY
here which means failed to isolate movable pages.
This patch do not have any functional change but prepare for
later patch.
Signed-off-by: Yisheng Xie <xieyisheng1@huawei.com>
Acked-by: Minchan Kim <minchan@kernel.org>
Suggested-by: Michal Hocko <mhocko@kernel.org>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
CC: Vlastimil Babka <vbabka@suse.cz>
---
include/linux/migrate.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/include/linux/migrate.h b/include/linux/migrate.h
index 43d5deb..fa76b51 100644
--- a/include/linux/migrate.h
+++ b/include/linux/migrate.h
@@ -56,6 +56,8 @@ static inline int migrate_pages(struct list_head *l, new_page_t new,
free_page_t free, unsigned long private, enum migrate_mode mode,
int reason)
{ return -ENOSYS; }
+static inline int isolate_movable_page(struct page *page, isolate_mode_t mode)
+ { return -EBUSY; }
static inline int migrate_prep(void) { return -ENOSYS; }
static inline int migrate_prep_local(void) { return -ENOSYS; }
--
1.9.1
[toc] | [prev] | [next] | [standalone]
| From | ysxie@foxmail.com |
|---|---|
| Date | 2017-01-31 14:40 +0100 |
| Subject | [PATCH v5 3/4] HWPOISON: soft offlining for non-lru movable page |
| Message-ID | <t5GP8-1fU-19@gated-at.bofh.it> |
| In reply to | #1570741 |
From: Yisheng Xie <xieyisheng1@huawei.com>
This patch is to extends soft offlining framework to support
non-lru page, which already support migration after
commit bda807d44454 ("mm: migrate: support non-lru movable page
migration")
When memory corrected errors occur on a non-lru movable page,
we can choose to stop using it by migrating data onto another
page and disable the original (maybe half-broken) one.
Signed-off-by: Yisheng Xie <xieyisheng1@huawei.com>
Suggested-by: Michal Hocko <mhocko@kernel.org>
Suggested-by: Minchan Kim <minchan@kernel.org>
Reviewed-by: Minchan Kim <minchan@kernel.org>
Acked-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
CC: Vlastimil Babka <vbabka@suse.cz>
---
mm/memory-failure.c | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index f283c7e..3d0f2fd 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -1527,7 +1527,8 @@ static int get_any_page(struct page *page, unsigned long pfn, int flags)
{
int ret = __get_any_page(page, pfn, flags);
- if (ret == 1 && !PageHuge(page) && !PageLRU(page)) {
+ if (ret == 1 && !PageHuge(page) &&
+ !PageLRU(page) && !__PageMovable(page)) {
/*
* Try to free it.
*/
@@ -1649,7 +1650,10 @@ static int __soft_offline_page(struct page *page, int flags)
* Try to migrate to a new page instead. migrate.c
* handles a large number of cases for us.
*/
- ret = isolate_lru_page(page);
+ if (PageLRU(page))
+ ret = isolate_lru_page(page);
+ else
+ ret = isolate_movable_page(page, ISOLATE_UNEVICTABLE);
/*
* Drop page reference which is came from get_any_page()
* successful isolate_lru_page() already took another one.
@@ -1657,18 +1661,20 @@ static int __soft_offline_page(struct page *page, int flags)
put_hwpoison_page(page);
if (!ret) {
LIST_HEAD(pagelist);
- inc_node_page_state(page, NR_ISOLATED_ANON +
- page_is_file_cache(page));
+ /*
+ * After isolated lru page, the PageLRU will be cleared,
+ * so use !__PageMovable instead for LRU page's mapping
+ * cannot have PAGE_MAPPING_MOVABLE.
+ */
+ if (!__PageMovable(page))
+ inc_node_page_state(page, NR_ISOLATED_ANON +
+ page_is_file_cache(page));
list_add(&page->lru, &pagelist);
ret = migrate_pages(&pagelist, new_page, NULL, MPOL_MF_MOVE_ALL,
MIGRATE_SYNC, MR_MEMORY_FAILURE);
if (ret) {
- if (!list_empty(&pagelist)) {
- list_del(&page->lru);
- dec_node_page_state(page, NR_ISOLATED_ANON +
- page_is_file_cache(page));
- putback_lru_page(page);
- }
+ if (!list_empty(&pagelist))
+ putback_movable_pages(&pagelist);
pr_info("soft offline: %#lx: migration failed %d, type %lx\n",
pfn, ret, page->flags);
--
1.9.1
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web