[kernel/f16] thp: reduce khugepaged freezing latency (rhbz 771006)

Dave Jones davej at fedoraproject.org
Tue Jan 3 15:22:54 UTC 2012


commit 2205c1a917064d60ac6981e733b51001e1d08b40
Author: Dave Jones <davej at redhat.com>
Date:   Tue Jan 3 10:22:41 2012 -0500

    thp: reduce khugepaged freezing latency (rhbz 771006)

 kernel.spec                                  |    9 ++++
 thp-reduce-khugepaged-freezing-latency.patch |   54 ++++++++++++++++++++++++++
 2 files changed, 63 insertions(+), 0 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index ed65792..822afc3 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -846,6 +846,9 @@ Patch21048: b44-Use-dev_kfree_skb_irq-in-b44_tx.patch
 #rhbz 746097
 Patch21049: tpm_tis-delay-after-aborting-cmd.patch
 
+#rhbz 771006
+Patch21050: thp-reduce-khugepaged-freezing-latency.patch
+
 # compat-wireless patches
 Patch50000: compat-wireless-config-fixups.patch
 Patch50001: compat-wireless-change-CONFIG_IWLAGN-CONFIG_IWLWIFI.patch
@@ -1575,6 +1578,9 @@ ApplyPatch b44-Use-dev_kfree_skb_irq-in-b44_tx.patch
 #rhbz 746097
 ApplyPatch tpm_tis-delay-after-aborting-cmd.patch
 
+#rhbz 771006
+ApplyPatch thp-reduce-khugepaged-freezing-latency.patch
+
 ApplyPatch route-cache-garbage-collector.patch
 
 # END OF PATCH APPLICATIONS
@@ -2352,6 +2358,9 @@ fi
 # and build.
 
 %changelog
+* Tue Jan 03 2012 Dave Jones <davej at redhat.com>
+- thp: reduce khugepaged freezing latency (rhbz 771006)
+
 * Tue Jan  3 2012 John W. Linville <linville at redhat.com> 
 - Re-enable CONFIG_RT2800PCI_RT53XX in compat-wireless build (rhbz #720594)
 
diff --git a/thp-reduce-khugepaged-freezing-latency.patch b/thp-reduce-khugepaged-freezing-latency.patch
new file mode 100644
index 0000000..b7b2051
--- /dev/null
+++ b/thp-reduce-khugepaged-freezing-latency.patch
@@ -0,0 +1,54 @@
+From: Andrea Arcangeli <aarcange at redhat.com>
+Subject: thp: reduce khugepaged freezing latency
+
+Use wait_event_freezable_timeout() instead of
+schedule_timeout_interruptible() to avoid missing freezer wakeups. A
+try_to_freeze() would have been needed in the
+khugepaged_alloc_hugepage tight loop too in case of the allocation
+failing repeatedly, and wait_event_freezable_timeout will provide it
+too.
+
+khugepaged would still freeze just fine by trying again the next
+minute but it's better if it freezes immediately.
+
+Reported-by: Jiri Slaby <jslaby at suse.cz>
+Signed-off-by: Andrea Arcangeli <aarcange at redhat.com>
+
+diff --git a/mm/huge_memory.c b/mm/huge_memory.c
+index 4298aba..fd925d0 100644
+--- a/mm/huge_memory.c
++++ b/mm/huge_memory.c
+@@ -2259,12 +2259,9 @@ static void khugepaged_do_scan(struct page **hpage)
+ 
+ static void khugepaged_alloc_sleep(void)
+ {
+-	DEFINE_WAIT(wait);
+-	add_wait_queue(&khugepaged_wait, &wait);
+-	schedule_timeout_interruptible(
+-		msecs_to_jiffies(
+-			khugepaged_alloc_sleep_millisecs));
+-	remove_wait_queue(&khugepaged_wait, &wait);
++	wait_event_freezable_timeout(khugepaged_wait, false,
++				     msecs_to_jiffies(
++					     khugepaged_alloc_sleep_millisecs));
+ }
+ 
+ #ifndef CONFIG_NUMA
+@@ -2313,14 +2310,11 @@ static void khugepaged_loop(void)
+ 		if (unlikely(kthread_should_stop()))
+ 			break;
+ 		if (khugepaged_has_work()) {
+-			DEFINE_WAIT(wait);
+ 			if (!khugepaged_scan_sleep_millisecs)
+ 				continue;
+-			add_wait_queue(&khugepaged_wait, &wait);
+-			schedule_timeout_interruptible(
++			wait_event_freezable_timeout(khugepaged_wait, false,
+ 				msecs_to_jiffies(
+ 					khugepaged_scan_sleep_millisecs));
+-			remove_wait_queue(&khugepaged_wait, &wait);
+ 		} else if (khugepaged_enabled())
+ 			wait_event_freezable(khugepaged_wait,
+ 					     khugepaged_wait_event());
+
+  


More information about the scm-commits mailing list