From 79e1d15abb609756d1f091653db70029b1c12a7e Mon Sep 17 00:00:00 2001 From: Jianpeng Ma Date: Wed, 18 Mar 2015 15:57:07 +0800 Subject: [PATCH] osd/Replicated: Add proper fadvise flags for ops in do_proxy_read. For CACHEMODE_WRITEBACK, if evict_mode isn't full, after do_proxy_read, it will do promote_object. So if has read-data ops, we should use fadvise sequential. It make the promote object get more data from page cache. Also remove the dontnned & nocache avoid prmote reread from disk. Signed-off-by: Jianpeng Ma --- src/osd/ReplicatedPG.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 3967b697e02a..937d4b281f67 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -2099,6 +2099,20 @@ void ReplicatedPG::do_proxy_read(OpRequestRef op) ObjectOperation obj_op; obj_op.dup(prdop->ops); + if (pool.info.cache_mode == pg_pool_t::CACHEMODE_WRITEBACK && + (agent_state && agent_state->evict_mode != TierAgentState::EVICT_MODE_FULL)) { + for (unsigned i = 0; i < obj_op.ops.size(); i++) { + ceph_osd_op op = obj_op.ops[i].op; + switch (op.op) { + case CEPH_OSD_OP_READ: + case CEPH_OSD_OP_SYNC_READ: + case CEPH_OSD_OP_SPARSE_READ: + op.flags = (op.flags | CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL) & + ~(CEPH_OSD_OP_FLAG_FADVISE_DONTNEED | CEPH_OSD_OP_FLAG_FADVISE_NOCACHE); + } + } + } + C_ProxyRead *fin = new C_ProxyRead(this, soid, get_last_peering_reset(), prdop); ceph_tid_t tid = osd->objecter->read( -- 2.47.3