summaryrefslogtreecommitdiff
path: root/verify.h
diff options
context:
space:
mode:
authorRadha Ramachandran <radha@google.com>2010-07-14 08:36:07 +0200
committerJens Axboe <jaxboe@fusionio.com>2010-07-14 08:36:07 +0200
commitcbe8d7561cf6d81d741d87eb7940db2a111d2144 (patch)
treebcd1ba30eb1025c0c16356c27fd86c20bd390c5b /verify.h
parent0dd2d11ea010566fd2bc2661af58a0eefe49f750 (diff)
Reuse filled pattern
I made changes to fio so we wld re-use the already populated io_u buffer (when there is a non-random pattern) during writes. That way only the header will be re-calculated for every I/O. This way the buffer wld get populated in the beginning and as long as the subsequent ios using the same io_u structure are writes and have same or less block size, it wld get re-used. If any of the subsequent i/o is a read or has a block size greater than the pre-filled one, then the buffer is invalidated and will be re-filled at the next write. Reason for this risky change: (Performance) I tested this change on a tmpfs(with no swap backing), with the following config file: [sscan_write] filename=/mytmpfs/datafile.tmp rw=write bs=64k size=3G ioengine=libaio iodepth=1024 iodepth_low=512 runtime=10800 bwavgtime=5000 thread=1 do_verify=0 verify=meta verify_pattern=0x55aaa55a verify_interval=4k continue_on_error=1 fio-1-41-6 gave 306MB/s and the new change had a performance of 1546MB/s Side effects/Risks: There is a risk with this fix, that if the buffer gets corrupted then the subsequent writes will also be corrupt. I think for both sequential writes and random writes (with verify, where the I/O log is replayed) we shld be able to find the first I/O that started with the corruption and if the buffer is getting corrupted, there are other issues here. Testing: I have tested this fix with sequential write(verify)/random read write mix combination(with verify). I think I have taken care of most of the case, but please let me know if there is anything I have missed. I have attached the patch along with this email. I think the performance improvement outweighs the risk associated with the fix. But I will let you decide if you wld like to pick it up. Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
Diffstat (limited to 'verify.h')
-rw-r--r--verify.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/verify.h b/verify.h
index a4a8cfe..29c4b46 100644
--- a/verify.h
+++ b/verify.h
@@ -69,6 +69,7 @@ extern void populate_verify_io_u(struct thread_data *, struct io_u *);
extern int __must_check get_next_verify(struct thread_data *td, struct io_u *);
extern int __must_check verify_io_u(struct thread_data *, struct io_u *);
extern int verify_io_u_async(struct thread_data *, struct io_u *);
+extern void fill_pattern(struct thread_data *td, void *p, unsigned int len, struct io_u *io_u);
/*
* Async verify offload