vfs.zfs.vdev.cache.size
- 预先分配的内存量,作为池中每个设备的缓存。使用的总内存量将是这个值乘以设备的数量。在启动时和 /boot/loader.conf 中设置此值。vfs.zfs.min_auto_ashift
- 在创建池时自动使用的较低 ashift
(扇区大小)。该值是二的幂。默认值 9
代表 2^9=512
,即扇区大小为 512 字节。为了避免写入放大并获得最佳性能,将此值设置为池中设备使用的最大扇区大小。 普通驱动器有 4KB 的扇区。 在这些驱动器上使用默认的 9
作为 ashift
会导致这些设备的写入放大。单个 4KB 的写入所包含的数据被写成 8 个 512 字节的写入。在创建池时,ZFS 试图从所有设备中读取本地扇区大小,但具有 4 KB 扇区的驱动器报告说它们的扇区是 512 字节,以实现兼容。在创建池之前,将 vfs.zfs.min_auto_ashift
设置为 12
(2^12=4096
),迫使 ZFS 在这些驱动器上使用 4KB 块以获得最佳性能。 强制 4KB 区块对于有计划的磁盘升级的池也很有用。未来的磁盘使用 4KB 扇区,而且在创建池后,ashift
值不能改变。 在一些特定的情况下,较小的 512 字节的块大小可能是更好的。当使用 512 字节的磁盘用于数据库或作为虚拟机的存储时,在小的随机读取过程中传输的数据较少。这可以在使用较小的 ZFS 记录大小时提供更好的性能。vfs.zfs.vdev.trim_on_init
- 控制添加到池中的新设备是否对其运行 TRIM
命令。这可以确保 SSD 的最佳性能和寿命,但需要额外的时间。如果设备已经被安全擦除,禁用此设置将使新设备的添加更快。在任何时候用 sysctl(8) 调整这个值。vfs.zfs.vdev.max_pending
- 限制每个设备的未决 I/O 请求的数量。一个较高的值会使设备的命令队列保持满员,并可能带来更高的吞吐量。一个较低的值将减少延迟。在任何时候都可以用 sysctl(8) 调整这个值。vfs.zfs.l2arc_write_boost
- 在 vfs.zfs.l2arc_write_max
的基础上增加这个可调控的值,并增加对 SSD 的写入速度,直到驱逐 L2ARC 的第一个块。这个 “Turbo Warmup Phase” 可以减少重启后空的 L2ARC 带来的性能损失。在任何时候都可以用 sysctl(8) 调整这个值。vfs.zfs.scrub_delay
- 在 scrub
过程中,每个 I/O 之间延迟的刻度数。为了确保 scrub
不干扰池的正常运行,如果有任何其他 I/O 正在发生, scrub
将在每个命令之间延迟。这个值控制 scrub
所产生的总 IOPS(每秒 I/O 数)的限制。设置的颗粒度由 kern.hz
的值决定,默认为每秒 1000 次。改变这个设置会导致不同的有效 IOPS 限制。默认值是 4,导致的限制是: 1000 ticks/sec / 4 = 250 IOPS。使用一个 20 的值会得到一个限制: 1000 ticks/sec / 20 = 50 IOPS。池子上的最近活动限制 scrub
的速度,这由 vfs.zfs.scan_idle
决定。在任何时候都可以用 sysctl(8) 调整这个值。vfs.zfs.resilver_delay
- 在 resilver 过程中每次 I/O 之间插入延迟的毫秒数量。为了确保 resilver 不会干扰池的正常运行,如果有任何其他 I/O 正在发生,resilver 将在每个命令之间延迟。这个值控制 resilver 产生的总 IOPS(每秒 I/O 数)的限制。ZFS 通过 kern.hz
的值来决定设置的粒度,其默认值为每秒 1000 次。改变这个设置会导致不同的有效 IOPS 限制。默认值是 2,导致的限制是: 1000 ticks/sec / 2 = 500 IOPS。如果另一个设备失败可能导致池 Fault ,导致数据丢失,那么将池返回到 Online 状态可能更为重要。一个 0 值将给予 resilver 操作与其他操作相同的优先级,加速愈合过程。池上的其他最近活动限制 resilver 的速度,由 vfs.zfs.scan_idle
决定。在任何时候都可以用 sysctl(8) 调整这个值。vm.kvm_size
可调性超过 1GB 的强制限制,或者 PAE 的 2GB 限制。为了找到这个选项的最合适的值,将所需的地址空间(以兆字节为单位)除以 4。在这个例子中,512
代表 2GB。