[kernel/f15] thp: reduce khugepaged freezing latency (rhbz 771006)
Dave Jones
davej at fedoraproject.org
Tue Jan 3 15:23:48 UTC 2012
commit 2ec5a5f81db09785dfb4e47d0d5324016a6c02f4
Author: Dave Jones <davej at redhat.com>
Date: Tue Jan 3 10:21:36 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 7d60696..2b66d7f 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -724,6 +724,9 @@ Patch21047: iwlwifi-allow-to-switch-to-HT40-if-not-associated.patch
#rhbz 741117
Patch21048: b44-Use-dev_kfree_skb_irq-in-b44_tx.patch
+#rhbz 771006
+Patch21050: thp-reduce-khugepaged-freezing-latency.patch
+
Patch22000: route-cache-garbage-collector.patch
%endif
@@ -1345,6 +1348,9 @@ ApplyPatch iwlwifi-allow-to-switch-to-HT40-if-not-associated.patch
#rhbz 741117
ApplyPatch b44-Use-dev_kfree_skb_irq-in-b44_tx.patch
+#rhbz 771006
+ApplyPatch thp-reduce-khugepaged-freezing-latency.patch
+
ApplyPatch route-cache-garbage-collector.patch
# END OF PATCH APPLICATIONS
@@ -1994,6 +2000,9 @@ fi
# and build.
%changelog
+* Tue Jan 03 2012 Dave Jones <davej at redhat.com>
+- thp: reduce khugepaged freezing latency (rhbz 771006)
+
* Wed Dec 21 2011 Dave Jones <davej at redhat.com> 2.6.41.6-1
- Linux 3.1.6 (Fedora 2.6.31.6)
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