该池由配置中的两个 HDD(WD Red 3 TB,5200 RPM?,最大传输速率 147 MB/s 和 Verbatim (Toshiba) 3 TB,7200 RPM)组成raidz1-0
。它有 2.25 TB 的数据,复制到两个磁盘,因此总量为 4.5 TB。创建池时,我没有指定ashift
值。
zpool status
显示“扫描:在 2021 年 1 月 3 日星期日 13:58:54 的 32h43m 中以 0 个错误修复了 0”。这意味着扫描速度只有4.5e6 / (32.717 * 60 * 60) = 38.2 MB / s
. 我预计至少 2 x 100 或高达 2 x 200 MB/s,尽管 WD 磁盘比另一个磁盘慢一些。
磁盘的 SMART 数据显示一切正常。它们有 6.5 - 7 年的通电时间,但启停次数仅为 200 次左右。
所以主要问题是:什么可以解释糟糕的读取性能?
奇怪zdb
的是,池使用路径/dev/disk/by-id/ata-WDC_WD30EFRX-xyz-part1
而不是/dev/disk/by-id/ata-WDC_WD30EFRX-xyz
. fdisk -l /dev/disk/by-id/ata-WDC_WD30EFRX-xyz
提到“分区 1 不是从物理扇区边界开始”,但我读到它只会损害写入性能。我可能会尝试通过删除设备并使用正确的全磁盘路径将其添加回来来解决此问题,因为数据是重复的(并已备份)。
该池有 710 万个文件。我sha1sum
在通过 清除缓存后测试了在 14276 MB 文件上运行/proc/sys/vm/drop_caches
,花了 2 分 41 秒将读取速度设置为 88.5 MB/s。
dd bs=1M count=4096 if=/dev/disk/by-id/ata-WDC_WD30EFRX-xyz of=/dev/null
报告了 144 MB/s 的速度,使用它ata-WDC_WD30EFRX-xyz-part1
报告了 134 MB/s 和ata-TOSHIBA_DT01ACA300_xyz
报告了 195 MB/s。
我的 NAS 运行相当旧的软件版本:
$ modinfo zfs
filename: /lib/modules/3.11.0-26-generic/updates/dkms/zfs.ko
version: 0.6.5.4-1~precise
license: CDDL
author: OpenZFS on Linux
description: ZFS
srcversion: 5FC0B558D497732F17F4202
depends: spl,znvpair,zcommon,zunicode,zavl
vermagic: 3.11.0-26-generic SMP mod_unload modversions
它有 24 GB 的 RAM,其中 8 GB 是为 JVM 保留的,其余的可以免费使用。虽然似乎没有多少是免费的:
$ free -m
total used free shared buffers cached
Mem: 23799 21817 1982 0 273 1159
-/+ buffers/cache: 20384 3415
Swap: 7874 57 7817
编辑 1:
我bonnie++
使用 RAIDZ 上的单个 4 GB 文件进行了一些测试:写入 75.9 MB/s、重写 42.2 MB/s 和读取 199.0 MB/s。我假设我从“千字符/秒”正确地进行了转换。
啊,刚才我意识到并行擦洗所需的时间与最慢的 5400 RPM 磁盘一样长,7200 RMP(可能)擦洗得更快并不重要。
编辑 2:
我将池中的文件数量从 710 万个减少到 450 万个(-36.6%),清理时间从 32.72 小时减少到 16.40 小时(-49.9%)。数据量是相同的,因为我只是将这些小文件放入低压缩的 ZIP 中。
我还将recordsize
从 128k 增加到 512k,不知道这在这种情况下是否有所不同。其他预先存在的数据没有被触及,因此它们保留了原始recordsize
. 哦,/sys/module/zfs/parameters/zfs_scan_idle
被设置为2
。