All of lore.kernel.org
 help / color / mirror / Atom feed
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.