Hi all, I noticed a pull request(https://github.com/ceph/ceph/pull/1152) which make a deal of optimizations on FileStore. Although the way modify ObjecStore and caller's codes are not accepted for me, it still seemed good for performance purpose.
I agree with we need a session mechanism to cache "fd", "lock" and "path", etc. For example, avoid multi lfn_open, lfn_find, in one transaction. In a simple performance test with SSD backend by me, lfn_find and "fd" will be main throttle. So maybe a better idea is that introduce a structure called "TransactionStuff" or other name in FileStore::_do_transactions, which cache path, object existence and others to avoid extra works in actual operation implementations(such as lfn_find in omap* functions). It may help to reduce a mess of lock in DBObjectMap, CollectionIndex or FDCache. Especially, we already have "apply_lock" in "OpSequencer", we could lock object in init_transaction(new introduced) in ease without considering parallelism problem. t = init_transaction(); for (list<Transaction*>::iterator p = tls.begin(); p != tls.end(); ++p, trans_num++) { r = _do_transaction(**p, op_seq, trans_num, handle); if (r < 0) break; if (handle) handle->reset_tp_timeout(); } clean_transaction(t); Best regards, Wheats -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html