I wonder if we want to keep the PG from going out of scope at an inopportune time, why snap_trim_queue and scrub_queue declared as xlist<PG*> instead of xlist<PGRef>? 2015-11-11 2:28 GMT+08:00 Gregory Farnum <gfarnum@xxxxxxxxxx>: > On Tue, Nov 10, 2015 at 7:19 AM, 池信泽 <xmdxcxz@xxxxxxxxx> wrote: >> hi, all: >> >> op_wq is declared as ShardedThreadPool::ShardedWQ < pair <PGRef, >> OpRequestRef> > &op_wq. I do not know why we should use PGRef in this? >> >> Because the overhead of the smart pointer is not small. Maybe the >> raw point PG* is also OK? >> >> If op_wq is changed to ShardedThreadPool::ShardedWQ < pair <PG*, >> OpRequestRef> > &op_wq (using raw point) >> >> the latency for PrioritizedQueue:;enqueue decrease from 3.38us -> 1.89us >> >> the latency for PrioritizedQueue:;dequeue decrease from 3.44us -> 1.65us >> >> Is this make sense to you? > > In general we use PGRefs rather than PG pointers. I think we actually > rely on the references here to keep the PG from going out of scope at > an inopportune time, but if it halves the cost of queuing actions it > might be worth the effort of avoiding that. > -Greg -- Regards, xinze -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html