]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/Replicated: Add proper fadvise flags for ops in do_proxy_read. 4012/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Wed, 18 Mar 2015 07:57:07 +0000 (15:57 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Tue, 24 Mar 2015 02:59:24 +0000 (10:59 +0800)
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 <jianpeng.ma@intel.com>
src/osd/ReplicatedPG.cc

index 3967b697e02a54ff2db9879df357016c2817f4f9..937d4b281f67fd87df61f7153ec971ba86dc5299 100644 (file)
@@ -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(