Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 6 Nov 2014 12:01:27 +0100
From:      Borja Marcos <borjam@sarenet.es>
To:        "freebsd-fs@FreeBSD.org Filesystems" <freebsd-fs@freebsd.org>
Subject:   ZFS bug: Creating ZIL ignores vfs.zfs.min_auto_ashift
Message-ID:  <B731A922-3F83-4D8E-A4EA-22C5CA8A3850@sarenet.es>

next in thread | raw e-mail | index | archive | help


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@splunk:/ # uname -a
FreeBSD splunk 10.1-PRERELEASE FreeBSD 10.1-PRERELEASE #12: Tue Nov  4 =
11:22:48 CET 2014     root@splunk:/usr/obj/usr/src/sys/SPLUNK10  amd64



Example:

# sysctl vfs.zfs.min_auto_ashift=3D12

# 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                                      =
<=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =
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.=20

        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.






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B731A922-3F83-4D8E-A4EA-22C5CA8A3850>