From: Jianpeng Ma Date: Wed, 18 Mar 2015 07:57:07 +0000 (+0800) Subject: osd/Replicated: Add proper fadvise flags for ops in do_proxy_read. X-Git-Tag: v9.0.1~123^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=79e1d15abb609756d1f091653db70029b1c12a7e;p=ceph.git 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 --- 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(