开始新对话

未解决

此帖子已超过 5 年

1327

2013年2月4日 01:00

解决vSphere的存储性能问题之存储队列

​ ​
​ ​

​解决​​vSphere​​的存储性能问题之存储队列​

​ ​
​ ​

​ ​

​转载请在文首保留原文出处:​​EMC​​中文支持论坛​​- ​​https://community.emc.com/go/chinese​

​ ​
​ ​

​介绍​

​ ​
​ ​

​ ​

​vSphere​​的存储队列是什么,需要改变吗?​

​ ​
​ ​

​更多信息​

​ ​
​ ​

​ ​

​ 我们都不得不在我们的生活中等待一次或两次排队,排队等候只是一个生活的元素。在存储领域,这是真实的​​;​​存储​​I / O​​有大量的队列,他们必须等待。在这篇文章中,我们分析了在虚拟化存储堆栈的不同队列,讨论何时,如何,以及为什么要修改它们。​

​ ​

​ 队列是必要的,但主要它们被用来允许共享的资源,并允许并发流。通过使用队列,​​vSphere​​是能够让多个虚拟机共享一个单一的资源。队列还允许应用程序同时在一个​​LUN​​上有多个活动的​​I / O​​请求,它提供了并发性,并提高了性能。但这里有一个权衡,如果你允许太多的并发,底层的资源可能会饱和。为了防止一个虚拟机或一台主机出现底层资源的饱和,队列需要设置尺寸​​/​​限制来规定可以一次发送​​I / O​​请求的数量限制。​

​ ​

​ 在一个虚拟化的环境中有多个队列。在堆栈的顶部,有​​guest OS​​内部使用的各种存储队列。这包括由应用程序本身和存储装置内部使用来宾​​OS​​驱动程序创建和使用的队列。在的​​vSphere​​软件堆栈内的虚拟化层,有三个主要的队列。一个世界队列(每个虚拟机有一个队列),适配器队列(主机中的每一个​​HBA​​有一个队列),以及设备​​/LUN​​队列(每个​​LUN​​,每个适配器有一个队列)。最后,在存储堆栈底部的有存储装置的队列,例如前端存储端口具有可用于所有传入在该端口上的​​I / O​​的一个队列。​

​ ​

​ ​

6a00d8341c328153ef01774354e2fd970d-500wi.jpg

​ ​

​ 在调查存储性能问题和瓶颈的时候,你应该调查从应用程序和客户操作系统到存储阵列的各个级别的存储堆栈的排队情况。在这篇文章中,我将只讨论在​​vSphere​​存储堆栈中的队列。 ​

​ ​

​ 对于大多数用户,默认的三个主要队列的队列大小在​​vSphere​​是普遍合适的,不需要任何调整。但是,对于那些在他们的环境中具有一个高层次整合或非常密集的存储工作负载的客户,一些在​​vSphere​​中的队列可能需要进行调整,以获得最佳性能。下图显示了在​​vSphere​​的三个主要队列,其典型的默认队列大小。正如你可以看到,​​I / O​​请求流入每个虚拟机队列中,然后流入每个​​HBA​​队列,最后适配器队列中的​​I / O​​流入每个​​LUN​​队列。从默认的尺寸,你可以看到每个虚拟机能够发出​​32​​个并发​​I / O​​请求,而下方的适配器队列是相当大的,通常可以接受所有的​​I / O​​请求,但在它下面的​​LU​​​​N​​队列通常本身只有大小为​​32​​。这意味着,如果多个虚拟机共享一个​​LUN​​,​​LUN​​队列可能不够大,不足以支持所有的共享​​LUN​​的虚拟机所发送的并发​​I / O​​请求。​

​ ​

​ ​

untitled.png

​ ​

​ 为什么虚拟机队列和​​LUN​​队列的设置只有​​32​​?设置限制的原因是为了防止一个虚拟机或​​vSphere​​主机,窃取所有的存储性能,用它自己的​​I / O​​请求占据了存储,所谓的“吵闹的邻居”问题。例如,一个存储阵列​​LUN​​可以由多个​​vSphere​​主机共享,通过限制每个​​vSphere​​主机在这个​​LUN​​上只有​​32​​个并发​​I / O​​,一个​​vSphere​​主机会饱和整个​​LUN​​而其他主机却挨饿的风险大大减少了。​

​ ​

​ 然而,任意设置硬盘的限制是上世纪的处事方式。今天使用的功能,如存储​​I / O​​控制(​​SIOC​​),​​vSphere​​通过​​​​一个更优雅的和公平的机制​​也可以减轻虚拟机和​​vSphere​​主机遇到吵闹的邻居的风险​​。因此,今天,如果你都注意到,您的设备队列,不断提高他们的最高限额,我们建议增加设备​​/ LUN​​的深度和使用​​SIOC​​,以帮助减轻任何潜在的吵闹的邻居问题。一个快速的小纸条,​​SIOC​​通过修改设备​​/ LUN​​队列的深度来控制存储工作负载,但​​SIOC​​不可以增加设备队列的深度以超出设定了的最大值。所以,在工作负荷需要更大的队列的时候,你需要自己调节队列的最大值,然后让​​SIOC​​在需要的时候减少它。​​ ​

​ ​

​ 为什么要增加设备队列?增加了设备队列的原因是存储阵列通常是更有效的,如果它可以一次看到多个​​I / O​​请求。存储阵列知道越多的​​I / O​​,它更有效维护他们。这是因为存储阵列可以重新排列所要求的​​I / O​​块和利用​​I / O​​块的接近。例如,如果虚拟机要求在存储主轴上彼此非常接近的​​2​​块,存储阵列可获得第一个块,然后迅速收集第二个块,当主轴上的存储头正好“在附近” 。如果队列深度设置为​​1​​和存储阵列只能看到一个​​I / O​​请求,当磁盘头是“在附近”时,它不能有效地收集其他的​​I / O​​块,因为存储阵列不知道下一个你会想要什么块。​​ ​

​ ​

​ 您可以监视,并检查当前的各种队列的队列深度,以及他们如何积极被使用。​

​ ​

​ 要确定存储适配器的队列深度:​​ ​

​ ​

​ 1​​。在​​ESX​​主机或​​ESXi shell​​(技术支持模式)中的服务控制台运行​​esxtop​​命令。​

​ ​

​ 2​​。按​​D​​。​​ ​

​ ​

​ 3​​。按​​F​​,然后选择队列统计​​F. ​

​ ​

​ 4​​。​​AQLEN​​列的值是存储适配器的队列深度。这是适配器驱动程序配置为支持的​​ESX VMkernel​​活动命令的最大数量。​

​ ​

​ 要确定存储设备队列深度:​​ ​

​ ​

​ 1​​。在​​ESX​​主机或​​ESXi shell​​(技术支持模式)中的服务控制台运行​​esxtop​​命令。​

​ ​

​ 2​​。按​​U​​。​​ ​

​ ​

​ 3​​。按​​F​​,然后选择队列统计​​F. ​

​ ​

​ 4​​。​​DQLEN​​列的值是存储设备的队列深度。这是适配器驱动程序配置为支持的​​ESX VMkernel​​活动命令的最大数量。​

​ ​

​ 如果你不断地发现,您的设备​​/ LUN​​队列报告​​100​​%“主动​​/​​满”的,则它可能是一个指示,你的设备上的队列,或底层的存储有瓶颈。​​ ​

​ ​

​ 另一个有趣的内容是在​​VMware ESX / ESXi​​中控制​​LUN​​队列深度的限制。 ​

​ ​

​ 你在每个设备设置​​QFullSampleSize​​和​​QFullThreshold​​。​​ ​

​ ​

​ 运行以下​​ESXCLI​​命令。​​ ​

​ ​

​ esxcli storage core device set --device device_name --queue-full-threshold Q --queue-full-sample-size S​

​ ​

​ 在重新启动后设置是持久性的。​​ ​

​ ​

​ 您可以通过使用相应的列表命令检索设备的值。​​ ​

​ ​

​ esxcli storage core device list​

​ ​

​ 该命令支持可选的​​ - ​​设备参数。​​ ​

​ ​

​ esxcli storage core device list --device device​

​ ​

​ 在早期版本中的推荐值是相同的。 ​

​ ​

​ QFullSampleSize​​:​​ ​

​ ​

​ •对于​​3PAR​​,​​NetApp​​和​​IBM XIV​​存储阵列,​​QFullSampleSize​​值设置为​​32​​。 ​

​ ​

​ •对于其他存储阵列,请联系您的存储供应商。​

​ ​

​ QFullThreshold​​:​​ ​

​ ​

​ •对于​​3PAR​​存储阵列中,设置​​QFullThreshold​​值​​4​​。 ​

​ ​

​ •对于​​NetApp​​和​​IBM XIV​​存储阵列,设置​​QFullThreshold​​值设置为​​8​​。​

​ ​

​ •对于其他存储阵列,请联系您的存储供应商。​

​ ​

​ vSphere​​的一个功能,从存储阵列和设备​​/ LUN​​队列中来检测队列满的警告,这样​​vSphere​​发出的​​I / O​​请求的数量减少了。此功能默认情况下是关闭的,但根据您的存储供应商的最佳实践,应该启用。​​ ​

​ ​

​ 总之,有很多虚拟化存储堆栈和队列,这些队列有各种不同的默认大小。对于大多数环境中,你并不需要调整队列。然而,对于​​I / O​​密集​​​​型工作负载,产生了大量的并发​​I / O​​请求或高度整合的环境中,它可能是有益的调整,使存储阵列可以更有效地处理传入的​​I / O​​请求。使用​​SIOC​​和其他队列调节功能,可以减轻一些潜在的风险增加了​​vSphere​​的队列,但它始终是最好的做法进行测试和评估他们在生产中实施前后的变化,避免过度或不必要的修改,如果你没有注意到的队列队列满的瓶颈。​

​ ​
​ ​

​应用于​

​ ​
​ ​

​ ​

​VMware vSphere 5.x​

​ ​

​ ​
没有回复!
找不到事件!

Top