前言:我绝不是一个 Linux 专家,但我玩 Linux 的次数已经够多了。
我正在构建一个个人服务器,基本上只是用作视频和照片的存储。当前规格如下:
- 技嘉 GA-G41M-ES2L 主板
- Core 2 Duo E6750 (2.66GHz) 中央处理器
- 4GB DDR2 内存
- Vantec UGT-ST644R PCIe SATA 卡(未使用 RAID)
- 2 × 1.5TB 和 2 × 1.0TB 硬盘
- 64GB SSD(用于启动驱动器)
我已经将 Ubuntu Server 14.04.3 LTS 安装到 SSD 上,并按照以下说明安装了 ZFSonLinux此处(Ars Technica)。还安装了 Samba(版本 4.1.6-Ubuntu),我使用它从我的其余计算机(Windows 7 及更高版本)(最终最多两三台)访问服务器。
所有四个驱动器都连接到 Vantec 控制卡,每对都镜像并添加到 ZPool,总共提供 2.5TB 的空间。SSD 直接连接到板载控制器。
当它发挥作用时,它的效果非常好,但是......
当我将大量数据写入阵列时,第一个 ≈500MB 的数据“写入”正常(我假设写入缓存),然后 ZFS 等待 ≈30 秒(使用 进行监控zpool iostat <pool_name> 1
),将 ≈350MB 的数据从缓存写入阵列,同时接受更多数据,等待 ≈30 秒,将 ≈350MB 的数据从缓存写入阵列,同时接受更多数据,等待 ≈30 秒,等等,直到传输完成。在这 30 秒的时间里,它什么也没做(0 输入,0 输出),只是闲置在那里。
网络链接(实际上令我非常惊讶)能够在大约 5 秒内填满 350MB,在整个过程中留下大量空闲时间。
有没有办法消除这个瓶颈/“呼吸”?
我尝试过改变该zfs_txg_timeout
值(默认值为 5 秒,所以这似乎不太可能,但 1 秒似乎没有帮助)。
我还将最小和最大缓存值分别设置为 2GB 和 3GB,但它仍然以相对较小的缓存启动,并且慢慢地增长。我观察了在此期间系统内存的使用情况,ZFS 似乎不愿意快速增加其 RAM 使用量,即使所有东西都在等待它。
我喜欢 ZFS 允许我跨不同大小的 vdev 进行条带化的方式,但所描述的行为使其几乎无法可靠地传输大量数据。
有什么建议吗?可以修复当前设置,也可以提供类似的替代方案?提前感谢您的见解。如果您需要更多信息,请告诉我。
附注:
- 我已经在阵列上运行了本地磁盘基准测试,也出现了相同的行为,排除了 Windows 计算机和网络。
- 跑步
sync
似乎有一定的好处,但并不是持续或永久的。 - 此配置的内存已达到最大值,但我不认为这是当前的问题。
- 我希望这不是控制器问题(我没有另一个控制器,并且主板只有四个端口(一个用于 SSD,剩余三个))。
- 大多数消息来源似乎都说 ZIL 磁盘对我的情况没有帮助。
更新(2015 年 9 月 1 日):
- 我在相同的硬件上安装了 FreeNAS,使用相同的阵列拓扑,遇到了完全相同的问题。这意味着问题很可能是硬件问题。
- 为此,我将四个驱动器中的三个放在内部控制器上,并以此构建了一个阵列。问题解决了!已实现连续写入。当然,这意味着我需要找到一张新的 SATA 卡,但至少现在理论上可以了。