Re: new source of MIDI playback slow-down identified - 5a03b051ed87e72b959f32a86054e1142ac4cf55 thp: use compaction in kswapd for GFP_ATOMIC order > 0

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





Clemens Ladisch wrote, on 22/02/11 18:07:
Arthur Marsh wrote:
I'm experiencing MIDI playback slow-downs when I'm observing kswapd0
active (a few percent of cpu in top output) in recent kernels.

I git-bisected the problem down to:

commit 5a03b051ed87e72b959f32a86054e1142ac4cf55
Author: Andrea Arcangeli<aarcange@xxxxxxxxxx>
Date:   Thu Jan 13 15:47:11 2011 -0800

      thp: use compaction in kswapd for GFP_ATOMIC order>  0

      This takes advantage of memory compaction to properly generate pages of
      order>  0 if regular page reclaim fails and priority level becomes more
      severe and we don't reach the proper watermarks.

      Signed-off-by: Andrea Arcangeli<aarcange@xxxxxxxxxx>
      Signed-off-by: Andrew Morton<akpm@xxxxxxxxxxxxxxxxxxxx>
      Signed-off-by: Linus Torvalds<torvalds@xxxxxxxxxxxxxxxxxxxx>

I ran git-bisect over the weekend, building and installing ALSA 1.0.24
with each kernel. After identifying the above commit, I rebuilt the 2.6
head with that commit reverted and verified that the problem was no
longer present.

Apparently, huge page compaction disables interrupts for much too long.

MIDI playback was via aplaymidi -p 17:0 to a Soundblaster Audigy 2 ZS
(SB0350) wavetable.

The ALSA sequencer uses either the system timer or an HR timer at 1 kHz
to deliver MIDI commands (notes); the wavetable driver requires its own
interrupts in regular 5.3 ms intervals.


Regards,
Clemens


Hi, Andrea Arcangeli's "z1" patch (attached) solved the problem for me, even with significant swap activity.

Regards,

Arthur.
diff --git a/mm/vmscan.c b/mm/vmscan.c
index 17497d0..5718bca 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2385,7 +2385,6 @@ loop_again:
 		 * cause too much scanning of the lower zones.
 		 */
 		for (i = 0; i <= end_zone; i++) {
-			int compaction;
 			struct zone *zone = pgdat->node_zones + i;
 			int nr_slab;
 
@@ -2408,7 +2407,7 @@ loop_again:
 			 * zone has way too many pages free already.
 			 */
 			if (!zone_watermark_ok_safe(zone, order,
-					8*high_wmark_pages(zone), end_zone, 0))
+					high_wmark_pages(zone), end_zone, 0))
 				shrink_zone(priority, zone, &sc);
 			reclaim_state->reclaimed_slab = 0;
 			nr_slab = shrink_slab(sc.nr_scanned, GFP_KERNEL,
@@ -2416,24 +2415,23 @@ loop_again:
 			sc.nr_reclaimed += reclaim_state->reclaimed_slab;
 			total_scanned += sc.nr_scanned;
 
-			compaction = 0;
+#if 0
 			if (order &&
 			    zone_watermark_ok(zone, 0,
 					       high_wmark_pages(zone),
 					      end_zone, 0) &&
 			    !zone_watermark_ok(zone, order,
 					       high_wmark_pages(zone),
-					       end_zone, 0)) {
+					       end_zone, 0))
 				compact_zone_order(zone,
 						   order,
 						   sc.gfp_mask, false,
 						   COMPACT_MODE_KSWAPD);
-				compaction = 1;
-			}
+#endif
 
 			if (zone->all_unreclaimable)
 				continue;
-			if (!compaction && nr_slab == 0 &&
+			if (nr_slab == 0 &&
 			    !zone_reclaimable(zone))
 				zone->all_unreclaimable = 1;
 			/*
------------------------------------------------------------------------------
Index, Search & Analyze Logs and other IT data in Real-Time with Splunk 
Collect, index and harness all the fast moving IT data generated by your 
applications, servers and devices whether physical, virtual or in the cloud.
Deliver compliance at lower cost and gain new business insights. 
Free Software Download: http://p.sf.net/sfu/splunk-dev2dev
_______________________________________________
Alsa-user mailing list
Alsa-user@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-user

[Index of Archives]     [ALSA Devel]     [Linux Audio Users]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]

  Powered by Linux