• Rafael Aquini's avatar
    swap: discard while swapping only if SWAP_FLAG_DISCARD_PAGES · dcf6b7dd
    Rafael Aquini authored
    Considering the use cases where the swap device supports discard:
    a) and can do it quickly;
    b) but it's slow to do in small granularities (or concurrent with other
       I/O);
    c) but the implementation is so horrendous that you don't even want to
       send one down;
    
    And assuming that the sysadmin considers it useful to send the discards down
    at all, we would (probably) want the following solutions:
    
      i. do the fine-grained discards for freed swap pages, if device is
         capable of doing so optimally;
     ii. do single-time (batched) swap area discards, either at swapon
         or via something like fstrim (not implemented yet);
    iii. allow doing both single-time and fine-grained discards; or
     iv. turn it off completely (default behavior)
    
    As implemented today, one can only enable/disable discards for swap, but
    one cannot select, for instance, solution (ii) on a swap device like (b)
    even though the single-time discard is regarded to be interesting, or
    necessary to the workload because it would imply (1), and the device is
    not capable of performing it optimally.
    
    This patch addresses the scenario depicted above by introducing a way to
    ensure the (probably) wanted solutions (i, ii, iii and iv) can be flexibly
    flagged through swapon(8) to allow a sysadmin to select the best suitable
    swap discard policy accordingly to system constraints.
    
    This patch introduces SWAP_FLAG_DISCARD_PAGES and SWAP_FLAG_DISCARD_ONCE
    new flags to allow more flexibe swap discard policies being flagged
    through swapon(8).  The default behavior is to keep both single-time, or
    batched, area discards (SWAP_FLAG_DISCARD_ONCE) and fine-grained discards
    for page-clusters (SWAP_FLAG_DISCARD_PAGES) enabled, in order to keep
    consistentcy with older kernel behavior, as well as maintain compatibility
    with older swapon(8).  However, through the new introduced flags the best
    suitable discard policy can be selected accordingly to any given swap
    device constraint.
    
    [akpm@linux-foundation.org: tweak comments]
    Signed-off-by: default avatarRafael Aquini <aquini@redhat.com>
    Acked-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Shaohua Li <shli@kernel.org>
    Cc: Karel Zak <kzak@redhat.com>
    Cc: Jeff Moyer <jmoyer@redhat.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Larry Woodman <lwoodman@redhat.com>
    Cc: Mel Gorman <mel@csn.ul.ie>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    dcf6b7dd
swapfile.c 66.9 KB