ESX/ESXi 主机的某些存储阵列可能存在读取或写入性能问题 (1002598)
免责声明:本文为 ESX/ESXi hosts might experience read or write performance issues with certain storage arrays (1002598)的翻译版本。尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。有关最新内容,请参见英文版本。
不同阵列供应商提供的某些 iSCSI 存储阵列在网络拥塞时间段出现不恰当行为。此问题与这些阵列的 TCP/IP 实施有关,并可能严重影响通过 iSCSI 启动器连接到 ESXi/ESX 软件的存储的读取性能。此问题在涉及 Microsoft iSCSI 启动器的本地(非虚拟化)环境中已报告。
背景概念
要理解此问题,应熟悉几个 TCP 概念:
- 延迟 ACK
- 慢启动
- 拥塞避免
延迟 ACK
TCP 网络协议的中心规则是接收器确认收到通过 TCP 发送的数据。根据 RFC 813,“非常简单,当数据到达接收器时,协议要求接收器返回此数据的确认。协议指定按顺序将数据字节编号,以便接收器通过为接收到的编号最高的数据字节命名来确认数据,同时也确认之前的字节。 承载确认的 TCP 数据包称为 ACK。
主机收到一串 TCP 数据段时,可以通过为收到的每条数据段发送一条以下 ACK 确认分段来提高网络和主机的效率。这称为延迟 ACK。常规做法是为每两个完整大小的数据分段发送一条 ACK,并且通过多个指定阈值确保不会延迟某个分段的 ACK。此阈值在 100 ms 到 500 ms 之间变化。与大多数其他服务器一样,ESXi/ESX 也使用延迟 ACK 的优势。
慢启动和拥塞避免
从源到目标的两个网络元素之间的数据处理能力不匹配时,可能会发生拥塞。拥塞表现为延迟、超时或数据包丢失。要避免拥塞以及从拥塞恢复,TCP 使用两种算法:拥塞避免算法和慢启动算法。尽管这两个算法的底层机制不同,其基本概念都是一样的:TCP 发送器在发生拥塞时必须降低其数据传输速率,然后在重新传输的数据段获得确认时提高速率。
发生拥塞时,使用延迟 ACK 和慢启动的 TCP/IP 网络的典型恢复顺序为:
- 发送器在重新传输超时时间段内未收到 ACK 确认时,会检测拥塞。
- 发送器在将剩余分段排序以便重新传输之前,会重新传输第一个数据分段并等待 ACK。
- 接收器收到重新传输的数据分段后,启动延迟 ACK 计时器。
- 延迟 ACK 计时器超时后,接收器会传输 ACK。在等待期间,发送器和接收器之间没有其他传输。
- 发送 ACK 后,发送器会连续重新传输接下来的两个数据段。
- 接收器收到第二个数据段后,立即传输 ACK。
- 发送器收到 ACK 后,将连续重新传输接下来的四个数据段。
- 拥塞时间段结束且网络恢复正常流量速率之前,此顺序将一直持续。
在该恢复顺序中,步骤 3 中初始延迟 ACK 计时器的延迟时间最长。
问题描述
问题中受影响的 iSCSI 阵列处理拥塞的方式稍有不同。与主机实施慢启动算法或拥塞避免算法或同时实施两者不同的是,阵列采用非常保守的方式每次只重新传输一个丢失的数据分段,并等待主机的 ACK 后再重新传输下一个数据分段。此过程将继续,直到所有丢失的数据段全部恢复。
这种方法与 ESXi/ESX 主机上已实施的延迟 ACK 结合使用,可减慢拥塞网络中的读取性能直至停止。因此,使用此类型阵列的主机的内核日志会报告频繁超时。最值得注意的是,由于 VMFS 使用较小的超时值,VMFS 检测信号将出现大量超时。此配置也会出现客户机报告过长的读取响应时间(大约几十秒)。读取块大小较大的数据时,此问题会更加严重。在这种情况下,高带宽分配会造成网络拥塞,且每个 I/O 由很多数据段组成,需要更长的恢复时间。
在 vmkernel.log
文件中,您可能会看到类似如下内容的条目:
-09-17T15:07:19Z iscsid: discovery_sendtargets::Running discovery on IFACE iscsi_vmk@vmk2(iscsi_vmk) (drec.transport=iscsi_vmk)
-09-17T15:07:19Z iscsid: cannot make connection to 10.0.68.2:3260 (111)
-09-17T15:07:19Z iscsid: connection to discovery address 10.0.68.2 failed
-09-17T15:07:19Z iscsid: connection login retries (reopen_max) 5 exceeded
-09-17T15:07:19Z iscsid: Login Target Skipped: iqn.2003-10.com.lefthandnetworks:hvtiscsi:1808:vmwds01 if=iscsi_vmk@vmk1 addr=10.0.68.2:3260 (TPGT:1 ISID:0x2) (Already Running)
-09-17T15:07:19Z iscsid: Login Target Skipped: iqn.2003-10.com.lefthandnetworks:hvtiscsi:1808:vmwds01 if=iscsi_vmk@vmk2 addr=10.0.68.2:3260 (TPGT:1 ISID:0x3) (Already Running)
iSCSI 阵列供应商在终端解决此问题之前,请在设计 IP 存储网络时提供足够的容量,以便满足峰值使用量并降低拥塞风险。如果您遇到本文所描述的问题,且无法更改您的网络配置或确保无拥塞环境,则可以尝试以下解决办法。
此权宜措施包括通过配置选项在 ESX/ESXi 主机上禁用延迟 ACK。
注意:请联系您的存储供应商,确认禁用延迟 ACK 是否是针对其存储阵列推荐的权宜措施。
ESX/ESXi 3.5 和 4.x/5.x/6.0 之间处理延迟 ACK 的差异
ESX/ESXi 3.5 和 4.x/5.x/6.0 之间禁用延迟 ACK 的方式略有差异。ESX/ESXi 3.5 和 4.x/5.x/6.0 之间的主要差异是延迟 ACK 设置的工作原理与其设置:
- 在 ESX/ESXi 3.5 中,延迟 ACK 设置对于 ESX/ESXi 系统而言是全局的。
通过设置此选项,无论 TCP 是否尝试进行拥塞恢复并正常运行,您都可以完全禁用延迟 ACK。此选项会影响整个 TCP/IP 堆栈,因此,如果您实施此更改,所有 TCP/IP 应用程序都会受影响。因而,设置此选项可能降低 iSCSI 和其他应用程序的性能(例如 NFS 和 vMotion),同样会导致拥塞。尽管如此,此选项允许受影响的 iSCSI 阵列在其他事务期间,从拥塞中迅速恢复并保持合理的性能。
- 在 ESX/ESXi 4.x/5.x/6.0 中,配置延迟 ACK 设置的建议方法是在每个发现目标上配置。您也可以在每个单独目标上配置延迟 ACK 设置。此外,尽管不推荐,您仍然可以为所有 iSCSI 目标全局配置延迟 ACK 设置。
在 ESXi 中配置延迟 ACK。
要在 ESXi 中实施此权宜措施,请使用 vSphere Client 禁用延迟 ACK。
在 ESXi 6.5、ESXi 6.7 中禁用延迟 ACK。
- 登录到 Web Client,然后选择主机。
- 右键单击主机,然后单击“维护模式”。
- 等待进入维护模式任务完成。
- 导航到“配置”选项卡。
- 单击“存储适配器”。
- 单击要修改的 iSCSI vmhba。
- 要在发现地址上修改延迟 ACK 设置,请执行以下操作:
- 单击“适配器详细信息”的“目标”选项卡。
- 单击“动态发现”。
- 单击“高级设置”。
- 在延迟 ACK“高级参数”选项中,取消选中“从父项继承”和 DelayedACK。
- 单击“确定”
- 重新引导主机。
在 ESX/ESXi 4.x、ESXi 5.x 和 ESXi 6.0 中禁用延迟 ACK。
- 登录到 vSphere Client,然后选择主机。
- 右键单击主机,然后单击维护模式。
- 等待进入维护模式任务完成。
- 导航到配置选项卡。
- 单击存储适配器。
- 单击要修改的 iSCSI vmhba。
- 单击属性。
- 修改延迟 ACK 设置,使用最符合您站点要求的选项:
- 要在发现地址上修改延迟 ACK 设置,请执行以下操作(推荐):
- 在发现地址上,单击动态发现选项卡。
- 单击服务器地址选项卡。
- 单击设置 > 高级。
- 在延迟 ACK“高级参数”选项中,取消选中从父项继承和 DelayedACK。
- 单击确定。
- 在一组特定目标上修改延迟 ACK 设置:
- 在发现地址上,单击静态发现选项卡。
- 选择所使用阵列上的所有目标。
- 单击“移除”以删除所选条目。
- 单击动态发现选项卡。
- 移除所使用阵列上的所有目标。
- 输入发现地址,但是先不重新扫描适配器。
- 选择要修改的发现地址,然后单击设置 > 高级。
- 在延迟 ACK“高级参数”选项中,取消选中从父项继承和 DelayedACK。
- 单击确定。
- 为要修改的每个发现地址重复步骤 f-i。
- 要全局修改延迟 ACK 设置,请执行以下操作:
- 选择常规选项卡。
- 单击高级。
- 在延迟 ACK“高级参数”选项中,取消选中从父项继承和 DelayedACK。
- 单击确定。
- 要在发现地址上修改延迟 ACK 设置,请执行以下操作(推荐):
- 重新引导主机。
在 ESX/ESXi 4.x、ESXi 5.x 和 ESXi 6.0 中重新启用延迟 ACK
- 登录到 vSphere Client,然后选择主机。
- 导航到高级设置页面,如上述“在 ESX/ESXi 4.x、ESXi 5.x 和 ESXi 6.0 中禁用延迟 ACK”任务所述。
- 单击从父项继承 > DelayedAck。
- 重新引导主机。
在 ESX/ESXi 4.x、ESXi 5.x 和 ESXi 6.0 中查看延迟 ACK 的当前设置
- 登录到 vSphere Client,然后选择主机。
- 导航到高级设置页面,如上述“在 ESX/ESXi 4.x、ESXi 5.x 和 ESXi 6.0 中禁用延迟 ACK”任务所述。
- 查看 DelayedAck 设置。
如果已查看 DelayedAck 设置,将启用此选项。如果在更改延迟 ACK 设置后且在重新引导主机之前查看,结果将显示新设置而不是当前使用的设置。
注意:
- 要禁用 delayed_ack,请从命令行运行以下命令:
vmkiscsi-tool -W -a delayed_ack=0 -j vmhbaXX
要启用 delayed_ack,请运行以下命令:
vmkiscsi-tool -W -a delayed_ack=1
-j
vmhbaXX - 要查看此参数,请运行以下命令:
vmkiscsi-tool -W vmhbaXX
- 要禁用 delayed_ack,请从命令行运行以下命令:
在 ESX/ESXi 3.5 中配置延迟 ACK
要在 ESX/ESXi 3.5 中实施此权宜措施,请使用 VI Client 更改 Net.TcpipDelayedAck
高级参数设置。默认情况下,此选项设置为 1,将启用延迟 ACK。要禁用延迟 ACK,请执行以下步骤。
在 ESX/ESXi 3.5 中禁用延迟 ACK
- 登录到 VI Client,然后选择主机。
- 单击配置选项卡,然后单击高级设置。
- 单击网络,然后在高级参数列表上滚动直到找到
Net.TcpipDelayedAck
参数。 - 将参数值设置为 0.
- 单击确定。
- 重新引导主机。
在 ESX/ESXi 3.5 上重新启用延迟 ACK
- 登录到 VI Client,然后选择主机。
- 单击配置选项卡,然后选择高级设置。
- 选择网络,然后在高级参数列表上滚动直到找到
Net.TcpipDelayedAck
参数。 - 将参数值设置为 1。
- 单击确定。
- 重新引导主机。
在 ESX/ESXi 3.5 中查看延迟 ACK 的当前设置
- 登录到 VI Client,然后选择主机。
- 单击配置选项卡,然后选择高级设置。
- 选择网络,然后在高级参数列表上滚动直到找到
Net.TcpipDelayedAck
参数。 - 查看设置。设置为 1 表示已启用延迟 ACK,设置为 0 表示已禁用。
- 单击确定。
注意:重新引导后,延迟 ACK 更改才会生效。如果在执行更改后未重新引导主机,则查看结果将显示新的设置而不是当前使用的设置。
ESX/ESXi 主机的某些存储阵列可能存在读取或写入性能问题 (1002598)的更多相关文章
- ESX/ESXi 主机上的每个插槽中安装了多少内存
要确定在 ESX/ESXi 主机上的每个插槽中安装了多少内存,请执行以下操作: 1. 启动ssh服务 2. 登陆esxi主机查看 使用 SSH 客户端登录主机,以 root 用户身份运行以下命令之一: ...
- vSphere Client 更改 ESX/ESXi 主机的端口
https://blog.csdn.net/hanzheng260561728/article/details/51283808?locationNum=8&fps=1
- [转帖]VMWare官网:无法关闭 ESXi 主机上的虚拟机 (1014165)
无法关闭 ESXi 主机上的虚拟机 (1014165) https://kb.vmware.com/s/article/1014165?lang=zh_CN Last Updated: 4/17/20 ...
- VMWare ESX/ESXi 虚拟机硬盘的厚置备(Thick Provision)与精简置备(Thin Provision)的转换
VMWare ESX/ESXi 有两种硬盘置备方式,厚制备(thick)和精简置备(Thin) 有时可能会由于性能问题或磁盘空间需要将虚拟机磁盘在两种模式间进行互转,虽然在虚拟机配置页面是没有办法修改 ...
- 手动配置 ESXi 主机挂载 NFS 的最大值
目录 目录 资料 手动配置 ESXi 主机挂载 NFS 的最大值 资料 官方 KB 地址 手动配置 ESXi 主机挂载 NFS 的最大值 Open: 清单 ==> ESXi 主机 ==> ...
- esxi主机用命令行强行关闭通过前端界面无法关闭的ESXI虚拟机
环境:esxi5.1-esxi6.5 背景:如果esxi下面某一台vm死机了,并且esxi的控制台卡死不能用,为了不影响同一个esx下其他的vm正常使用,那么我们只能用命令行来单独重启此vm,保证一定 ...
- Esxi主机虚拟机迁移注意事项
1. Esxi主机上的虚拟机迁移只能是低----->高,或版本一样的才能进行迁移 [如Esxi5.1---->Esxi5.5]ok, 而Esxi5.5----->Esxi5.1 no ...
- 怎样使用Secure CRT查看vcenter和esxi主机的日志文件(转)
对ESXI主机的日志管理对于故障诊断和合规性至关重要.Esxi主机的日志通过syslog工具进行管理的,在默认的情况下,日志文件存储在主机的scratch分区中(/scratch/log/).scra ...
- vSphere client 登陆ESXI主机“您无权登录次服务器”
vCenter安装在虚拟机上,安装好后想调整下内存,直接把虚拟机关闭了电源,突然一想服务器都被我关了,还拿什么修改内存,完蛋! 突然想起,在使用vCenter之前,都是用vsphere client ...
随机推荐
- J2EE基础总结(5)——EJB
什么是EJB JB事实上就是企业Java Beans. EJB是J2EE平台的重要组成部分. J2EE平台基于组件的企业级应用架构,提供多 层次.分布式和高事务的功能特点. EJB提供 ...
- 解析cocos2d-lua项目中的Hello World
创建完cocos2d-x的lua项目后.打开项目的Resources目录,找到hello.lua.cocos2d-x的lua项目的測试样例主要就是由这个脚本文件运行的. require "A ...
- 写给小白的JVM学习指南
Java 虚拟机是学习 Java 的基础,也是迈入高级 Java 开发工程师的必备知识点.所以今天这篇文章我们来聊聊如何从零开始学习 Java 虚拟机. 基础 对于刚刚接触 JVM 的同学来说,JVM ...
- Android中不同方向嵌套滑动的解决方式(ListView为样例)
前言: 就像手机QQ的聊天消息列表.一个纵向滑动的ListView列举全部消息,但每一条消息能够横向滑动. 而默认情况下,仅仅能有一个地方消化处理触摸事件,要么ListView吃掉这个事件.要么子It ...
- LeetCode 811. Subdomain Visit Count (子域名访问计数)
题目标签:HashMap 题目给了我们一组域名,让我们把每一个域名,包括它的子域名,计数. 遍历每一个域名,取得它的计数,然后把它的所有子域名和它自己,存入hashmap,域名作为key,计数作为va ...
- mybatis Generator生成代码及使用方式(转载)
转载自:http://www.cnblogs.com/fengzheng/p/5889312.html 文章很棒,很不错,转了.
- 配置hadoop集群一
花了1天时间最终把环境搭建好了.整理了一下,希望对想学习hadoop的有所帮助. 资料下载:http://pan.baidu.com/s/1kTupgkn 包括了linux虚拟机.jdk, hadoo ...
- tiny4412学习(四)之移植linux-设备树(1)设备树基础知识及GPIO中断【转】
本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74177978 版权声明:本文为博主原创文章,转载请注明http://blog.c ...
- go语言笔记——append是内置的函数!!!new是一个函数!!!调试可以使用闭包,本质上是print调试,尼玛!
内置函数 Go 语言拥有一些不需要进行导入操作就可以使用的内置函数.它们有时可以针对不同的类型进行操作,例如:len.cap 和 append,或必须用于系统级的操作,例如:panic.因此,它们需要 ...
- maven 国内完整源
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...