Skip to content
  • Ross Zwisler's avatar
    nd_blk: change aperture mapping from WC to WB · 67a3e8fe
    Ross Zwisler authored
    This should result in a pretty sizeable performance gain for reads.  For
    rough comparison I did some simple read testing using PMEM to compare
    reads of write combining (WC) mappings vs write-back (WB).  This was
    done on a random lab machine.
    
    PMEM reads from a write combining mapping:
    	# dd of=/dev/null if=/dev/pmem0 bs=4096 count=100000
    	100000+0 records in
    	100000+0 records out
    	409600000 bytes (410 MB) copied, 9.2855 s, 44.1 MB/s
    
    PMEM reads from a write-back mapping:
    	# dd of=/dev/null if=/dev/pmem0 bs=4096 count=1000000
    	1000000+0 records in
    	1000000+0 records out
    	4096000000 bytes (4.1 GB) copied, 3.44034 s, 1.2 GB/s
    
    To be able to safely support a write-back aperture I needed to add
    support for the "read flush" _DSM flag, as outlined in the DSM spec:
    
    http://pmem.io/documents/NVDIMM_DSM_Interface_Example.pdf
    
    
    
    This flag tells the ND BLK driver that it needs to flush the cache lines
    associated with the aperture after the aperture is moved but before any
    new data is read.  This ensures that any stale cache lines from the
    previous contents of the aperture will be discarded from the processor
    cache, and the new data will be read properly from the DIMM.  We know
    that the cache lines are clean and will be discarded without any
    writeback because either a) the previous aperture operation was a read,
    and we never modified the contents of the aperture, or b) the previous
    aperture operation was a write and we must have written back the dirtied
    contents of the aperture to the DIMM before the I/O was completed.
    
    In order to add support for the "read flush" flag I needed to add a
    generic routine to invalidate cache lines, mmio_flush_range().  This is
    protected by the ARCH_HAS_MMIO_FLUSH Kconfig variable, and is currently
    only supported on x86.
    
    Signed-off-by: default avatarRoss Zwisler <ross.zwisler@linux.intel.com>
    Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
    67a3e8fe