User-space API to inquire block alignment requirements for open file descriptor?
Alan Somers
asomers at freebsd.org
Wed Sep 14 15:05:30 UTC 2016
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.
>
>
> Thanks,
>
> Matthias
-Alan
More information about the freebsd-hackers
mailing list