From: Jianpeng Ma Date: Tue, 24 Mar 2015 02:57:56 +0000 (+0800) Subject: osd/ReplicatedPG: For promote object, add correctly fadvise flags for X-Git-Tag: v9.0.1~123^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7dcd2ae030a54368aa21f374f711867e7a63fae7;p=ceph.git osd/ReplicatedPG: For promote object, add correctly fadvise flags for 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 --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 003e03222c76..abd601571d54 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -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 >::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());