public inbox for linux-rt-users@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86/mm/cpa: avoid wbinvd() for PREEMPT_RT_FULL
@ 2017-01-20 22:42 John Ogness
  2017-01-21 14:19 ` Peter Zijlstra
  0 siblings, 1 reply; 5+ messages in thread
From: John Ogness @ 2017-01-20 22:42 UTC (permalink / raw)
  To: linux-rt-users; +Cc: Peter Zijlstra, Sebastian Andrzej Siewior

Although wbinvd() is faster than flushing many individual pages, it
blocks the memory bus for "long" periods of time (>100us), thus
directly causing unusually large latencies for PREEMPT_RT_FULL. For
1024 pages, flushing those pages individually can take up to 2200us,
but the task remains fully preemptible during that time.

Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: John Ogness <john.ogness@linutronix.de>
---
 arch/x86/mm/pageattr.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index e3353c9..a182477 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -214,7 +214,12 @@ static void cpa_flush_array(unsigned long *start, int numpages, int cache,
 			    int in_flags, struct page **pages)
 {
 	unsigned int i, level;
+#ifdef CONFIG_PREEMPT_RT_FULL
+	/* wbinvd() causes ugly latencies, avoid it */
+	unsigned long do_wbinvd = 0;
+#else
 	unsigned long do_wbinvd = cache && numpages >= 1024; /* 4M threshold */
+#endif
 
 	BUG_ON(irqs_disabled());
 
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-01-25 17:07 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-01-20 22:42 [PATCH] x86/mm/cpa: avoid wbinvd() for PREEMPT_RT_FULL John Ogness
2017-01-21 14:19 ` Peter Zijlstra
2017-01-25 16:12   ` Sebastian Andrzej Siewior
2017-01-25 16:24     ` Peter Zijlstra
2017-01-25 17:07       ` Sebastian Andrzej Siewior

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox