User-space API to inquire block alignment requirements for open file descriptor?
Warner Losh
imp at bsdimp.com
Wed Sep 14 17:08:01 UTC 2016
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.
Warner
More information about the freebsd-hackers
mailing list