diff --git a/db/db_bench.cc b/db/db_bench.cc index 7ae2747f3..7ae26f1e4 100644 --- a/db/db_bench.cc +++ b/db/db_bench.cc @@ -165,6 +165,7 @@ static int FLAGS_readwritepercent = 90; static leveldb::Env* FLAGS_env = leveldb::Env::Default(); extern bool useOsBuffer; +extern bool useFsReadAhead; namespace leveldb { @@ -1133,6 +1134,9 @@ int main(int argc, char** argv) { } else if (sscanf(argv[i], "--bufferedio=%d%c", &n, &junk) == 1 && (n == 0 || n == 1)) { useOsBuffer = n; + } else if (sscanf(argv[i], "--readhead=%d%c", &n, &junk) == 1 && + (n == 0 || n == 1)) { + useFsReadAhead = n; } else if (sscanf(argv[i], "--statistics=%d%c", &n, &junk) == 1 && (n == 0 || n == 1)) { if (n == 1) { diff --git a/util/env_posix.cc b/util/env_posix.cc index 06420594c..0e2322146 100644 --- a/util/env_posix.cc +++ b/util/env_posix.cc @@ -27,6 +27,7 @@ #include "util/posix_logger.h" bool useOsBuffer = 1; // cache data in OS buffers +bool useFsReadAhead = 1; // allow filesystem to do readaheads namespace leveldb { @@ -81,7 +82,12 @@ class PosixRandomAccessFile: public RandomAccessFile { public: PosixRandomAccessFile(const std::string& fname, int fd) - : filename_(fname), fd_(fd) { } + : filename_(fname), fd_(fd) { + if (!useFsReadAhead) { + // disable read-aheads + posix_fadvise(fd, 0, 0, POSIX_FADV_RANDOM); + } + } virtual ~PosixRandomAccessFile() { close(fd_); } virtual Status Read(uint64_t offset, size_t n, Slice* result,