[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