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