微信号:dellemc_tech

介绍:为戴尔易安信客户提供技术支持服务,为广大IT行业用户分享技术文章与行业信息。

Linux主机通过iSCSI协议访问Unity等统一存储时读取性能较慢的原因浅析

2017-02-17 17:52 EMC中文技术社区

      EMC Unity是EMC最新发布的统一存储系列产品。Unity在简化管理、现代化架构设计、总拥有成本和灵活部署等方面建立了新的标准,满足大型或小型公司资源越趋有限的IT人员的需求。本文将介绍在Linux主机上使用iSCSI协议访问Unity、CLARiiON或VNX阵列出现读取性能慢的情况下的处理方法。


 

问题原因:

 

      当使用Linux系统访问Unity等统一存储时,下列两个原因可能会潜在影响iSCSI性能:

  • TCP延迟确认(TCP Delayed ACK)

  • Nagle算法


      Nagle算法试图将数据的小块连接成一个单一的、更大的数据包。这会增加带宽(更多数据包被发送),但也可能会增加延迟时间(等待chunk分块组合起来所耗时间)。


      较慢读性能的另一个潜在原因是TCP延迟确认机制。(默认)对于收到的每两个数据包,这一机制会要求发送一个ACK确认包。系统会等待ACK包大约200毫秒(当然这一等待时长还取决于操作系统和后期调优)。当你有很多小数据包时,Nagle算法和延迟确认都是很有用的机制,比如Telnet(每敲下一个键就会发送一个包)。但对于有独立VLAN、交换机或使用较大的MTU(巨帧,又叫Jumbo Frame)的环境,这两种机制可能会引起性能瓶颈。并不确定停用Nagle算法一定会提高性能,实际环境中必须要进行一定的测试。对于其他操作系统,禁用TCP延迟确认对性能有非常积极的影响。例如在Windows 2003和2008上,禁用TCP延迟确认后会显著增加吞吐量。


      

 


处理方法:

 

      Linux中有禁用TCP延迟确认没有单一的解决方法。下面是对会影响延迟的延迟确认计时器(Delayed ACK Timer)的一种解释。


延迟确认计时器在函数tcp_delack_timer()中实现的:

tcp_delack_timer() net/ipv4/tcp_timer.c 


      当TCP_TIME_DACK计时器到期时此函数被调用。它会重置延迟确认计时器,并发送一个ACK数据包:

tcp_send_delayed_ACK() net/ipv4/tcp_output.c


      此功能会在进站数据包应该被确认又不需要直接ACK时,由tcp_ACK_snd_check()调用(include/linux/tcp_input.c)。函数tcp_send_delayed_ACK()使用mod_timer调用(&tp->delack_timer, timeout)设定延迟确认计时器。当计时器超时后,函数tcp_send_delayed_ACK(SK)发送延迟ACK包,同时延迟确认计时器重新启动。


      欲了解更多信息,参阅:https://access.redhat.com/solutions/407743

 

     如需禁用Nagle算法,可以设置TCP_NODELAY套接字选项。请进行必要的测试,确认新设定是否提高了整体性能。



更多精彩内容,请点击阅读原文”进行查看!

如何每天都能收到如此精彩的文章?

①点击右上角点击查看官方账号”→点击关注

②长按并识别下图中的二维码,直接访问EMC中文支持论坛


 
戴尔易安信技术支持 更多文章 公共、私有或混合:哪种云最适合 您的应用程序? 详解VxRail超融合产品的软硬件功能 EMC Unity启用压缩时的建议和最佳实践 VMAX全闪存集成CloudArray 【声音】叶成辉谈新常态下外资科技公司在中国的角色
猜您喜欢 一步步带你了解前后端分离利器之JWT OpenStack和VMware会被Kubernetes取代吗? 匿名爆料,头条员工被强制离职! 为什么码农要了解业务? FreeSWITCH新特性之VideoMail