From mboxrd@z Thu Jan 1 00:00:00 1970 From: liubo Subject: Re: [PATCH 0/9] Btrfs: improve write ahead log with sub transaction Date: Mon, 23 May 2011 21:29:31 -0400 Message-ID: <4DDB09FB.8040700@cn.fujitsu.com> References: <1305792692-10635-1-git-send-email-liubo2009@cn.fujitsu.com> <4DDA8EAB.9050805@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Cc: linux-btrfs@vger.kernel.org, chris.mason@oracle.com To: Josef Bacik Return-path: In-Reply-To: <4DDA8EAB.9050805@redhat.com> List-ID: On 05/23/2011 12:43 PM, Josef Bacik wrote: > On 05/19/2011 04:11 AM, Liu Bo wrote: >> 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. >> >> Beside the improvement of log, patch 8 fixes a small but critical bug of log code >> with sub transaction. >> >> Here I have some test results to show, I use sysbench to do "random write + fsync". >> >> === >> sysbench --test=fileio --num-threads=1 --file-num=2 --file-block-size=4K --file-total-size=8G --file-test-mode=rndwr --file-io-mode=sync --file-extra-flags= [prepare, run] >> === >> >> Sysbench args: >> - Number of threads: 1 >> - Extra file open flags: 0 >> - 2 files, 4Gb each >> - Block size 4Kb >> - Number of random requests for random IO: 10000 >> - Read/Write ratio for combined random IO test: 1.50 >> - Periodic FSYNC enabled, calling fsync() each 100 requests. >> - Calling fsync() at the end of test, Enabled. >> - Using synchronous I/O mode >> - Doing random write test >> >> Sysbench results: >> === >> Operations performed: 0 Read, 10000 Write, 200 Other = 10200 Total >> Read 0b Written 39.062Mb Total transferred 39.062Mb >> === >> a) without patch: (*SPEED* : 451.01Kb/sec) >> 112.75 Requests/sec executed >> >> b) with patch: (*SPEED* : 4.3621Mb/sec) >> 1116.71 Requests/sec executed >> > > Have you run powerfail tests with this? I'd like to make sure you > haven't inadvertently messed something up. Thanks, > Yes, I've done this before, and it has nothing serious but a few of "parent transid verify failed", just the same as Chris had mentioned in the thread. thanks, liubo > Josef >