Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Aug 2014 12:57:18 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-hackers@freebsd.org
Cc:        "Pokala, Ravi" <rpokala@panasas.com>
Subject:   Re: IO chunking
Message-ID:  <201408121257.18814.jhb@freebsd.org>
In-Reply-To: <D00F08A8.11B800%rpokala@panasas.com>
References:  <D00F08A8.11B800%rpokala@panasas.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tuesday, August 12, 2014 2:56:26 am Pokala, Ravi wrote:
> Hi folks,
> 
> I'm doing moderately-large block IO (16KB - 1MB) directly against drive
> devices (i.e. /dev/adaX), and I see that `iostat -d adaX' reports a
> transaction size of at most 128KB. I believe this is because transactions
> are limited to at most MAXPHYS bytes (128KB), and requests larger than
> that are broken into smaller chunks; is that correct? If so, where does
> that chunking happen? In low-level GEOM code (geom_io.c, geom_dev.c)? In
> CAM? In the drive device driver? In VFS?

Note that you can increase MAXPHYS (though you will want to ensure your
storage controller drivers correctly report their maximum supported size
and don't just hardcode MAXPHYS).

The limit appears to be throughout the stack, though largely enforced
at the top (e.g. in physio() before entering GEOM or the b_pages[] array
in struct buf).

Certainly I've seen folks run with MAXPHYS of 512k, but check your drivers.

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201408121257.18814.jhb>