1. 23 3月, 2011 4 次提交
    • A
      mm: compaction: minimise the time IRQs are disabled while isolating pages for migration · b2eef8c0
      Andrea Arcangeli 提交于
      compaction_alloc() isolates pages for migration in isolate_migratepages.
      While it's scanning, IRQs are disabled on the mistaken assumption the
      scanning should be short.  Tests show this to be true for the most part
      but contention times on the LRU lock can be increased.  Before this patch,
      the IRQ disabled times for a simple test looked like
      
        Total sampled time IRQs off (not real total time): 5493
        Event shrink_inactive_list..shrink_zone                  1596 us count 1
        Event shrink_inactive_list..shrink_zone                  1530 us count 1
        Event shrink_inactive_list..shrink_zone                   956 us count 1
        Event shrink_inactive_list..shrink_zone                   541 us count 1
        Event shrink_inactive_list..shrink_zone                   531 us count 1
        Event split_huge_page..add_to_swap                        232 us count 1
        Event save_args..call_softirq                              36 us count 1
        Event save_args..call_softirq                              35 us count 2
        Event __wake_up..__wake_up                                  1 us count 1
      
      This patch reduces the worst-case IRQs-disabled latencies by releasing the
      lock every SWAP_CLUSTER_MAX pages that are scanned and releasing the CPU if
      necessary. The cost of this is that the processing performing compaction will
      be slower but IRQs being disabled for too long a time has worse consequences
      as the following report shows;
      
        Total sampled time IRQs off (not real total time): 4367
        Event shrink_inactive_list..shrink_zone                   881 us count 1
        Event shrink_inactive_list..shrink_zone                   875 us count 1
        Event shrink_inactive_list..shrink_zone                   868 us count 1
        Event shrink_inactive_list..shrink_zone                   555 us count 1
        Event split_huge_page..add_to_swap                        495 us count 1
        Event compact_zone..compact_zone_order                    269 us count 1
        Event split_huge_page..add_to_swap                        266 us count 1
        Event shrink_inactive_list..shrink_zone                    85 us count 1
        Event save_args..call_softirq                              36 us count 2
        Event __wake_up..__wake_up                                  1 us count 1
      
      [akpm@linux-foundation.org: simplify with s/unlocked/locked/]
      Signed-off-by: NAndrea Arcangeli <aarcange@redhat.com>
      Signed-off-by: NMel Gorman <mel@csn.ul.ie>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Arthur Marsh <arthur.marsh@internode.on.net>
      Cc: Clemens Ladisch <cladisch@googlemail.com>
      Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
      Cc: Minchan Kim <minchan.kim@gmail.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      b2eef8c0
    • M
      mm: compaction: minimise the time IRQs are disabled while isolating free pages · 602605a4
      Mel Gorman 提交于
      compaction_alloc() isolates free pages to be used as migration targets.
      While its scanning, IRQs are disabled on the mistaken assumption the
      scanning should be short.  Analysis showed that IRQs were in fact being
      disabled for substantial time.  A simple test was run using large
      anonymous mappings with transparent hugepage support enabled to trigger
      frequent compactions.  A monitor sampled what the worst IRQ-off latencies
      were and a post-processing tool found the following;
      
        Total sampled time IRQs off (not real total time): 22355
        Event compaction_alloc..compaction_alloc                 8409 us count 1
        Event compaction_alloc..compaction_alloc                 7341 us count 1
        Event compaction_alloc..compaction_alloc                 2463 us count 1
        Event compaction_alloc..compaction_alloc                 2054 us count 1
        Event shrink_inactive_list..shrink_zone                  1864 us count 1
        Event shrink_inactive_list..shrink_zone                    88 us count 1
        Event save_args..call_softirq                              36 us count 1
        Event save_args..call_softirq                              35 us count 2
        Event __make_request..__blk_run_queue                      24 us count 1
        Event __alloc_pages_nodemask..__alloc_pages_nodemask        6 us count 1
      
      i.e.  compaction is disabled IRQs for a prolonged period of time - 8ms in
      one instance.  The full report generated by the tool can be found at
      
       http://www.csn.ul.ie/~mel/postings/minfree-20110225/irqsoff-vanilla-micro.report
      
      This patch reduces the time IRQs are disabled by simply disabling IRQs at
      the last possible minute.  An updated IRQs-off summary report then looks
      like;
      
        Total sampled time IRQs off (not real total time): 5493
        Event shrink_inactive_list..shrink_zone                  1596 us count 1
        Event shrink_inactive_list..shrink_zone                  1530 us count 1
        Event shrink_inactive_list..shrink_zone                   956 us count 1
        Event shrink_inactive_list..shrink_zone                   541 us count 1
        Event shrink_inactive_list..shrink_zone                   531 us count 1
        Event split_huge_page..add_to_swap                        232 us count 1
        Event save_args..call_softirq                              36 us count 1
        Event save_args..call_softirq                              35 us count 2
        Event __wake_up..__wake_up                                  1 us count 1
      
      A full report is again available at
      
        http://www.csn.ul.ie/~mel/postings/minfree-20110225/irqsoff-minimiseirq-free-v1r4-micro.report
      
      As should be obvious, IRQ disabled latencies due to compaction are
      almost elimimnated for this particular test.
      
      [aarcange@redhat.com: Fix initialisation of isolated]
      Signed-off-by: NMel Gorman <mel@csn.ul.ie>
      Acked-by: NJohannes Weiner <hannes@cmpxchg.org>
      Reviewed-by: NKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujisu.com>
      Reviewed-by: NMinchan Kim <minchan.kim@gmail.com>
      Acked-by: NAndrea Arcangeli <aarcange@redhat.com>
      Cc: Arthur Marsh <arthur.marsh@internode.on.net>
      Cc: Clemens Ladisch <cladisch@googlemail.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      602605a4
    • M
      mm/compaction: check migrate_pages's return value instead of list_empty() · 9d502c1c
      Minchan Kim 提交于
      Many migrate_page's caller check return value instead of list_empy by
      cf608ac1 ("mm: compaction: fix COMPACTPAGEFAILED counting").  This patch
      makes compaction's migrate_pages consistent with others.  This patch
      should not change old behavior.
      Signed-off-by: NMinchan Kim <minchan.kim@gmail.com>
      Cc: Mel Gorman <mel@csn.ul.ie>
      Cc: Andrea Arcangeli <aarcange@redhat.com>
      Cc: Christoph Lameter <cl@linux.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      9d502c1c
    • A
      mm: compaction: prevent kswapd compacting memory to reduce CPU usage · d527caf2
      Andrea Arcangeli 提交于
      This patch reverts 5a03b051 ("thp: use compaction in kswapd for GFP_ATOMIC
      order > 0") due to reports stating that kswapd CPU usage was higher and
      IRQs were being disabled more frequently.  This was reported at
      http://www.spinics.net/linux/fedora/alsa-user/msg09885.html.
      
      Without this patch applied, CPU usage by kswapd hovers around the 20% mark
      according to the tester (Arthur Marsh:
      http://www.spinics.net/linux/fedora/alsa-user/msg09899.html).  With this
      patch applied, it's around 2%.
      
      The problem is not related to THP which specifies __GFP_NO_KSWAPD but is
      triggered by high-order allocations hitting the low watermark for their
      order and waking kswapd on kernels with CONFIG_COMPACTION set.  The most
      common trigger for this is network cards configured for jumbo frames but
      it's also possible it'll be triggered by fork-heavy workloads (order-1)
      and some wireless cards which depend on order-1 allocations.
      
      The symptoms for the user will be high CPU usage by kswapd in low-memory
      situations which could be confused with another writeback problem.  While
      a patch like 5a03b051 may be reintroduced in the future, this patch plays
      it safe for now and reverts it.
      
      [mel@csn.ul.ie: Beefed up the changelog]
      Signed-off-by: NAndrea Arcangeli <aarcange@redhat.com>
      Signed-off-by: NMel Gorman <mel@csn.ul.ie>
      Reported-by: NArthur Marsh <arthur.marsh@internode.on.net>
      Tested-by: NArthur Marsh <arthur.marsh@internode.on.net>
      Cc: <stable@kernel.org>		[2.6.38.1]
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      d527caf2
  2. 21 1月, 2011 1 次提交
  3. 14 1月, 2011 8 次提交
  4. 23 12月, 2010 1 次提交
  5. 10 9月, 2010 1 次提交
  6. 25 5月, 2010 5 次提交