跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11.1 可调参数参考手册 Oracle Solaris 11.1 Information Library (简体中文) |
以下信息适用于闪存 SSD、F20 PCIe 加速卡、F40 PCIe 加速卡和 F5100 闪存存储阵列。
将 ZFS 用于闪存存储时请查看以下一般注释:
针对 ZIL(ZFS intent log,ZFS 意图日志),请考虑使用由具有持久性内存的控制器管理的 LUN 或低延迟磁盘(如果可用)。相比于使用闪存进行低延迟提交,此选项可能具有更显著的成本效益。日志设备的大小必须仅够保留 10 秒的最大写入吞吐量。示例包括基于存储阵列的 LUN,或连接到 HBA(具有电池保护的写入高速缓存)的磁盘。
如果没有这样的设备可供使用,请分割单独的闪存设备池以用作 ZFS 存储池中的日志设备。
F40 和 F20 闪存加速卡包含 4 个独立的闪存模块,并将其导出至 OS。F5100 最多包含 80 个独立的闪存模块。每个闪存模块在操作系统中均显示为单个设备。OS 将 SSD 视为单个设备。可将闪存设备用作 ZFS 日志设备以降低提交延迟,尤其是用于 NFS 服务器时。例如,用作 ZFS 日志设备的闪存设备的单个闪存模块可将单个轻量线程操作的延迟降低 10 倍。可将更多的闪存设备条带化到一起,以针对大量同步操作实现更高的吞吐量。
应对日志设备进行镜像以实现可靠性。为实现最大程度的保护,应在单独的闪存设备上创建镜像。对于 F20 和 F40 PCIe 加速卡,通过确保镜像位于不同的物理 PCIe 卡上来实现最大程度的保护。对于 F5100 存储阵列,通过将镜像放置在单独的 F5100 设备上来获得最大程度的保护。
未用作日志设备的闪存设备可用作二级高速缓存设备。这样既可用于从主磁盘存储对 IOPS 进行负载转移,也可以改善常用数据的读取延迟。
将闪存设备添加为 ZFS 日志设备或高速缓存设备时请查看以下建议。
可使用 zpool add 命令将 ZFS 日志设备或高速缓存设备添加到现有的 ZFS 存储池。使用 zpool add 命令时请务必小心谨慎。如果将日志设备错误地添加为常规池设备,将会要求您销毁池然后从头开始恢复。可能会从池中删除各个日志设备本身。
在活动存储上尝试执行此操作之前,请熟悉 zpool add 命令。可以使用 zpool add -n 选项预览配置,而不创建此配置。例如,以下错误的 zpool add 预览语法会尝试将某个设备添加为日志设备:
# zpool add -n tank c4t1d0 vdev verification failed: use -f to override the following errors: mismatched replication level: pool uses mirror and new vdev is disk Unable to build pool from specified devices: invalid vdev configuration
以下是用于将某个日志设备添加到现有池的正确 zpool add 预览语法:
# zpool add -n tank log c4t1d0 would update 'tank' to the following configuration: tank mirror c4t0d0 c5t0d0 logs c4t1d0
如果指定了多个设备,它们将条带化到一起。有关更多信息,请参见下面的示例或 zpool(1M)。
闪存设备 c4t1d0 可添加为 ZFS 日志设备:
# zpool add pool log c4t1d0
如果有 2 个闪存设备,您可以添加镜像的日志设备:
# zpool add pool log mirror c4t1d0 c4t2d0
可用的闪存设备可添加为用于进行读取的高速缓存设备。
# zpool add pool cache c4t3d0
您不能镜像高速缓存设备,它们将条带化到一起。
# zpool add pool cache c4t3d0 c4t4d0
ZFS 设计为与管理磁盘级高速缓存的存储设备一起使用。通常,ZFS 会通过请求高速缓存刷新来要求存储设备确保已将数据安全地放置到稳定的存储器上。对于 JBOD 存储而言,这种方式符合预期且不会出现任何问题。对于许多基于 NVRAM 的存储阵列而言,如果此类阵列接受高速缓存刷新请求并实际做出相应的操作而不是忽略该请求,则可能会出现性能问题。一些存储阵列会应要求刷新其大型高速缓存,而不考虑 NVRAM 保护使这些高速缓存与稳定存储器一样稳定的事实。
当 uberblock 更新后,ZFS 会以较低的频率发出刷新(如每 5 秒)。由于刷新频率很低,所以此处不需要考虑进行调优。ZFS 还会在每次应用程序请求同步写入(O_DSYNC、fsync、NFS 提交等)时发出刷新。应用程序将等待此类刷新完成,因而会影响性能。实际上,影响就是这么大。从性能的角度来看,这抵消了采用基于 NVRAM 的存储的优点。
最近有证据表明,当闪存设备用作日志设备时,高速缓存刷新调优有助于提高闪存设备性能。当向 ZFS 公开的所有 LUN 均来自受 NVRAM 保护的存储阵列,并且有措施确保将来不会添加任何不受保护的 LUN 时,可以通过设置 zfs_nocacheflush 将 ZFS 调优为不发出刷新请求。如果向 ZFS 公开的一些 LUN 不受 NVRAM 保护,则此调优操作可能会导致数据丢失、应用程序级别的损坏,甚至池损坏。在某些受 NVRAM 保护的存储阵列中,高速缓存刷新命令是一个空操作,因此这种情况下的调优操作不会对性能产生任何影响。
最近的 OS 更改是:刷新请求语义能够指示存储设备忽略请求(如果它们具有适当的保护)。此更改要求修复磁盘驱动程序,以使 NVRAM 设备支持更新的语义。如果 NVRAM 设备不识别此改进,请使用以下说明来告知 Solaris OS 不要向阵列发送任何同步高速缓存命令。如果要使用这些说明,请确保所有目标 LUN 确实受 NVRAM 保护。
有时,闪存设备和 NVRAM 设备未正确地向 OS 通告它们为非设备,且无需刷新高速缓存。高速缓存刷新操作会消耗很多资源。在某些情况下,不必要的刷新会极大地影响性能。
在应用下面的调优项之前,请查看以下 zfs_nocacheflush 语法限制:
下面的调优语法可以包含在 sd.conf 中,但每个供应商/产品只能有一个 sd-config-list 条目。
如果需要多个设备条目,可以使用以下语法在同一行上指定多对供应商 ID 和 sd 调优字符串:
# "012345670123456789012345","tuning ", sd-config-list="|-VID1-||-----PID1-----|","param1:val1, param2:val2", "|-VIDN-||-----PIDN-----|","param1:val1, param3:val3";
确保供应商 ID (VID) 字符串填充为 8 个字符,产品 ID (PID) 字符串填充为 16 个字符,如上例所示。
注意 - 设备将忽略所有高速缓存同步命令。使用时需自担风险。 |
使用 format 实用程序对存储阵列中的 LUN 运行 inquiry 子命令。例如:
# format . . . Specify disk (enter its number): x format> inquiry Vendor: ATA Product: Marvell Revision: XXXX format>
基于您的体系结构选择以下操作之一:
对于 F40 闪存设备,将以下条目添加到 /kernel/drv/sd.conf 中。在下面的条目中,确保 "ATA" 填充为 8 个字符,"3E128-TS2-550B01" 包含 16 个字符。字符串总长度为 24 个字符。
sd-config-list="ATA 3E128-TS2-550B01","disksort:false, cache-non:true";
对于 F20 和 F5100 闪存设备,基于您的体系结构选择以下操作之一。在下面的条目中,"ATA" 填充为 8 个字符,"MARVELL SD88SA02" 包含 16 个字符。字符串总长度为 24 个字符。
许多 SPARC 体系结构-将以下条目添加到 /kernel/drv/ssd.conf 中:
ssd-config-list = "ATA MARVELL SD88SA02","throttle-max:32, disksort:false, cache-non:true";
x64 和一些 SPARC 驱动程序-将以下条目添加到 /kernel/drv/sd.conf 中:
ssd-config-list="ATA MARVELL SD88SA02","throttle-max:32, disksort:false, cache-non:true";
如上所示,在 sd-config-list 条目中,小心地添加空格,使供应商 ID (VID) 长度为 8 个字符(此处为 ATA),并使产品 ID (PID) 长度为 16 个字符(此处为 MARVELL)。
重新引导系统。
可将 zfs_nocacheflush 调整回其缺省值 (0),而不会对性能造成不利影响。
Solaris 11.1 OS 中有一个问题,会导致过度调用 SCSI 取消映射例程。该特定问题会降低闪存性能。解决方法是按如下方式禁用取消映射功能:
在 /etc/system 文件中包含以下条目。
set zfs:zfs_unmap_ignore_size=0
重新引导系统。