Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 14 Sep 2016 09:05:28 -0600
From:      Alan Somers <asomers@freebsd.org>
To:        Matthias Andree <mandree@freebsd.org>
Cc:        "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org>
Subject:   Re: User-space API to inquire block alignment requirements for open file descriptor?
Message-ID:  <CAOtMX2hOfp=_w4LuEhqah4AEhrZ6rpPRzYSMKtfdaREioPEZGw@mail.gmail.com>
In-Reply-To: <69e12778-75d0-fd79-2dc4-a7727ccab522@FreeBSD.org>
References:  <c9063edd-a3c1-fce4-483c-a192addc6b86@FreeBSD.org> <20586.1473664368@critter.freebsd.dk> <69e12778-75d0-fd79-2dc4-a7727ccab522@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Sep 14, 2016 at 12:03 AM, Matthias Andree <mandree@freebsd.org> wrote:
> Am 12.09.2016 um 09:12 schrieb Poul-Henning Kamp:
>> --------
>> In message <c9063edd-a3c1-fce4-483c-a192addc6b86@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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAOtMX2hOfp=_w4LuEhqah4AEhrZ6rpPRzYSMKtfdaREioPEZGw>