我有一个运行Samba的NAS,它有一个20TZFS池,一个raid1 vdev和两个旋转锈蚀驱动器。我现在机器里有16G内存。该存储被用于持续增长的,永久备份的视频片段档案。它是写一次,读一次处理,然后可能备份还原。
我经常把40 NAS的文件扔到这个NAS。我将把我的千兆网络升级到10 make,以减少这个过程的痛苦。然而,我怀疑我会受到底层驱动器的写入速度的限制。
我的理解是,ZIL和SLOG只会加速同步写入,因此添加nvme SSD作为SLOG不会影响我的用例,因为我认为Samba默认使用异步写入。
我不确定为同步写入配置samba并在nvme SSD上添加日志是否能满足我的需要。我理解这与数据丢失的风险,如果驱动器故障或断电。这是可以接受的,因为我将文件保存在源机器上足够长的时间,以便在近期数据丢失时重新传输。磨损的SSD是一个关注,但典型的驱动器有300 TBW或那里是足够填补我的永不删除NAS 15倍以上,或在75年内,在目前的数据生成率,我是可以的,并购买一个新的SSD如果/当SSD崩溃。这些都是可以接受的警告。正常情况下,我只是尝试和基准,但在目前的一切-短缺,我想要提前知道我需要购买的这一点。
我知道我可以在池中添加更多的raid 1 vdevs来获得raid 10池,但是这太贵了,中塔底盘无法支持那么多驱动器,它严重地超过了提供池和现有驱动器,并将使用更多的能量,随着时间的推移,以保持所有的锈蚀旋转。
除了以raid 10的方式将更多的旋转锈迹添加到这个zfs池中,我还有什么选择来实现超过10 10Gbps的写入速度?
发布于 2021-09-30 05:59:35
同步写入模式确保写入立即结束于持久位置。使用异步写入,数据被缓存在RAM中,写调用立即完成。文件系统将安排对最终位置(硬盘)的实际写入。
在ZFS情况下,ZIL / SLOG的目的是充当一个快速的临时持久存储,它允许同步模式,即确保写入客户端是最终的写入。否则,文件系统将需要将块直接写入硬盘,这会使同步模式变慢。
在您的情况下,如果您想确保全速写入40 GB的数据,那么您应该增加RAM大小来覆盖文件的大小。
但是,由于FS立即开始写入硬盘,因此您不需要40 get内存就可以全速写入。例如,当客户端编写了20 in的数据时,10 in可能在RAM缓存中,其余的10 in已经在硬盘中。
因此,您需要做一些基准测试,看看您需要多少RAM才能获得全速写入。
发布于 2021-10-03 11:35:00
我理解这与数据丢失的风险,如果驱动器故障或断电。这是可以接受的,因为我将文件保存在源机器上足够长的时间,以便在近期数据丢失时重新传输。
如果您可以容忍最多5秒的写入时间损失,您可以简单地配置ZFS以忽略命令zfs set sync=disabled tank
的同步请求。
强迫所有的写操作都要经过一个日志,即使是一个非常快的日志,也不会比绕过同步请求更快。SLOG不是一个经典的写回缓存,它吸收写以便将它们脱离到较慢的层。相反,它是一种通过在中间快速存储中临时存储同步写入(并且只存储它们)来提供低延迟持久性的一种方法。几秒钟后,相同的写操作将从主内存传输到主池。直到崩溃(和恢复)发生时,才会读取日志。
尽管如此,使用一个基于HDD的镜像vdev,您将永远无法饱和一个10 Gbs链接。为了持续以1GB/S的速度写,你至少需要10个硬盘在raidz2或12+硬盘在mirror+striping。或者,更好的是,你需要一个全SSD游泳池。甚至在考虑recordsize
、compression
等问题之前也是如此。
为了减少同步写入的延迟,ZFS使用了所谓的ZFS意图日志(ZIL)。简而言之:每次同步写入到达时,ZFS都会立即将它们写入名为ZIL的临时池区域。这使写操作能够立即返回,让调用应用程序继续进行。几秒钟后,在事务提交时,写入ZIL的任何记录都会回复主池。这并不意味着在每次提交时都会读取ZIL;相反,将要写入的数据来自主DRAM ARC缓存。换句话说,ZIL是一种“提前登录日志”,它确保了对将要写入的同步数据的快速数据持久性。
这实际上意味着同步写入是重复的:它们被写入ZIL和主池。输入SLOG (分隔日志设备):一个只用于同步写操作的设备--即:它将主池从ZIL流量中释放出来。快速的SSD日志非常重要,因为HDD在同步写入方面非常慢。SLOG不是经典的写回缓存,因为:
这两个点加在一起意味着一个大的日志基本上是浪费的,因为它只需要ZFS事务最大大小的3倍。换句话说,在大多数情况下,2-4GB的日志就足够了,更大的日志只在特定的设置中有用。
这样的日志是为随机同步写入提供更低延迟的关键,但是,虽然它可以吸收非常小的顺序同步写入的尖峰,但这不是它的主要功能。换句话说,您可以看到ZIL/SLOG是ARC的一个持久片段。由此得出的结论是,您不能期望通过日志编写十几个GBs并隐藏缓慢的主池速度,因为这意味着在基于RAM的ARC中已经有几十GB的脏数据。
设置sync=disabled
指示ZFS威胁所有写入,甚至同步写入,就像常规异步写入一样。这将绕过任何数据ZIL/SLOG,如果您可以接受一个5s数据开放窗口,它是您可以实现的更快的设置--即使与非常快的RAMdrive或Optane相比。sync=disabled
的好处在于它没有禁用ZFS自己的元数据的同步写入,因此不会使您的文件系统处于危险之中。这并不意味着您可以轻松地使用它:正如多次声明的那样,您应该确保理解它的含义(在发生崩溃/停电时,您可能会丢失最后几秒钟的未同步数据)。
另一方面,一个经典的基于SSD的写回缓存(如lvmcache
和bcache
)可以(或多或少)有效地使用数百GB的SSD缓存来掩盖主池延迟/吞吐量--特别是因为它们是功能齐全的写回缓存,不需要在主内存中存储它们的数据(相反,主内存通过这些SSD缓存来刷新自己)。
ZFS背后的理由是,(大的)主系统内存是真正的读/写缓存,而SLOG是减少随机同步写入延迟的一种手段。
https://serverfault.com/questions/1079090
复制相似问题