On 09/02/2011 01:38 AM, Mitch Harder wrote: > On Sat, Aug 6, 2011 at 4:37 AM, Liu Bo <liubo2...@cn.fujitsu.com> wrote: >> I've fixed a bug and rebased this to the latest for-linus branch, >> and with applying my previous posted patch: >> >> [PATCH] Btrfs: fix an oops of log replay >> >> , I also test this sub transaction patchset with >> a) sysbench 0.4.12 tool and >> b) Chris's synctest tool in both _crash_ and _uncrash_ cases, and it works >> well. >> >> Please test this and feel free to notice me if there are any problems. >> Hope that it can get through with no bugs and be ready for merge this time :) >> >> === >> I've been working to try to improve the write-ahead log's performance, >> and I found that the bottleneck addresses in the checksum items, >> especially when we want to make a random write on a large file, e.g a 4G >> file. >> >> Then a idea for this suggested by Chris is to use sub transaction ids and >> just >> to log the part of inode that had changed since either the last log commit or >> the last transaction commit. And as we also push the sub transid into the >> btree >> blocks, we'll get much faster tree walks. As a result, we abandon the >> original >> brute force approach, which is "to delete all items of the inode in log", >> to making sure we get the most uptodate copies of everything, and instead >> we manage to "find and merge", i.e. finding extents in the log tree and >> merging >> in the new extents from the file. >> >> This patchset puts the above idea into code, and although the code is now >> more >> complex, it brings us a great deal of performance improvement: >> >> in my sysbench "write + fsync" test: >> >> 451.01Kb/sec -> 4.3621Mb/sec >> >> In v2, thanks to Chris, we worked together to solve 2 bugs, and after that it >> works as expected. >> In v3, thanks to Josef, we simplify several code. >> In v4, rebase to the latest for-linus branch, Chris hit two problems, and we >> solve them. >> >> Since there are some vital changes in recent rc, like "kill trans_mutex" and >> "use cur_trans", as David asked, I rebase the patchset to the latest >> for-linus >> branch. >> >> More tests are welcome! >> >> >> Liu Bo (12): >> Revert "Btrfs: do not flush csum items of unchanged file data during >> treelog" >> Btrfs: introduce sub transaction stuff >> Btrfs: update block generation if should_cow_block fails >> Btrfs: modify btrfs_drop_extents API >> Btrfs: introduce first sub trans >> Btrfs: still update inode trans stuff when size remains unchanged >> Btrfs: improve log with sub transaction >> Btrfs: add checksum check for log >> Btrfs: fix a bug of log check >> Btrfs: kick off useless code >> Btrfs: do not iput inode when inode is still in log >> Btrfs: use the right generation number to read log_root_tree >> >> fs/btrfs/btrfs_inode.h | 12 ++- >> fs/btrfs/ctree.c | 87 +++++++++++++------ >> fs/btrfs/ctree.h | 5 +- >> fs/btrfs/disk-io.c | 23 ++++-- >> fs/btrfs/extent-tree.c | 10 ++- >> fs/btrfs/file.c | 22 ++--- >> fs/btrfs/inode.c | 39 ++++++--- >> fs/btrfs/ioctl.c | 6 +- >> fs/btrfs/relocation.c | 6 +- >> fs/btrfs/transaction.c | 13 ++- >> fs/btrfs/transaction.h | 19 ++++- >> fs/btrfs/tree-defrag.c | 2 +- >> fs/btrfs/tree-log.c | 225 >> ++++++++++++++++++++++++++++++++---------------- >> 13 files changed, 312 insertions(+), 157 deletions(-) >> > > I've had the v5 stack of patches in my kernel for about 3 weeks now. > > I've just been testing for general stability in a 3.0 series kernel, > and I haven't run across any issues or obvious performance effects. > > I've been testing on both x86 and x86_64 installations in Desktop > service without RAID.
That's great. Mitch, thanks a lot for the testing work! thanks, liubo > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html