Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Aug 2014 06:56:26 +0000
From:      "Pokala, Ravi" <rpokala@panasas.com>
To:        "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org>
Subject:   IO chunking
Message-ID:  <D00F08A8.11B800%rpokala@panasas.com>

next in thread | raw e-mail | index | archive | help
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?

The context here is that I'm doing some testing in multiples of the
drive's logical sector size. At low LBAs, SATA allows up to 256 sectors
per command; (256 sectors) * (512B / sector) =3D 128KB =3D=3D MAXPHYS, so w=
e can
reach maximum sector counts w/o chunking on 512n or AF-512e drives.
However, on AF-4Kn drives, (128KB / txn) * (sector / 4KB) =3D (32 sectors /
txn), so chunking happens well before maxing out the SATA command (256
sectors).

Any pointers?

Thanks,

Ravi




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?D00F08A8.11B800%rpokala>