• S
    block: Cache total_sectors to reduce bdrv_getlength calls · 51762288
    Stefan Hajnoczi 提交于
    The BlockDriver bdrv_getlength function is called from the I/O code path
    when checking that the request falls within the device.  Unfortunately
    this involves an lseek system call in the raw protocol; every read or
    write request will incur this lseek cost.
    
    Jan Kiszka <jan.kiszka@siemens.com> identified this issue and its
    latency overhead.  This patch caches device length in the existing
    total_sectors variable so lseek calls can be avoided for fixed size
    devices.
    
    Growable devices fall back to the full bdrv_getlength code path because
    I have not added logic to detect extending the size of the device in a
    write.
    Signed-off-by: NStefan Hajnoczi <stefanha@linux.vnet.ibm.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    51762288
block.c 64.4 KB