Skip to content
  • Shaohua Li's avatar
    swap: make swap discard async · 815c2c54
    Shaohua Li authored
    
    
    swap can do cluster discard for SSD, which is good, but there are some
    problems here:
    
    1. swap do the discard just before page reclaim gets a swap entry and
       writes the disk sectors.  This is useless for high end SSD, because an
       overwrite to a sector implies a discard to original sector too.  A
       discard + overwrite == overwrite.
    
    2. the purpose of doing discard is to improve SSD firmware garbage
       collection.  Idealy we should send discard as early as possible, so
       firmware can do something smart.  Sending discard just after swap entry
       is freed is considered early compared to sending discard before write.
       Of course, if workload is already bound to gc speed, sending discard
       earlier or later doesn't make
    
    3. block discard is a sync API, which will delay scan_swap_map()
       significantly.
    
    4. Write and discard command can be executed parallel in PCIe SSD.
       Making swap discard async can make execution more efficiently.
    
    This patch makes swap discard async and moves discard to where swap entry
    is freed.  Discard and write have no dependence now, so above issues can
    be avoided.  Idealy we should do discard for any freed sectors, but some
    SSD discard is very slow.  This patch still does discard for a whole
    cluster.
    
    My test does a several round of 'mmap, write, unmap', which will trigger a
    lot of swap discard.  In a fusionio card, with this patch, the test
    runtime is reduced to 18% of the time without it, so around 5.5x faster.
    
    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: default avatarShaohua Li <shli@fusionio.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Kyungmin Park <kmpark@infradead.org>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Rafael Aquini <aquini@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    815c2c54