OpenCloudOS-Kernel/fs/nfs/objlayout
Boaz Harrosh 7de6e28417 pnfs-obj: Better IO pattern in case of unaligned offset
Depending on layout and ARCH, ORE has some limits on max IO sizes
which is communicated on (what else) ore_layout->max_io_length,
which is always stripe aligned.
This was considered as the pg_test boundary for splitting and starting
a new IO.

But in the case of a long IO where the start offset is not aligned
what would happen is that both end of IO[N] and start of IO[N+1]
would be unaligned, causing each IO boundary parity unit to be
calculated and written twice.

So what we do in this patch is split the very start of an unaligned
IO, up to a stripe boundary, and then next IO's can continue fully
aligned til the end.

We might be sacrificing the case where the full unaligned IO would
fit within a single max_io_length, but the sacrifice is well worth
the elimination of double calculation and parity units IO.
Actually the sacrificing is marginal and is almost unmeasurable.

TODO:
	If we know the total expected linear segment that will
	be received, at pg_init, we could use that information
	in many places:
	1. blocks-layout get_layout write segment size
	2. Better mds-threshold
	3. In above situation for a better clean split

	I will do this in future submission.

Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2012-08-02 17:42:51 -04:00
..
Kbuild pnfs-obj: decode layout, alloc/free lseg 2011-05-29 20:53:06 +03:00
objio_osd.c pnfs-obj: Better IO pattern in case of unaligned offset 2012-08-02 17:42:51 -04:00
objlayout.c NFS: create common nfs_pgio_header for both read and write 2012-04-27 14:10:37 -04:00
objlayout.h pnfs-obj: autologin: Add support for protocol autologin 2012-03-21 09:31:47 -04:00
pnfs_osd_xdr_cli.c pnfs-obj: Fix the comp_index != 0 case 2011-08-04 11:54:48 -04:00