• Andrei Vagin's avatar
    scsi: target: target/file: Add support of direct and async I/O · 769031c9
    Andrei Vagin authored
    There are two advantages:
    
    * Direct I/O allows to avoid the write-back cache, so it reduces affects
      to other processes in the system.
    * Async I/O allows to handle a few commands concurrently.
    
    DIO + AIO shows a better perfomance for random write operations:
    
    Mode: O_DSYNC Async: 1
    $ ./fio --bs=4K --direct=1 --rw=randwrite --ioengine=libaio --iodepth=64 --name=/dev/sda --runtime=20 --numjobs=2
      WRITE: bw=45.9MiB/s (48.1MB/s), 21.9MiB/s-23.0MiB/s (22.0MB/s-25.2MB/s), io=919MiB (963MB), run=20002-20020msec
    
    Mode: O_DSYNC Async: 0
    $ ./fio --bs=4K --direct=1 --rw=randwrite --ioengine=libaio --iodepth=64 --name=/dev/sdb --runtime=20 --numjobs=2
      WRITE: bw=1607KiB/s (1645kB/s), 802KiB/s-805KiB/s (821kB/s-824kB/s), io=31.8MiB (33.4MB), run=20280-20295msec
    
    Known issue:
    
    DIF (PI) emulation doesn't work when a target uses async I/O, because
    DIF metadata is saved in a separate file, and it is another non-trivial
    task how to synchronize writing in two files, so that a following read
    operation always returns a consisten metadata for a specified block.
    
    Cc: "Nicholas A. Bellinger" <nab@linux-iscsi.org>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: Bryant G. Ly <bryantly@linux.vnet.ibm.com>
    Tested-by: default avatarBryant G. Ly <bryantly@linux.vnet.ibm.com>
    Signed-off-by: default avatarAndrei Vagin <avagin@openvz.org>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarBryant G. Ly <bryantly@linux.vnet.ibm.com>
    Reviewed-by: default avatarMike Christie <mchristi@redhat.com>
    Signed-off-by: Martin K. Petersen's avatarMartin K. Petersen <martin.petersen@oracle.com>
    769031c9
target_core_file.h 1.24 KB