From fd66005628f8187139601fdf245e6fff302b1aee Mon Sep 17 00:00:00 2001 From: Akanksha Mahajan <43301668+akankshamahajan15@users.noreply.github.com> Date: Wed, 30 Mar 2022 13:52:37 -0700 Subject: [PATCH] Add 'adaptive_readahead' and 'async_io' options to db_stress (#9750) Summary: Same as title Pull Request resolved: https://github.com/facebook/rocksdb/pull/9750 Test Plan: export CRASH_TEST_EXT_ARGS=" --async_io=1 --adaptive_readahead=1; make -j crash_test Reviewed By: jay-zhuang Differential Revision: D35114326 Pulled By: akankshamahajan15 fbshipit-source-id: 8b05c95be09f7aff6cb9eb757aa20a6520349d45 --- db_stress_tool/db_stress_common.h | 3 +++ db_stress_tool/db_stress_gflags.cc | 7 +++++++ db_stress_tool/db_stress_test_base.cc | 2 ++ tools/db_crashtest.py | 2 ++ 4 files changed, 14 insertions(+) diff --git a/db_stress_tool/db_stress_common.h b/db_stress_tool/db_stress_common.h index 109b0d3b3..1dea25628 100644 --- a/db_stress_tool/db_stress_common.h +++ b/db_stress_tool/db_stress_common.h @@ -282,6 +282,9 @@ DECLARE_uint64(wp_snapshot_cache_bits); DECLARE_uint64(wp_commit_cache_bits); #endif // !ROCKSDB_LITE +DECLARE_bool(adaptive_readahead); +DECLARE_bool(async_io); + constexpr long KB = 1024; constexpr int kRandomValueMaxFactor = 3; constexpr int kValueMaxLen = 100; diff --git a/db_stress_tool/db_stress_gflags.cc b/db_stress_tool/db_stress_gflags.cc index 205cff68c..e7eee76eb 100644 --- a/db_stress_tool/db_stress_gflags.cc +++ b/db_stress_tool/db_stress_gflags.cc @@ -912,4 +912,11 @@ DEFINE_uint64(wp_commit_cache_bits, 23ull, "commit cache. Default: 23 (8M entries)"); #endif // !ROCKSDB_LITE +DEFINE_bool(adaptive_readahead, false, + "Carry forward internal auto readahead size from one file to next " + "file at each level during iteration"); +DEFINE_bool( + async_io, false, + "Does asynchronous prefetching when internal auto readahead is enabled"); + #endif // GFLAGS diff --git a/db_stress_tool/db_stress_test_base.cc b/db_stress_tool/db_stress_test_base.cc index cbadbb6ed..1368298eb 100644 --- a/db_stress_tool/db_stress_test_base.cc +++ b/db_stress_tool/db_stress_test_base.cc @@ -645,6 +645,8 @@ void StressTest::OperateDb(ThreadState* thread) { ReadOptions read_opts(FLAGS_verify_checksum, true); read_opts.rate_limiter_priority = FLAGS_rate_limit_user_ops ? Env::IO_USER : Env::IO_TOTAL; + read_opts.async_io = FLAGS_async_io; + read_opts.adaptive_readahead = FLAGS_adaptive_readahead; WriteOptions write_opts; if (FLAGS_rate_limit_auto_wal_flush) { write_opts.rate_limiter_priority = Env::IO_USER; diff --git a/tools/db_crashtest.py b/tools/db_crashtest.py index b6b3a6d74..0252eda39 100644 --- a/tools/db_crashtest.py +++ b/tools/db_crashtest.py @@ -163,6 +163,8 @@ default_params = { "memtable_prefix_bloom_size_ratio": lambda: random.choice([0.001, 0.01, 0.1, 0.5]), "memtable_whole_key_filtering": lambda: random.randint(0, 1), "detect_filter_construct_corruption": lambda: random.choice([0, 1]), + "adaptive_readahead": lambda: random.choice([0, 1]), + "async_io": lambda: random.choice([0, 1]), } _TEST_DIR_ENV_VAR = 'TEST_TMPDIR'