Rya*_*hin 6 linux ubuntu debian nfs
请耐心等待,我知道要阅读的内容很多。这个问题可能适用于其他人,所以最好有答案。我不得不放弃赏金,因为它即将到期。
当我从客户端 (Ubuntu) 复制到我的 NFS 服务器 (Debian) 或从它复制到 NFS 服务器 (Debian) 时,它会最大化千兆位。但是,当我在同一台服务器上的两个目录之间复制时,它的速度在 < 30MB/秒到超过 100MB/秒之间反弹。大多数时候大约是 50MB/秒。
直接在 NFS 服务器(本地磁盘)上执行的相同副本我得到 100-150 MB/秒,有时更多。在此 NFS 导出和从同一服务器上的同一目录导出的 CIFS 共享之间的文件副本同样慢,而在同一服务器上通过 CIFS 的两个目录之间的副本也很慢。iperf
显示客户端和服务器之间的双向速度为 941Mb/940Mb。
我确保 NFS 在服务器上使用异步。我还禁用了 ZFS 数据集上的同步,并尝试删除 ZFS 缓存和日志设备。
我已经在 4x2TB 磁盘的非常快的 ZFS 条带镜像上进行了测试,其中有一个 SSD 用于日志和缓存设备。
NFS 服务器规格:
Debian 8.2 核心 4Ghz AMD-FX
32GB ram
ZFS raid 10,SSD 缓存/日志
17GB ARC 4x2GB
WD red 驱动器
Intel 82574L NIC
测试客户端:
Ubuntu 15.04,Core2Quad 2.4Ghz
8GB ram
SSD
Intel 82574L 网卡
这是目前设置的方式。/pool2/Media
是我一直在测试的份额。
/etc/fstab
在客户端:
UUID=575701cc-53b1-450c-9981-e1adeaa283f0 / ext4 errors=remount-ro,discard,noatime,user_xattr 0 1
UUID=16e505ad-ab7d-4c92-b414-c6a90078c400 none swap sw 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
tmpfs /tmp tmpfs mode=1777 0 0
igor:/pool2/other /other nfs soft,bg,nfsvers=4,intr,rsize=65536,wsize=65536,timeo=50,nolock
igor:/pool2/Media /Media nfs soft,bg,nfsvers=4,intr,rsize=65536,wsize=65536,timeo=50,nolock,noac
igor:/pool2/home /nfshome nfs soft,bg,nfsvers=4,intr,rsize=65536,wsize=65536,timeo=50,nolock
Run Code Online (Sandbox Code Playgroud)
/etc/exports
在服务器上(igor):
#LAN
/pool2/home 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
/pool2/other 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
/pool2/Media 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)
/test 192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)
#OpenVPN
/pool2/home 10.0.1.0/24(rw,sync,no_subtree_check,no_root_squash)
/pool2/other 10.0.1.0/24(rw,sync,no_subtree_check,no_root_squash)
/pool2/Media 10.0.1.0/24(rw,sync,no_subtree_check,no_root_squash)
Run Code Online (Sandbox Code Playgroud)
zpool状态:
pool: pool2
state: ONLINE
scan: scrub repaired 0 in 6h10m with 0 errors on Sat Oct 3 08:10:26 2015
config:
NAME STATE READ WRITE CKSUM
pool2 ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469 ONLINE 0 0 0
ata-WDC_WD20EFRX-68EUZN0_WD-WCC4MLK57MVX ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
ata-WDC_WD20EFRX-68AX9N0_WD-WCC1T0429536 ONLINE 0 0 0
ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M0VYKFCE ONLINE 0 0 0
logs
ata-KINGSTON_SV300S37A120G_50026B7751153A9F-part1 ONLINE 0 0 0
cache
ata-KINGSTON_SV300S37A120G_50026B7751153A9F-part2 ONLINE 0 0 0
errors: No known data errors
pool: pool3
state: ONLINE
scan: scrub repaired 0 in 3h13m with 0 errors on Sat Oct 3 05:13:33 2015
config:
NAME STATE READ WRITE CKSUM
pool3 ONLINE 0 0 0
ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E5PSCNYV ONLINE 0 0 0
errors: No known data errors
Run Code Online (Sandbox Code Playgroud)
服务器上的 /pool2 bonnie++:
版本 1.97 ------顺序输出------ --顺序输入- --随机- 并发 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- 机器尺寸 K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP 伊戈尔 63G 100 99 187367 44 97357 24 325 99 274882 27 367.1 27
粘接
我尝试绑定并使用直接连接,balance-rr 绑定,读取速度为 220MB/秒,写入速度为 117MB/秒,复制速度为 40-50MB/秒。
带键合的 iperf
[ ID] 间隔传输带宽 Retr [ 4] 0.00-10.00 秒 1.10 GBytes 942 Mbits/sec 707 发送方 [ 4] 0.00-10.00 sec 1.10 GBytes 941 Mbits/sec 接收器 [ 6] 0.00-10.00 秒 1.06 GBytes 909 Mbits/sec 672 发送器 [ 6] 0.00-10.00 sec 1.06 GBytes 908 Mbits/sec 接收器 [SUM] 0.00-10.00 sec 2.15 GBytes 1.85 Gbits/sec 1379 发送方 [SUM] 0.00-10.00 sec 2.15 GBytes 1.85 Gbits/sec 接收器
通过 NFS 绑定的 Bonnie++
版本 1.97 ------顺序输出------ --顺序输入- --随机- 并发 1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- 机器尺寸 K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP 雾度 16G 1442 99 192941 16 89157 15 3375 96 179716 13 6082 77
删除 ssd 缓存/日志后,通过 NFS 复制,iostat 显示了这一点
sdb 0.80 0.00 67.60 214.00 8561.60 23689.60 229.06 1.36 4.80 14.77 1.64 1.90 53.60 标准差 0.80 0.00 54.60 214.20 7016.00 23689.60 228.46 1.37 5.14 17.41 2.01 2.15 57.76 sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 标准差 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 SDA 1.60 0.00 133.00 385.20 17011.20 45104.00 239.73 2.24 4.31 12.29 1.56 1.57 81.60 标准偏差 0.40 0.00 121.40 385.40 15387.20 45104.00 238.72 2.36 4.63 14.29 1.58 1.62 82.16 标准差 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sdh 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
TMPFS
我通过 NFS 导出了 tmpfs 并进行了文件复制 - 速度为 108MB/秒。从服务器本地,它是 410MB/秒。
zvol 挂载在 NFS 上
速度在 < 50MB/秒到 > 180MB/秒之间反弹,但平均约为 100MB/秒。这就是我要找的东西。这个 zvol 与我一直在测试的池 (pool2) 相同。这真的让我觉得这更像是一个 ZFS 数据集/缓存类型问题。
原始磁盘读取测试
使用这个命令
dd if=/dev/disk/by-id/ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469 of=/dev/null bs=1M count=2000
Run Code Online (Sandbox Code Playgroud)
我得到所有 4 个磁盘的 146-148MB/秒
池中磁盘使用缓慢且不均匀
感谢 ZFS 邮件列表中一位非常乐于助人的人,我知道该怎么做才能更均匀地使用磁盘。
ZFS 更喜欢 mirror-1 的原因是它似乎是在 mirror-0 填充了很多之后添加的,现在 ZFS 正在尝试重新平衡填充级别。
如果您想摆脱它并有一些时间:迭代地 zfs 将池的数据集发送到自身的新数据集,然后销毁源,重复直到池重新平衡。
我已经解决了这个问题,现在所有磁盘上的数据都是水平的 这导致通过 NFS 的复制速度达到 75MB/秒。本地速度为 118MB/秒。
问题
我的问题。如果您能回答以下任何一个问题,我将接受您的回答:
嗯......我确实注意到了一些问题,我想我找到了一两个确凿的证据。但是,首先我会问几个问题并对您可能的答案做出假设。我将提供一些起初看起来无关紧要的数据,但我保证,这将是值得一读的。所以,请等待它...... :-)
问题#1。即使是快速的本地到本地,您报告的传输率似乎也很低。有了这么快的磁盘,我预计会超过 150MB/s。我有一个只有 3.0Gb/s [适配器受限] 的 3 磁盘 raid0 系统,我可以获得 450 MB/s 的条带化速度。您的磁盘/控制器的速度是我的 2 倍,因此,我希望 [因为条带化] 您可以获得 300MB/秒,而不仅仅是 150MB/秒的本地到本地。或者,甚至可能是 600MB/秒 [减去 FS 开销,为了讨论可能会将其减半]
镜像-0 ata-WDC_WD20EFRX-68AX9N0 ata-WDC_WD20EFRX-68EUZN0 镜像 1 ata-WDC_WD20EFRX-68AX9N0 ata-WDC_WD20EFRX-68EUZN0
问题#2。通过谷歌搜索 WD20EFRX + 68AX9N0 + 68EUZN0,我找到了这个页面:http ://forums.whirlpool.net.au/archive/2197640
似乎 68EUZN0 驱动器可以在大约 8 秒后停住他们的头,而另一个在这方面更聪明[反之亦然]。
因此,考虑到 NFS 缓存 + FS 缓存 + SSD 缓存,底层驱动器可能会空闲并停下来。我的猜测是 NFS 的额外缓存层使其超出了边缘。
您可以通过改变 FS 同步选项来测试这一点,也许同步比异步更好。另外,如果可以的话,我会在关闭 SSD 缓存的情况下重新运行测试。这样做是为了保证停车不会不会发生,并查看结果。
正如网页上提到的,有一些实用程序可以调整停车延迟间隔。如果这是选项,请务必彻底研究它。
更新:
您的问题可以被视为通过存储转发 [保证交付] 网络的吞吐量问题。请注意,我不是在谈论 NIC 或同等产品。
考虑到 I/O 操作就像一个包含存储在结构中的请求(例如读/写、buf_addr、buf_len)的数据包。此请求数据包/结构在各种缓存层之间传递:NFS、ZFS、设备驱动程序、SATA 控制器、硬盘。在每一点,您都有到达该层的时间,以及请求转发到下一层时的离开时间。
在这种情况下,实际磁盘传输速度(当传输实际发生时)类似于链接速度。当大多数人考虑磁盘时,他们只考虑传输速度,而不是实际启动传输的时间。
在网络路由器中,数据包到达,但它们并不总是立即转发,即使出站链接是畅通的。根据路由器的策略,路由器可能会延迟数据包一点,希望更多的数据包会从其他来源[或来自同一来源的 UDP] 到达,因此路由器可以将较小的数据包聚合成一个大的数据包在出站链路上传输更有效。
对于磁盘,这种“延迟”可以通过给定 FS 层的缓存策略来表征。换句话说,如果一个请求在时间 T 到达一个层,而不是它在 T+1 离开该层并在 T+1 到达下一层,它可以在 T+n 离开/到达。FS 缓存层可能会这样做,以便它可以进行搜索顺序优化/排序。
您看到的行为与 TCP 套接字非常相似,由于拥塞而减少了其窗口。
我认为拆分测试很重要。现在,你正在做读写。而且,您不知道哪个是限制因素/瓶颈。我认为将测试分成读或写会很有帮助。一个体面的基准程序可能会做到这一点。我提倡的是更复杂的版本[这些只是粗略的例子,而不是使用的确切参数]:
对于写入,时间 dd if=/dev/zero of=/whatever_file count=64g 对于读取,时间 dd if=/whatever of=/dev/null count=64g64GB 的原因是物理内存的 2 倍,并且消除了块缓存效应。在测试之间执行同步命令。
在本地 FS 上应用它并在 NFS 上重复。
另外,对每个 /dev/{sda,sdb,sdc,sdd}进行读取测试
在这些测试期间执行 iostat。
请注意,在物理原始磁盘上进行读取测试可为您提供硬件实际运行速度的基准/最大值。原始设备读取应接近驱动器传输规格的最大容量。硬盘的预期写入速度应该相似。如果没有,为什么不呢?所有磁盘应以大致相同的速度进行测试。我在这里要说明的是为什么在您之前的测试中只有两个磁盘达到最大值。
算一下,32GB 并假设最大传输速度为 600MB/秒,填充/刷新至少需要 50 秒。那么,公园超时设置是什么?
此外,您可以通过 mem= boot 参数减少内核允许的物理内存量来改变一些事情。试试像 mem=8g 这样的东西,看看它有什么效果。还有一些 /proc 条目可以调整块层缓存刷新策略。
此外,我的 FS 是 ext4 并使用 noatime 安装。您可能需要考虑zfs set atime=off ...
另外,查看系统日志。有时,驱动器会报告检测错误,系统会将其重新配置为使用较低的传输速度。
此外,请查看驱动器的 SMART 数据。你看到什么异常了吗?给定驱动器上的过度软重试(例如)。
就像我说的,本地磁盘性能远低于我的预期。我认为在用 NFS 解决整个系统之前需要先解决这个问题。如果raid 磁盘都具有平衡的利用率并且在大致范围内,我就不会那么担心了。
我的系统 [也有 WDC 磁盘] 没有为 NFS 配置(我经常使用 rsync)。在接下来的 1-2 天里,我有一些紧迫的事情要做。在那之后,我有时间尝试一下[我自己也很好奇]。
更新#2:
很好地解决了 ZFS 不平衡问题。这有助于解释我的“问题 #1”。如果重新平衡操作以某种方式在延迟/时间方面混淆了 NFS,从而导致“TCP 窗口/退避”行为 - 不是超高概率,但仍然存在可能性,它也可以解释 NFS 的脆弱性。
使用 rsync 测试不需要/不希望使用 NFS。如果您可以通过 ssh 进入服务器,则 rsync和NFS 是多余的。使用NFS,只需使用cp等。要进行rsync,请通过ssh直接转到底层ZFS。即使没有 NFS 挂载,这也能工作 [这是我使用的 rsync 配置]:
导出 RSYNC_SSH="/usr/bin/ssh" 导出 SSH_NOCOMPRESS=1 rsync /wherever1 服务器:/zfsmount/whatever执行此本地主机或绑定可能会使性能达到您的预期(没有 ZFS 不平衡问题)。如果是这样,它显然将问题缩小到 NFS本身。
我已经仔细阅读了 NFS 的一些内核源代码。从我所看到的一点点来看,我不喜欢我所看到的关于及时性的内容。NFS 始于 80 年代,当时链接速度很慢,因此它 [仍然] 有很多代码来尝试节省 NIC 带宽。也就是说,只有在绝对必要时才“提交”[to] 一个动作。不一定是我们想要的。在我幻想的网络路由器策略类比中,NFS 的缓存似乎是具有“T+n”延迟的缓存。
我建议尽你所能禁用 NFS 的缓存,并让它尽快将请求传递给 ZFS。让 ZFS 成为聪明的人,让 NFS 成为“哑管道”。NFS 缓存本质上只能是通用的(例如,它甚至不知道后备存储是 RAID 或太多关于它所安装的基本 FS 的特殊特性)。ZFS 非常了解 RAID 和组成它的磁盘。因此,ZFS 的缓存在选择方面可以更加智能。
我会说尝试让 NFS 进行同步挂载——这可能会奏效。另外,我看到了一些关于 noatime 的东西,所以也打开那个选项。可能还有其他 NFS 调整/挂载选项。希望如果 NFS 是常见的嫌疑人,它可以重新配置以足够好地工作。
另一方面,如果没有选择将 NFS 带到脚后跟,那么通过 ssh 使用 rsync 会是一个可行的选择吗?实际用例是什么?似乎您正在使用 NFS 作为需要高性能的大批量传输的管道(相对于 [say] 只是作为用户主目录的自动挂载点)。这是用于客户端备份到服务器等吗?
归档时间: |
|
查看次数: |
3179 次 |
最近记录: |