ZFS bug: Creating ZIL ignores vfs.zfs.min_auto_ashift
Borja Marcos
borjam at sarenet.es
Thu Nov 6 11:01:43 UTC 2014
Hi,
I have noticed that ZIL creation _ignores_ the vfs.zfs.min_auto_ashift variable. ZIL and cache on SSDs should use
this variable in order to apply the optimum sector size on SSDs or so-called advanced format drives.
The system is:
root at splunk:/ # uname -a
FreeBSD splunk 10.1-PRERELEASE FreeBSD 10.1-PRERELEASE #12: Tue Nov 4 11:22:48 CET 2014 root at splunk:/usr/obj/usr/src/sys/SPLUNK10 amd64
Example:
# sysctl vfs.zfs.min_auto_ashift=12
# zpool status //// Just a common mirror with two hard disks
pool: rpool
state: ONLINE
scan: scrub repaired 0 in 5h55m with 0 errors on Wed Oct 29 23:26:03 2014
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p3 ONLINE 0 0 0
ada2p3 ONLINE 0 0 0
errors: No known data errors
# zpool add rpool log ada1
# zpool status
pool: rpool
state: ONLINE
scan: scrub repaired 0 in 5h55m with 0 errors on Wed Oct 29 23:26:03 2014
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p3 ONLINE 0 0 0
ada2p3 ONLINE 0 0 0
logs
ada1 ONLINE 0 0 0
errors: No known data errors
///// There it is, but
# zdb | more
version: 5000
name: 'rpool'
state: 0
txg: 11738986
pool_guid: 18110845055860026534
hostid: 316898903
hostname: 'splunk'
vdev_children: 2
vdev_tree:
type: 'root'
id: 0
guid: 18110845055860026534
children[0]:
type: 'mirror'
id: 0
guid: 10858793804082837265
metaslab_array: 30
metaslab_shift: 32
ashift: 12
asize: 482922987520
is_log: 0
create_txg: 4
children[0]:
type: 'disk'
id: 0
guid: 10490056043151312448
path: '/dev/ada0p3'
phys_path: '/dev/ada0p3'
whole_disk: 1
DTL: 331
create_txg: 4
children[1]:
type: 'disk'
id: 1
guid: 2441255496794840851
path: '/dev/ada2p3'
phys_path: '/dev/ada2p3'
whole_disk: 1
DTL: 252
create_txg: 4
children[1]:
type: 'disk'
id: 1
guid: 3564614139316480036
path: '/dev/ada1'
id: 1
guid: 2441255496794840851
path: '/dev/ada2p3'
phys_path: '/dev/ada2p3'
whole_disk: 1
DTL: 252
create_txg: 4
children[1]:
type: 'disk'
id: 1
guid: 3564614139316480036
path: '/dev/ada1'
phys_path: '/dev/ada1'
whole_disk: 1
metaslab_array: 0
metaslab_shift: 0
ashift: 9 <======================= WRONG, SHOULDN'T IT BE 12??
asize: 40015757312
is_log: 1
create_txg: 11738986
features_for_read:
com.delphix:hole_birth
com.delphix:embedded_data
If, however, I do the gnop trick,
# gnop create -S 4K ada1
# zpool add rpool log ada1.nop
# zpool status
pool: rpool
state: ONLINE
scan: scrub repaired 0 in 5h55m with 0 errors on Wed Oct 29 23:26:03 2014
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ada0p3 ONLINE 0 0 0
ada2p3 ONLINE 0 0 0
logs
ada1.nop ONLINE 0 0 0
errors: No known data errors
this time our mirror has the ashift we wanted, 12.
children[1]:
type: 'disk'
id: 1
guid: 6487094506120463221
path: '/dev/ada1.nop'
phys_path: '/dev/ada1.nop'
whole_disk: 1
metaslab_array: 0
metaslab_shift: 0
ashift: 12
asize: 40015757312
is_log: 1
create_txg: 11739034
The disks I am playing with are:
# camcontrol devlist
<ST3500418AS CC38> at scbus0 target 0 lun 0 (ada0,pass0)
<INTEL SSDSA2CT040G3 4PC10362> at scbus1 target 0 lun 0 (ada1,pass1)
<ST500DM002-1BC142 JC4B> at scbus2 target 0 lun 0 (ada2,pass2)
<INTEL SSDSA2CT040G3 4PC10362> at scbus3 target 0 lun 0 (ada3,pass3)
And yes, I know the two hard disks have different sector sizes but I created the pool with an ashift of 12.
Borja.
More information about the freebsd-fs
mailing list