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

Reply via email to