]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
jbd: Refine commit writeout logic
authorJan Kara <jack@suse.cz>
Mon, 21 Feb 2011 16:25:37 +0000 (17:25 +0100)
committerJan Kara <jack@suse.cz>
Mon, 2 Apr 2012 22:00:00 +0000 (00:00 +0200)
commit1ec4447065d3ac0efb5e43ab842e4638f99d216a
treef68dd7228e7823a67ff4ebb52dbc03972f60ac8e
parentb1a808ff436343956a6ae63178ea1810c5e5a3a1
jbd: Refine commit writeout logic

Currently we write out all journal buffers in WRITE_SYNC mode. This improves
performance for fsync heavy workloads but hinders performance when writes
are mostly asynchronous, most noticably it slows down readers and users
complain about slow desktop response etc.

So submit writes as asynchronous in the normal case and only submit writes as
WRITE_SYNC if we detect someone is waiting for current transaction commit.

I've gathered some numbers to back this change. The first is the read latency
test. It measures time to read 1 MB after several seconds of sleeping in
presence of streaming writes.

Top 10 times (out of 90) in us:
Before After
2131586 697473
1709932 557487
1564598 535642
1480462 347573
1478579 323153
1408496 222181
1388960 181273
1329565 181070
1252486 172832
1223265 172278

Average:
619377 82180

So the improvement in both maximum and average latency is massive.

I've measured fsync throughput by:
fs_mark -n 100 -t 1 -s 16384 -d /mnt/fsync/ -S 1 -L 4

in presence of streaming reader. The numbers (fsyncs/s) are:
Before After
9.9 6.3
6.8 6.0
6.3 6.2
5.8 6.1

So fsync performance seems unharmed by this change.

Signed-off-by: Jan Kara <jack@suse.cz>
fs/jbd/commit.c
fs/jbd/journal.c
fs/jbd/transaction.c
include/linux/jbd.h
include/trace/events/jbd.h