From: Jason Dillaman Date: Tue, 15 Dec 2020 19:56:02 +0000 (-0500) Subject: librbd: explicitly disable readahead for writearound cache X-Git-Tag: v15.2.13~2^2~13^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f5163eb7af2020659f9cc89a2eaf2097883b3478;p=ceph.git librbd: explicitly disable readahead for writearound cache The readahead IOs would be wasted effort since the writearound cache does not service reads. Fixes: https://tracker.ceph.com/issues/48486 Signed-off-by: Jason Dillaman (cherry picked from commit b65f6b865044bffc4db07551caff9e81d6fa8f28) --- diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 23beddedb88..10480560747 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -776,8 +776,6 @@ public: ASSIGN_OPTION(non_blocking_aio, bool); ASSIGN_OPTION(cache, bool); ASSIGN_OPTION(sparse_read_threshold_bytes, Option::size_t); - ASSIGN_OPTION(readahead_max_bytes, Option::size_t); - ASSIGN_OPTION(readahead_disable_after_bytes, Option::size_t); ASSIGN_OPTION(clone_copy_on_read, bool); ASSIGN_OPTION(enable_alloc_hint, bool); ASSIGN_OPTION(mirroring_replay_delay, uint64_t); @@ -787,6 +785,12 @@ public: ASSIGN_OPTION(discard_granularity_bytes, uint64_t); ASSIGN_OPTION(blkin_trace_all, bool); + auto cache_policy = config.get_val("rbd_cache_policy"); + if (cache_policy == "writethrough" || cache_policy == "writeback") { + ASSIGN_OPTION(readahead_max_bytes, Option::size_t); + ASSIGN_OPTION(readahead_disable_after_bytes, Option::size_t); + } + #undef ASSIGN_OPTION if (sparse_read_threshold_bytes == 0) { diff --git a/src/librbd/ImageCtx.h b/src/librbd/ImageCtx.h index 1218f8380a6..c726ae75c2b 100644 --- a/src/librbd/ImageCtx.h +++ b/src/librbd/ImageCtx.h @@ -203,8 +203,8 @@ namespace librbd { bool non_blocking_aio; bool cache; uint64_t sparse_read_threshold_bytes; - uint64_t readahead_max_bytes; - uint64_t readahead_disable_after_bytes; + uint64_t readahead_max_bytes = 0; + uint64_t readahead_disable_after_bytes = 0; bool clone_copy_on_read; bool enable_alloc_hint; uint32_t alloc_hint_flags = 0U; diff --git a/src/librbd/image/OpenRequest.cc b/src/librbd/image/OpenRequest.cc index 2edf2b14fe1..bf83b65cde4 100644 --- a/src/librbd/image/OpenRequest.cc +++ b/src/librbd/image/OpenRequest.cc @@ -582,6 +582,8 @@ Context *OpenRequest::send_init_cache(int *result) { auto cache = cache::WriteAroundObjectDispatch::create( m_image_ctx, max_dirty, writethrough_until_flush); cache->init(); + + m_image_ctx->readahead.set_max_readahead_size(0); } else if (cache_policy == "writethrough" || cache_policy == "writeback") { if (cache_policy == "writethrough") { max_dirty = 0;