]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/ReplicatedPG: For promote object, add correctly fadvise flags for
authorJianpeng Ma <jianpeng.ma@intel.com>
Tue, 24 Mar 2015 02:57:56 +0000 (10:57 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Tue, 24 Mar 2015 02:57:56 +0000 (10:57 +0800)
copy_get

For promote object, it copy whole data from base tier. So add
fadvise_sequential will get good readahead.
For fadvise_dontneed, it only for there is no proxy-read avoid
decrease the performance for proxy-read.

Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/osd/ReplicatedPG.cc

index 003e03222c76b81b4079852b01a1f41dbee837a6..abd601571d54f668fcd05af96b0d0a3981d2dc71 100644 (file)
@@ -2235,6 +2235,16 @@ void ReplicatedPG::promote_object(ObjectContextRef obc,
   }
   dout(10) << __func__ << " " << obc->obs.oi.soid << dendl;
 
+  /*
+   * Before promote complete, if there are  proxy-reads for the object,
+   * for this case we don't use DONTNEED.
+   */
+  unsigned src_fadvise_flags = LIBRADOS_OP_FLAG_FADVISE_SEQUENTIAL;
+  map<hobject_t, list<OpRequestRef> >::iterator q = in_progress_proxy_reads.find(obc->obs.oi.soid);
+  if (q == in_progress_proxy_reads.end()) {
+    src_fadvise_flags |= LIBRADOS_OP_FLAG_FADVISE_DONTNEED;
+  }
+
   PromoteCallback *cb = new PromoteCallback(obc, this);
   object_locator_t my_oloc = oloc;
   my_oloc.pool = pool.info.tier_of;
@@ -2243,7 +2253,7 @@ void ReplicatedPG::promote_object(ObjectContextRef obc,
             CEPH_OSD_COPY_FROM_FLAG_IGNORE_CACHE |
             CEPH_OSD_COPY_FROM_FLAG_MAP_SNAP_CLONE,
             obc->obs.oi.soid.snap == CEPH_NOSNAP,
-            0, 0);
+            src_fadvise_flags, 0);
 
   assert(obc->is_blocked());