From 10d7546961acf61f20a9b713a0ab43de37ab8b0c Mon Sep 17 00:00:00 2001 From: Aaron Gao Date: Tue, 11 Apr 2017 16:59:50 -0700 Subject: [PATCH] =?UTF-8?q?set=20readahead=20buffer=20size=20from=20roundu?= =?UTF-8?q?p(user=5Fsize)=20+=204k=20to=20roundup(use=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Summary: Users usually set readahead buffer to a multiple of 4k, more than that, usually a multiple of blocks. So previously we set real buffer size 512 * n + 4k, which may introduce an additional block reading. Closes https://github.com/facebook/rocksdb/pull/2138 Differential Revision: D4871504 Pulled By: lightmark fbshipit-source-id: b070faa51d92e976e8e8468c00692699e585e243 --- util/file_reader_writer.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/util/file_reader_writer.cc b/util/file_reader_writer.cc index 94812d2b8..b19149692 100644 --- a/util/file_reader_writer.cc +++ b/util/file_reader_writer.cc @@ -441,7 +441,7 @@ class ReadaheadRandomAccessFile : public RandomAccessFile { buffer_len_(0) { if (!forward_calls_) { buffer_.Alignment(alignment_); - buffer_.AllocateNewBuffer(readahead_size_ + alignment_); + buffer_.AllocateNewBuffer(readahead_size_); } else if (readahead_size_ > 0) { file_->EnableReadAhead(); } @@ -453,7 +453,7 @@ class ReadaheadRandomAccessFile : public RandomAccessFile { virtual Status Read(uint64_t offset, size_t n, Slice* result, char* scratch) const override { - if (n >= readahead_size_) { + if (n + alignment_ >= readahead_size_) { return file_->Read(offset, n, result, scratch); } @@ -475,7 +475,7 @@ class ReadaheadRandomAccessFile : public RandomAccessFile { if (TryReadFromCache_(offset, n, &cached_len, scratch) && (cached_len == n || // End of file - buffer_len_ < readahead_size_ + alignment_)) { + buffer_len_ < readahead_size_)) { *result = Slice(scratch, cached_len); return Status::OK(); } @@ -484,8 +484,8 @@ class ReadaheadRandomAccessFile : public RandomAccessFile { // chunk_offset equals to advanced_offset size_t chunk_offset = TruncateToPageBoundary(alignment_, advanced_offset); Slice readahead_result; - Status s = file_->Read(chunk_offset, readahead_size_ + alignment_, - &readahead_result, buffer_.BufferStart()); + Status s = file_->Read(chunk_offset, readahead_size_, &readahead_result, + buffer_.BufferStart()); if (!s.ok()) { return s; } -- GitLab