![为什么 ZFS 复制是单线程的?](https://linux22.com/image/600733/%E4%B8%BA%E4%BB%80%E4%B9%88%20ZFS%20%E5%A4%8D%E5%88%B6%E6%98%AF%E5%8D%95%E7%BA%BF%E7%A8%8B%E7%9A%84%EF%BC%9F.png)
在我的 8 核 NAS 上,当通过 SSH 运行 ZFS 复制时,我看到只有一个核心达到最大值。
我希望传输快照能够与核心数量完美匹配,因为快照可以分成 N 个独立的部分。
它是单线程的,有什么技术原因吗?
答案1
对此我不太确定,但可以(有根据的)猜测:
通过多线程方法可以轻松实现机器本地复制,但问题是这是否会给您带来很多好处,因为与硬盘之间的数据传输非常具有顺序性。当然,您可以并行执行多个硬盘,但并行进程之间的同步非常重要,并且会使事情变得非常复杂。
当你将 LAN 连接加入其中时,情况又会有所不同。SSH
连接是单线程的。显然,你可以并行运行多个连接,但 LAN 连接的性质是高度连续的(LAN 速度通常是最受限制的因素),因此,这是否会提高性能以及付出的努力是否值得,这一点值得商榷。
当然……另一方能以同样的方式处理这个问题吗?
如果接收方 NAS 的核心数比发送方少(最坏情况:只有 1 个),您很容易就会给它带来大量的任务切换开销。
如果 NAS 盒之间的物理磁盘结构不匹配,还需要在运行中进行(不小的)数据重组。
再说一遍:这值得这么复杂和努力吗?