Make ZFS use the physical sector size when computing initial ashift

Justin T. Gibbs gibbs at FreeBSD.org
Wed Jul 10 19:50:49 UTC 2013


On Jul 10, 2013, at 1:42 PM, "Steven Hartland" <killing at multiplay.co.uk> wrote:

> 
> ----- Original Message ----- From: "Justin T. Gibbs"
>> On Jul 10, 2013, at 1:06 PM, "Steven Hartland" wrote:
>>> ----- Original Message ----- From: "Justin T. Gibbs" 
>>>> I'm sure lots of folks have "some solution" to this.  Here is an
>>>> old version of what we use at Spectra:
>>>> http://people.freebsd.org/~gibbs/zfs_patches/zfs_auto_ashift.diff
>>>> The above patch is missing some cleanup that was motivated by my
>>>> discussions with George Wilson about this change in April.  I'll
>>>> dig that up later tonight.  Even if you don't read the full diff,
>>>> please read the included checkin comment since it explains the
>>>> motivation behind this particular solution.
>>>> This is on my list of things to upstream in the next week or so after
>>>> I add logic to the userspace tools to report whether or not the
>>>> TLVs in a pool are using an optimal allocation size.  This is only
>>>> possible if you actually make ZFS fully aware of logical, physical,
>>>> and the configured allocation size.  All of the other patches I've seen
>>>> just treat physical as logical.
>>> Reading through your patch it seems that your logical_ashift equates to
>>> the current ashift values which for geom devices is based off sectorsize
>>> and your physical_ashift is based stripesize.
>>> This is almost identical to the approach I used adding a "desired ashift",
>>> which equates to your physical_ashift, along side the standard ashift
>>> i.e. required aka logical_ashift value :)
>> 
>> Yes, the approaches are similar.  Our current version records the logical
>> access size in the vdev structure too, which might relate to the issue
>> below.
>> 
>> > One issue I did spot in your patch is that you currently expose
>> > zfs_max_auto_ashift as a sysctl but don't clamp its value which would
>> > cause problems should a user configure values > 13.
>> 
>> I would expect the zio pipeline to simply insert an ashift aligned thunking
>> buffer for these operations, but I haven't tried going past an ashift of 13 in
>> my tests.  If it is an issue, it seems the restriction should be based on
>> logical access size, not optimal access size.
> 
> Yes with your methodology you'll only see the issue if zfs_max_auto_ashift
> and physical_ashift are both > 13, but this can be the case for example
> on a RAID controller with large stripsize.

I'm not sure I follow.  logical_ashift is available in our latest code, as is the
physical_ashift.  But even without the logical_ashift, why doesn't the zio
pipeline properly thunk zio_phys_read() access based on the configured ashift?

--
Justin



More information about the freebsd-hackers mailing list