请忍耐,我知道这是很多的阅读。 这个问题可能适用于其他人,所以有一个答案是很好的。 我不得不放弃赏金,因为它会到期。
当我从客户端(Ubuntu)复制到或从我的NFS服务器(Debian),它最大的千兆位。 但是,当我在同一台服务器上的两个目录之间进行复制时,速度会在<30MB /秒之间跳动,超过100MB /秒。 大部分时间大约是50MB /秒。
直接在NFS服务器(本地磁盘)上执行相同的副本我得到100-150 MB /秒,有时更多。 此NFS导出与从同一服务器上同一目录导出的CIFS共享之间的文件副本速度一样慢,并且在同一服务器上的两个目录之间通过CIFS的副本很慢。 iperf显示客户端和服务器之间的双向速率为941Mb / 940Mb。
我确保NFS在服务器上使用asynchronous。 我还禁用了ZFS数据集的同步,并尝试删除ZFScaching和日志设备。
我已经在4x2TB磁盘的非常快的ZFS条带镜像上进行了testing,使用SSD来存储日志和caching设备。
NFS服务器规格:
Debian 8.2核心4Ghz AMD-FX
32GB内存
ZFS RAID 10,SSDcaching/日志
17GB ARC
4x2GB WD红色驱动器
英特尔82574L网卡
testing客户端:
Ubuntu 15.04,Core2Quad 2.4Ghz
8GB RAM
SSD
英特尔82574L网卡
这是目前如何build立的。 /pool2/Media是我一直在testing的份额。
/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
服务器上的/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)
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
/ pool2 Bonnie ++在服务器上:
版本1.97 ------顺序输出------ - 顺序input - - 随机 - 并发性1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block---查询 - 机器尺寸K /秒%CP K /秒%CP K /秒%CP K /秒%CP K /秒%CP /秒%CP igor 63G 100 99 187367 44 97357 24 325 99 274882 27 367.1 27
粘接
我尝试了粘接和直接连接,我读取速度为220MB /秒,写入速度为117MB /秒,复制速度为40-50MB /秒。
与债券的iperf
[ID]间隔传输带宽Retr [4] 0.00-10.00秒1.10 GBytes 942 Mbits / sec 707发送者 [4] 0.00-10.00秒1.10 GBytes 941 Mbits / sec接收器 [6] 0.00-10.00秒1.06 GBytes 909 Mbits / sec 672发送者 [6] 0.00-10.00秒1.06 GBytes 908 Mbits / sec接收器 [SUM] 0.00-10.00秒2.15 GBytes 1.85 Gbits / sec 1379发送者 [SUM] 0.00-10.00秒2.15 GBytes 1.85 Gbits / sec接收器
Bonnie ++通过NFS绑定
版本1.97 ------顺序输出------ - 顺序input - - 随机 - 并发性1 -Per Chr- --Block-- -Rewrite- -Per Chr- --Block---查询 - 机器尺寸K /秒%CP K /秒%CP K /秒%CP K /秒%CP K /秒%CP /秒%CP 阴霾16G 1442 99 192941 16 89157 15 3375 96 179716 13 6082 77
随着ssdcaching/日志删除,通过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 sdd 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 sde 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 sdf 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 sdg 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 /秒。
通过NFS安装的zvol
速度在<50MB /秒到> 180MB /秒之间反弹,但平均达到约100MB /秒。 这是关于我在找什么。 这个zvol与我一直在testing的是同一个池(pool2)。 这真的让我觉得这是更多的ZFS数据集/cachingtypes的问题。
原始磁盘读取testing
使用这个命令
dd if=/dev/disk/by-id/ata-WDC_WD20EFRX-68AX9N0_WD-WMC300004469 of=/dev/null bs=1M count=2000
所有4个磁盘都可以达到146-148MB / sec
池中的磁盘使用缓慢,不均匀
感谢ZFS邮件列表上非常有帮助的人员,我知道如何更好地使用磁盘。
ZFS更喜欢mirror-1的原因是在mirror-0被填满之后似乎被添加了,现在ZFS正在尝试重新平衡填充级别。
如果你想摆脱这一点,并有一些时间:迭代zfs发送池的数据集本身的新数据集,然后销毁源,重复,直到池重新平衡。
我已经解决了这个问题,现在所有磁盘上的数据都是水平的。这导致NFS上的拷贝速度为75MB / sec。 而本地118MB /秒。
这个问题
我的问题。 如果你能回答任何一个问题,我会接受你的回答:
嗯…我注意到了一些问题,我想我find了一两个吸烟枪。 但是,首先我会问几个问题,并对可能的答案做出假设。 我将介绍一些起初似乎不相关的数据,但我保证,这将是值得的阅读。 所以,请等待… 🙂
问题#1。 您所报告的即使是本地到本地的传输速率似乎也很低。 对于那些速度很快的磁盘,我预计会超过150MB / s。 我有一个3磁盘raid0系统,只有3.0Gb / s [适配器有限],我可以得到450 MB / s条纹。 你的磁盘/控制器是我的速度的两倍,所以,我希望[因为条带化]你可以达到300MB /秒,而不是本地到本地的150MB /秒。 或者,甚至可能是600MB /秒[减去FS开销,为了讨论的缘故可能将其削减一半]
镜-0 ATA-WDC_WD20EFRX-68AX9N0 ATA-WDC_WD20EFRX-68EUZN0 镜-1 ATA-WDC_WD20EFRX-68AX9N0 ATA-WDC_WD20EFRX-68EUZN0
问题#2。 从谷歌searchWD20EFRX + 68AX9N0 + 68EUZN0,我发现这个网页: http ://forums.whirlpool.net.au/archive/2197640
看起来68EUZN0的驱动器可以在大约8秒钟后停下来,而另一个则比较聪明(反之亦然)。
所以,在NFS高速caching+ FS高速caching+ SSD高速caching的情况下,底层驱动器可能会闲置并停下来。 我的猜测是,额外的NFScaching层是它的边缘。
你可以通过改变FS同步选项来testing,也许同步比asynchronous更好。 另外,如果可以的话,我会重新运行SSDcaching的testing。 这个想法是确保停车不发生,并看到结果。
正如网页上提到的,有一些实用程序可以调整停车延迟时间间隔。 如果可以的话,一定要仔细研究。
更新:
您的问题可以被视为一个吞吐量问题,通过存储和转发[有保证的交付]networking。 请注意,我不是在谈论NIC或equiv。
考虑一下I / O操作就像一个包含请求(例如读/写,buf_addr,buf_len)的数据包,它存储在一个结构中。 此请求数据包/结构在各种caching层之间传递:NFS,ZFS,设备驱动程序,SATA控制器,硬盘。 在每一点上,你都有一个到达时间的层次,以及一个离开时间,当请求被转发到下一层时。
在这种情况下,传输实际发生时的实际磁盘传输速度类似于链路速度。 当大多数人考虑磁盘时,他们只考虑传输速度,而不是在传输实际启动时。
在networking路由器中,数据包到达,但即使出站链路清除,也不会立即转发。 根据路由器策略,路由器可能会将数据包延迟一段时间,希望有更多的数据包将从其他来源[或者来自同一个来源(如果是UDP)]到达,因此路由器可以将较小的数据包聚合成一个较大的数据包在出站链路上更有效地传输。
对于磁盘,这个“延迟”可以用给定的FS层的caching策略来表征。 换句话说,如果一个请求在时间T到达一个层,而不是在T + 1层离开,而在T + 1到达下一层,它可以离开/到达T + n。 一个FScaching层可以做到这一点,所以它可以做寻求订单优化/sorting。
您看到的行为与TCP套接字非常相似,因为拥塞而减less了其窗口。
我认为分解testing很重要。 现在,你正在读写。 而且,你不知道哪个是限制因素/瓶颈。 我认为将testing分解为读取或写入会很有帮助。 一个体面的基准程序可能会做到这一点。 我所倡导的是更复杂的版本[这些只是粗略的例子,而不是使用确切的参数]:
对于写,时间dd if = / dev / zero of = / whatever_file count = 64g 对于读取,时间dd if = /无论= / dev / null count = 64g
64GB的原因是这是你的物理内存的两倍,并消除块caching的影响。 做testing之间的同步命令。
将其应用于本地FS并在NFS上重复。
另外,对每个/ dev / {sda,sdb,sdc,sdd}进行读取testing
在这些testing过程中不要做静电。
请注意,在物理原始磁盘上进行读取testing可为您提供硬件实际运行速度的基准/最大值。 裸设备读取应接近您的驱动器传输规格的最大能力。 硬盘的预期写入速度应该是相似的。 如果没有,为什么不呢? 所有磁盘都应该以相同的速度进行testing。 我在这里要做的就是为什么在以前的testing中只有两个磁盘是最大的。
用32GB做math计算,假设最大传输速度为600MB / sec,则至less需要50秒才能填充/清除该数据。 那么,公园超时是什么时候?
而且,通过减less内核通过mem = boot参数允许的物理ram的数量,你可以改变一些东西。 尝试像mem = 8g的东西,看看它有什么影响。 还有一些/ proc条目可以调整块层caching刷新策略。
另外,我的FSes ext4和noatime挂载。 你可能要考虑zfs set atime=off ...
另外,请观看系统日志。 有时,驱动器会报告感应错误,系统会将其重新configuration为使用较低的传输速度。
另外,请查看驱动器的SMART数据。 你有什么不寻常的吗? 在给定的驱动器(例如)上过度软重试。
就像我所说的那样,本地磁盘的性能远远低于我的预期。 我认为这个问题需要首先解决,然后用NFS解决整个系统。 如果所有的RAID盘都有平衡的利用率,那么我就不那么担心了。
我的系统[也有WDC磁盘]没有configuration为NFS(我使用rsync很多)。 我有一些紧迫的事情,我要为未来1-2天做。 之后,我会有时间去尝试一下[我会好奇自己]。
更新#2:
很好的捕捉ZFS不平衡的问题。 这有助于解释我的“问题#1”。 如果重新平衡操作以某种方式混淆了NFS在延迟/时间方面的问题,导致“TCP窗口/退避”行为 – 不是非常高的可能性,而是可能性更低,这也可能解释NFS的脆弱性。
使用rsynctesting,不需要/不想使用NFS。 如果你可以SSH入服务器,rsync 和 NFS是多余的。 使用NFS,只需使用cp等。要执行rsync,请通过ssh直接转到底层的ZFS。 这将工作,即使没有NFS挂载[这是我使用的rsyncconfiguration]:
导出RSYNC_SSH =“/ usr / bin / ssh” 导出SSH_NOCOMPRESS = 1 rsync / wherever1服务器:/ zfsmount /无论
做这个本地主机或绑定可能会得到你期望的性能(不支持ZFS不平衡问题)。 如果是这样,它显然缩小到NFS 本身的问题。
我已经细读了一些NFS的内核源码。 从我所看到的,我不喜欢我所看到的关于及时性。 NFS在80年代开始的时候链接速度很慢,所以它仍然有很多代码来保存NIC带宽。 也就是说,只有在必要时“承诺”才能采取行动。 不一定是我们想要的。 在我的奇特的networking路由器策略类比,NFS的caching似乎是“T + n”延迟。
我build议尽一切可能来禁用NFS的caching,并将其请求传递给ZFS ASAP。 让ZFS是聪明的,NFS是“哑pipe”。 NFScaching只能是通用的(例如,它甚至不知道后备存储是RAID还是太过于安装在其上的基本FS的特殊特性)。 ZFS深入了解RAID和组成它的磁盘。 因此,ZFS的caching可以在select上更加智能化。
我会说尝试让NFS做一个同步装载 – 这可能会伎俩。 另外,我也看到了关于noatime的一些事情,所以请打开这个选项。 可能还有其他的NFS调整/挂载选项。 有希望的是,如果NFS是通常的嫌疑犯,那么可以重新configuration,以便工作得很好。
另一方面,如果没有选项将NFS带到脚后跟,rsync将通过ssh成为一个可行的select? 什么是实际使用情况? 看来你正在使用NFS作为需要高性能的大批量传输的渠道(而不仅仅是作为用户主目录的自动挂载点)。 这是像客户端备份到服务器等东西?