• M
    PinnableSlice · 54d94e9c
    Maysam Yabandeh 提交于
    Summary:
    Currently the point lookup values are copied to a string provided by the user.
    This incures an extra memcpy cost. This patch allows doing point lookup
    via a PinnableSlice which pins the source memory location (instead of
    copying their content) and releases them after the content is consumed
    by the user. The old API of Get(string) is translated to the new API
    underneath.
    
     Here is the summary for improvements:
     1. value 100 byte: 1.8%  regular, 1.2% merge values
     2. value 1k   byte: 11.5% regular, 7.5% merge values
     3. value 10k byte: 26% regular,    29.9% merge values
    
     The improvement for merge could be more if we extend this approach to
     pin the merge output and delay the full merge operation until the user
     actually needs it. We have put that for future work.
    
    PS:
    Sometimes we observe a small decrease in performance when switching from
    t5452014 to this patch but with the old Get(string) API. The difference
    is a little and could be noise. More importantly it is safely
    cancelled
    Closes https://github.com/facebook/rocksdb/pull/1732
    
    Differential Revision: D4374613
    
    Pulled By: maysamyabandeh
    
    fbshipit-source-id: a077f1a
    54d94e9c
version_set.cc 126.7 KB