git: tmpfs - Improve write clustering

Matthew Dillon dillon at crater.dragonflybsd.org
Wed Feb 12 17:14:34 PST 2020


commit 4eb0bb82efc8ef32c4357cf812891c08d38d8860
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Wed Feb 12 16:41:01 2020 -0800

    tmpfs - Improve write clustering
    
    * Setup bmap and max iosize parameters so the kernel's clustering
      code can actually cluster 16KB tmpfs blocks together into 64KB
      blocks.
    
    * In low-memory situations the pageout daemon will flush tmpfs
      pages via the VM page queues.  This ultimately runs through
      the tmpfs_vop_write() UIO_NOCOPY path which was previously using
      cluster_awrite().  However, because other nearby buffers are
      probably not present (buwrite()'s can allow buffers to be
      dismissed early), there is nothing for cluster_awrite() to
      latch onto to improve write granularity beyond 16KB.
    
      Go back to using cluster_write() when SYNC and DIRECT are not
      specified.  This allows the clustering code to collect buffers
      and flush them in larger chunks.
    
    * Reduces low-memory tmpfs paging I/O overheads by 4x and
      generally increases paging throughput to SSD-based swap by
      2x-4x.  Tmpfs is now able to issue a lot more 64KB I/Os when under
      memory pressure.

Summary of changes:
 sys/vfs/tmpfs/tmpfs_vfsops.c |  1 +
 sys/vfs/tmpfs/tmpfs_vnops.c  | 39 ++++++++++++++++++++++++++++++++-------
 2 files changed, 33 insertions(+), 7 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/4eb0bb82efc8ef32c4357cf812891c08d38d8860


-- 
DragonFly BSD source repository



More information about the Commits mailing list