On Wed, Oct 10, 2012 at 11:34:48AM +0200, Manuel Bouyer wrote: > > I'm not sure what the best way to handle this would be. > If we assume that maxphys is a power of 2, we could use a maxphys-derived > mask here. Otherwise, maybe we should compute and cache the largest power-of-2 > value below maxphys in v_mount, as is done in vfs_vnops.c:vn_ra_allocctx() > (actually, this would remove ra_iochunk as we could use the mount point's > value)
I originally did that. There were some negative performance consequences. With two of the SCSI (RAID, actually) controllers I have on hand, the DMA descriptor format effectively imposes a restriction of 192K on transfer size. But these are exactly the sort of devices that really like to see large writes. The next lower power of two is 128k... I think a lot of the clever math with shifts and masks should perhaps go away. Any efficiency improvements it yields are, I think, swamped by the 5,000 function calls we make to do a single I/O. Thor