ZFS 未连续写入阵列

ZFS 未连续写入阵列

前言:我绝不是一个 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 进行条带化的方式,但所描述的行为使其几乎无法可靠地传输大量数据。

有什么建议吗?可以修复当前设置,也可以提供类似的替代方案?提前感谢您的见解。如果您需要更多信息,请告诉我。

附注:

  1. 我已经在阵列上运行了本地磁盘基准测试,也出现了相同的行为,排除了 Windows 计算机和网络。
  2. 跑步sync似乎有一定的好处,但并不是持续或永久的。
  3. 此配置的内存已达到最大值,但我不认为这是当前的问题。
  4. 我希望这不是控制器问题(我没有另一个控制器,并且主板只有四个端口(一个用于 SSD,剩余三个))。
  5. 大多数消息来源似乎都说 ZIL 磁盘对我的情况没有帮助。

更新(2015 年 9 月 1 日):

  1. 我在相同的硬件上安装了 FreeNAS,使用相同的阵列拓扑,遇到了完全相同的问题。这意味着问题很可能是硬件问题。
  2. 为此,我将四个驱动器中的三个放在内部控制器上,并以此构建了一个阵列。问题解决了!已实现连续写入。当然,这意味着我需要找到一张新的 SATA 卡,但至少现在理论上可以了。

相关内容