[lkml]   [2003]   [Dec]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patches in this message
    SubjectRe: 2.6.0-test9 - poor swap performance on low end machines
    On Wed, 17 Dec 2003 03:06:48 -0800, William Lee Irwin III wrote:
    > to lkml. Hearing more about the various degradations you've identified
    > would be helpful.

    I'll use 2.6.0-test3 again as the example. That release brought a
    slight improvement for qsbench and big slowdowns for kbuild and efax
    (check the numbers I posted for details), due to two patches: "fix
    kswapd throttling" (patch 1) and "decaying average of zone pressure/use
    zone_pressure for page unmapping" (patch 2).

    Even as late as test9 I found that reverting patches 1 and 2 changed
    performance numbers for all benchmarks pretty much back to test2 level.
    Reverting only patch 1 brought a partial improvement, reverting only
    patch 2 none at all.

    Patch 1 prevented those frequent calls to blk_congestion_wait in
    balance_pgdat when enough pages were freed:

    diff -Nru a/mm/vmscan.c b/mm/vmscan.c
    --- a/mm/vmscan.c Thu Jul 17 06:09:38 2003
    +++ b/mm/vmscan.c Fri Aug 1 03:02:09 2003
    @@ -930,7 +930,8 @@
    if (all_zones_ok)
    - blk_congestion_wait(WRITE, HZ/10);
    + if (to_free > 0)
    + blk_congestion_wait(WRITE, HZ/10);
    return nr_pages - to_free;
    Unconditional blk_congestion_wait breaks (as they have been in test2 and
    earlier) reduce the speed at which kswapd can free pages, making it much
    more likely that memory is reclaimed by the allocator (try_to_free_pages)
    because kswapd fails to keep up with demand.

    Patch 2 changed distress and thus reclaim_mapped in refill_inactive_zone.
    distress became less volatile -- kernels before test3 tended to consider
    mapped pages only after a few iterations in balance_pgdat (i.e. with
    raising priority).

    To get the benefits of reverting patch 2 in test3/test9 this small
    patch should suffice:

    diff -u ./mm/vmscan.c ./mm/vmscan.c
    --- ./mm/vmscan.c Wed Nov 19 11:02:51 2003
    +++ ./mm/vmscan.c Wed Nov 19 23:53:06 2003
    @@ -632,7 +632,7 @@
    * `distress' is a measure of how much trouble we're having reclaiming
    * pages. 0 -> no problems. 100 -> great trouble.
    - distress = 100 >> zone->prev_priority;
    + distress = 100 >> priority;

    * The point of this algorithm is to decide when to start reclaiming
    Without patch 2 (kernel test2 and earlier), kswapd freeing is frequently
    interrupted by the allocator satisfying immediate needs. With the
    patch, refill is dominated by long, undisturbed sequences driven by

    All this has little impact on qsbench because unlike the other two
    benchmarks qsbench hardly ever fails to convince refill_inactive_zone to
    consider mapped pages as well (thanks to an extremely high mapped_ratio).

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 13:59    [W:0.022 / U:25.956 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site