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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html