diff for duplicates of <20131223021118.GA2487@lge.com> diff --git a/a/1.txt b/N1/1.txt index a4ab905..349e12c 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -68,3 +68,68 @@ Here goes the fix on top of this series. Thanks. -------------->8--------------------------- +>From 5f20459d90dfa2f7cd28d62194ce22bd9a0df0f5 Mon Sep 17 00:00:00 2001 +From: Joonsoo Kim <iamjoonsoo.kim@lge.com> +Date: Mon, 23 Dec 2013 10:32:04 +0900 +Subject: [PATCH] mm, hugetlb: optimize zeroing hugepage + +When parallel faults occur, someone would be failed. In this case, +cpu cycles for zeroing failed hugepage is wasted. To reduce this overhead, +mark the hugepage as zeroed hugepage after zeroing hugepage and unmark +it as non-zeroed hugepage after it is really used. If it isn't used with +any reason, it returns back to the hugepage pool and it will be used +sometime ago. At this time, we would see zeroed page marker and skip to +do zeroing. + +Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> + +diff --git a/mm/hugetlb.c b/mm/hugetlb.c +index 6edf423..b90b792 100644 +--- a/mm/hugetlb.c ++++ b/mm/hugetlb.c +@@ -582,6 +582,7 @@ static void update_and_free_page(struct hstate *h, struct page *page) + 1 << PG_private | 1 << PG_writeback); + } + VM_BUG_ON(hugetlb_cgroup_from_page(page)); ++ ClearPageActive(page); + set_compound_page_dtor(page, NULL); + set_page_refcounted(page); + arch_release_hugepage(page); +@@ -2715,6 +2716,7 @@ retry_avoidcopy: + spin_lock(ptl); + ptep = huge_pte_offset(mm, address & huge_page_mask(h)); + if (likely(pte_same(huge_ptep_get(ptep), pte))) { ++ ClearPageActive(new_page); + ClearPagePrivate(new_page); + + /* Break COW */ +@@ -2834,7 +2836,10 @@ retry: + } + goto out; + } +- clear_huge_page(page, address, pages_per_huge_page(h)); ++ if (!PageActive(page)) { ++ clear_huge_page(page, address, pages_per_huge_page(h)); ++ SetPageActive(page); ++ } + __SetPageUptodate(page); + + if (vma->vm_flags & VM_MAYSHARE) { +@@ -2850,6 +2855,7 @@ retry: + goto retry; + goto out; + } ++ ClearPageActive(page); + ClearPagePrivate(page); + if (do_dequeue) + commit_dequeued_huge_page(vma); +@@ -2901,6 +2907,7 @@ retry: + goto backout; + + if (anon_rmap) { ++ ClearPageActive(page); + ClearPagePrivate(page); + hugepage_add_new_anon_rmap(page, vma, address); + } +-- +1.7.9.5 diff --git a/a/content_digest b/N1/content_digest index bfc76e8..5bc0bdc 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -94,6 +94,71 @@ "Here goes the fix on top of this series.\n" "Thanks.\n" "\n" - -------------->8--------------------------- + "-------------->8---------------------------\n" + ">From 5f20459d90dfa2f7cd28d62194ce22bd9a0df0f5 Mon Sep 17 00:00:00 2001\n" + "From: Joonsoo Kim <iamjoonsoo.kim@lge.com>\n" + "Date: Mon, 23 Dec 2013 10:32:04 +0900\n" + "Subject: [PATCH] mm, hugetlb: optimize zeroing hugepage\n" + "\n" + "When parallel faults occur, someone would be failed. In this case,\n" + "cpu cycles for zeroing failed hugepage is wasted. To reduce this overhead,\n" + "mark the hugepage as zeroed hugepage after zeroing hugepage and unmark\n" + "it as non-zeroed hugepage after it is really used. If it isn't used with\n" + "any reason, it returns back to the hugepage pool and it will be used\n" + "sometime ago. At this time, we would see zeroed page marker and skip to\n" + "do zeroing.\n" + "\n" + "Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>\n" + "\n" + "diff --git a/mm/hugetlb.c b/mm/hugetlb.c\n" + "index 6edf423..b90b792 100644\n" + "--- a/mm/hugetlb.c\n" + "+++ b/mm/hugetlb.c\n" + "@@ -582,6 +582,7 @@ static void update_and_free_page(struct hstate *h, struct page *page)\n" + " \t\t\t\t1 << PG_private | 1 << PG_writeback);\n" + " \t}\n" + " \tVM_BUG_ON(hugetlb_cgroup_from_page(page));\n" + "+\tClearPageActive(page);\n" + " \tset_compound_page_dtor(page, NULL);\n" + " \tset_page_refcounted(page);\n" + " \tarch_release_hugepage(page);\n" + "@@ -2715,6 +2716,7 @@ retry_avoidcopy:\n" + " \tspin_lock(ptl);\n" + " \tptep = huge_pte_offset(mm, address & huge_page_mask(h));\n" + " \tif (likely(pte_same(huge_ptep_get(ptep), pte))) {\n" + "+\t\tClearPageActive(new_page);\n" + " \t\tClearPagePrivate(new_page);\n" + " \n" + " \t\t/* Break COW */\n" + "@@ -2834,7 +2836,10 @@ retry:\n" + " \t\t\t}\n" + " \t\t\tgoto out;\n" + " \t\t}\n" + "-\t\tclear_huge_page(page, address, pages_per_huge_page(h));\n" + "+\t\tif (!PageActive(page)) {\n" + "+\t\t\tclear_huge_page(page, address, pages_per_huge_page(h));\n" + "+\t\t\tSetPageActive(page);\n" + "+\t\t}\n" + " \t\t__SetPageUptodate(page);\n" + " \n" + " \t\tif (vma->vm_flags & VM_MAYSHARE) {\n" + "@@ -2850,6 +2855,7 @@ retry:\n" + " \t\t\t\t\tgoto retry;\n" + " \t\t\t\tgoto out;\n" + " \t\t\t}\n" + "+\t\t\tClearPageActive(page);\n" + " \t\t\tClearPagePrivate(page);\n" + " \t\t\tif (do_dequeue)\n" + " \t\t\t\tcommit_dequeued_huge_page(vma);\n" + "@@ -2901,6 +2907,7 @@ retry:\n" + " \t\tgoto backout;\n" + " \n" + " \tif (anon_rmap) {\n" + "+\t\tClearPageActive(page);\n" + " \t\tClearPagePrivate(page);\n" + " \t\thugepage_add_new_anon_rmap(page, vma, address);\n" + " \t}\n" + "-- \n" + 1.7.9.5 -10db77030f6e7101d9669fa905c481b7e0f40d40a141edcee8ff7d0309bf04c1 +c80bd762f4772ff1ad9fe8e6a8cbda7d1171c3d3d9c730f72c0e91834acdad3a
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.