• C
    Enable IO Uring in MultiGet in direct IO mode (#6815) · 91b75532
    Cheng Chang 提交于
    Summary:
    Currently, in direct IO mode, `MultiGet` retrieves the data blocks one by one instead of in parallel, see `BlockBasedTable::RetrieveMultipleBlocks`.
    
    Since direct IO is supported in `RandomAccessFileReader::MultiRead` in https://github.com/facebook/rocksdb/pull/6446, this PR applies `MultiRead` to `MultiGet` so that the data blocks can be retrieved in parallel.
    
    Also, in direct IO mode and when data blocks are compressed and need to uncompressed, this PR only allocates one continuous aligned buffer to hold the data blocks, and then directly uncompress the blocks to insert into block cache, there is no longer intermediate copies to scratch buffers.
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/6815
    
    Test Plan:
    1. added a new unit test `BlockBasedTableReaderTest::MultiGet`.
    2. existing unit tests and stress tests  contain tests against `MultiGet` in direct IO mode.
    
    Reviewed By: anand1976
    
    Differential Revision: D21426347
    
    Pulled By: cheng-chang
    
    fbshipit-source-id: b8446ae0e74152444ef9111e97f8e402ac31b24f
    91b75532
block_based_table_reader.cc 130.8 KB