On Wed, 9 Dec 2015, Ning Yao wrote: > The function and transactions corresponding with pgmeta object is listed > below: > touch() and remove() for pgmeta object creation and deletion > _omap_setkeys() and _omap_rmkeys() to update k/v data in omap for > pgmeta(pg_info, epoch, rollback_info, pg_log and so on) > omap_get_values() to retrieve data from omap, always call it during osd > daemon start proccess Note that we should make sure collection_list continues to show it, so we can't skip creating the file... > So I think the performance will be hurt in writeOp routine as heavily call > _omap_setkeys() and _omap_rmkeys(). The ideal way to deal with it, of > course, is to eventually treat pgmeta as a logical object(not real object > existed). But it needs alter much in FileStore, since we cannot directly > remove the t.touch() and t.remove() transaction and upgrade store to > remove the pgmeta_object based on info_struct_v. But as we discussed before, > it is FileStore issue and need keep compatibility for other backends. > Therefore, in order to not to alter FileStore too much and keep all its > compatibility, my strategy is just to skip the meta object existence > checking on the main routine of writeOps like this: > https://github.com/ceph/ceph/pull/6870 Yep, this sounds like the right hack to me. > This brings a benefit to reduce _omap_setkeys() execution time > from 123.784us to 108.444us averagely (about 15% improvement), and reduce > the whole cpu time 0.5% ~ 1% globally. That seems worthwhile! sage