User-space API to inquire block alignment requirements for open file descriptor?
Slawa Olhovchenkov
slw at zxy.spb.ru
Thu Sep 15 08:41:23 UTC 2016
On Wed, Sep 14, 2016 at 10:08:00AM -0700, Warner Losh wrote:
> On Wed, Sep 14, 2016 at 8:05 AM, Alan Somers <asomers at freebsd.org> wrote:
> > On Wed, Sep 14, 2016 at 12:03 AM, Matthias Andree <mandree at freebsd.org> wrote:
> >> Am 12.09.2016 um 09:12 schrieb Poul-Henning Kamp:
> >>> --------
> >>> In message <c9063edd-a3c1-fce4-483c-a192addc6b86 at FreeBSD.org>, Matthias Andree
> >>> writes:
> >>>> Greetings,
> >>>>
> >>>> given an open file descriptor, do we have a system interface to inquire
> >>>> about the block size of the underlying devices? In the past, we used to
> >>>> deal with 512-byte blocks, but how about drives using 4096-byte blocks?
> >>> DIOCGSECTORSIZE in sys/disk.h
> >>>
> >> Thanks Alan, Eugene, Poul-Henning.
> >>
> >>
> >> Now for the next two interesting questions for file system utilities
> >> (think sysutils/e2fsprogs) running on advanced-format (4096-block)
> >> drives - many provide internal read-modify-write approaches to emulate
> >> 512-byte blocks at substantial performance impact.
> >>
> >> Ted Y. Ts'o, the upstream e2fsprogs maintainer, asked me this question:
> >>
> >>> So how to fill in this matrix?
> >>>
> >>> HDD Linux Mac OS FreeBSD
> >>> Logical Block Size 512 BLKGETSSZGET DKIOCGETBLOCKSIZE DIOCGSECTORSIZE
> >>> Physical Block Size 4096 BLKGETPSZGET DKIOCGETPHYSICALBLOCKSIZE ?
> >>
> >> I have found one hint in the BSD forums that in certain situations the
> >> DIOCGSTRIPESIZE and DIOCGSTRIPEOFFSET can contain the latter, but on
> >> RAID it often does not.
> >
> > Correct. DIOCGSTRIPESIZE is what you want. A quick tests shows that
> > it works correctly for both gmirror and zvols as well as native disks.
> >
> >>
> >>
> >> And while we're here, and for the records:
> >>
> >> how do we query the *erase block size* on flash (solid-state) drives?
> >> It's often much bigger than a sector size.
> >
> > Sorry, I don't know.
>
> This information isn't aways easily exported. But for SD/MMC cards
> where it is easy and reliable to get, we use it for the stripe size.
It's report and set to 16MB?
More information about the freebsd-hackers
mailing list