fdisk(8) vs gpart(8), and gnop

Nathan Whitehorn nwhitehorn at freebsd.org
Mon Jun 2 15:02:35 UTC 2014


On 06/01/14 14:27, Matthew Ahrens wrote:
>
>>> I think you will get some objections to that, as it can have quite an
>>> impact
>>> on the performance for disks which are 512, due to the increased overhead
>>> of
>>> transfering 4k when only 512 is really required. This has a more dramatic
>>> impact on RAIDZx due too.
>>>
>>> Personally we run a custom kernel on our machines which has just this
>>> change
>>> in it to ensure capability with future disks, so I can confirm it does
>>> indeed
>>> have the desired effect :)
>>>
>> So the discussion here is related to what to do about the installer. The
>> current ZFS component unconditionally creates gnops all over the place to
>> set ashift to 4k. That's across the board worse: it has exactly the
>> performance impact of changing the default of this sysctl (whatever that
>> is), it can't easily be overridden (which the sysctl can), and it's a
>> horrible hack to boot. There are a few options:
>>
>> 1. Change the default of vfs.zfs.min_auto_ashift
>>
> This is probably a bad idea -- as others have mentioned, it can drastically
> impact space usage and performance on 512B disks, especially when using
> small ZFS blocks (e.g. for databases or VDI) and/or RAID-Z.  That said, it
> could be a reasonable default for specialized distros that are not used for
> these workloads (maybe FreeNAS or PCBSD?).
>
> 2. Have the same effect but in a vastly worse way by adjusting the
>> installer to create gnops
>> 3. Have ZFS choose by itself and decide to do that permanently.
>>
> If the device reports a 512B sector size, it would be great for ZFS to
> assume the device could be lying, and automatically determine the minimum
> ashift which gives good performance.  I think this could be done reasonably
> well for the common case by doing the following when each 512B-sector
> device is added:
>
> 1. do random 4KB writes to the disk to determine wIOPS at 4K
> 2. do random 3.5KB writes to the disk to determine wIOPS at 3.5K
>
> If wIOPS at 4K > wIOPS at 3.5K, assume 4KB sectors, otherwise assume 512B
> sectors.  (Note: I haven't tried this in practice; we will need to test it
> out and perhaps make some tweaks.)
>
> I don't have the time or hardware to implement and test this, but I'd be
> happy to mentor or code review.
>
> --matt

I think we basically don't have any lying disks anymore. The ATA code 
does a very good job of this -- most tell the truth, but in an odd way 
that gets reported up the stack. ada(4) has a quirks table for the ones 
that do not. If this is the only concern, then we should just stop 
telling people to worry about this.

My bigger concern is this pool upgrade one -- what if someone puts in a 
4K disk in the future?
-Nathan


More information about the freebsd-fs mailing list