[RFC] concurrent JBD for 2.5

Alex Tomas (bzzz@tmi.comex.ru)
Mon, 28 Apr 2003 01:29:03 +0400


This is a MIME-formatted message. If you see this text it means that your
E-mail software does not support MIME-formatted messages.

--=_courier-26150-1051479203-0001-2
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

hi!

I've been trying to implement new locking schema for JBD
(Journaling Block Device). JBD is well-known bottleneck
for some configurations and loads.

The main ideas of locking design:

1) we do not lock the whole journal trying to get access for
some buffer, we do lock buffer only. let's call this lock
'bh lock'. in fact, this lock is simple one-bit state in
bh->b_state field. there are primitives to operate on this
lock: jbd_lock_bh(), jbd_unlock_bh() and jbd_bh_locked().
any operation on jh must be protected by this lock

2) each transaction has own lock to protect buffer list.
journal_file_buffer() and journal_unfile_buffer() uses
jh->j_transaction to find that lock. jh->j_transaction is
protected by bh lock. so, every time one tries to get write
access for a buffer following locking will be used:

get_write_access(bh)
{
jbd_lock_bh(bh);
/* decide what to do with buffer: wait, file it, etc */
journal_file_buffer(jh, th, BJ_Metadata);
{
spin_lock(&th->t_list_lock);
/* add buffer to transaction's list */
spin_unlock(&th->t_list_lock);
}
jbd_unlock_bh(bh);
}

while transaction is T_RUNNING state all proccessing go throught
this lock order. invalidatpage(), releasepage() and dirty_data()
also use this order. journal_commit_transaction() accesses buffers
in another order:
for_each_buffer_in_list(list) {
jbd_lock_bh(bh);
/* process it */
jbd_unlock_bh(bh);
}

so, it looks like lock ordeding violation. but, it isn't, because
this buffer is owned by commiting transaction and must not be refiled
by running transaction. the only places are flushing ordered data in
journal_commit_transaction() against journal_releasepage() and
journal_commit_transaction() against journal_dirty_data().
journal_commit_transaction() walks throught the list of transaction's
data buffers and journal_releasepage() first looks at buffer (so gets
bh lock), then refile it (so gets t_list_lock) => possible deadlock.
at this moment I use following schema:

lock(transaction->t_list_lock);
for_each_buffer_in_list(bh) {
get_bh(bh);
put bh in special array
unlock(transaction->t_list_lock);

for_each_buffer_in_special_array(bh) {
jbd_lock_bh(bh);
jh = bh2jh2(bh);
if (buffer belongs to the same transaction AND
buffer is on the same list) {
/* process buffer */
}
jbd_unlock_bh(bh);
put_bh(bh);
}

3) transaction's state and credits are protected by transaction->t_lock

3) revoke list protection
as we may have one running transaction and one committing transaction
at the same time, it's indeed that we simple need two revoke lists:
one for running transaction and one for committing transaction.
processes may modify revoke list simultaneously, so we protect current
revoke list by journal->j_revoke_lock

4) every time, journal_commit_transaction() starts to commit new transaction,
journal->j_running_transaction is set to NULL several start_this_handle()
may try to allocate new transaction. in order to make this SMP-compatible
get_transaction() uses journal->j_lock.

5) to protect list of committed transaction JDB uses journal->j_checkpoint_lock

6) log_do_checkpoint() scans list of transactions and list of buffers to be
flushed. it competes with journal_commit_transaction(). once again, here is
incompatible access order. I use schema, described in item 2.

The patch I'm sending have been tested for dozens of hours by
fsx-linux & bash-shared-mapping & make -j8 bzImage on dual
pIII-1GHz with 512MB RAM. Preempt was off. Patch is against
2.5.68-mm1.

I'd like to thank Andrew Morton for huge help.

with best regards, Alex

PS. would be happy to hear any comments/suggestions ;)

--=_courier-26150-1051479203-0001-2
Content-Type: application/x-bzip2
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=jbd-2.5.68-mm1.patch.bz2

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
--=_courier-26150-1051479203-0001-2--