解決vSphere的存儲性能問題之存儲隊列


 

介紹

 

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。這意味着,如果多個虛擬機共享一個LUNLUN隊列可能不夠大,不足以支持所有的共享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.

          4AQLEN列的值是存儲適配器的隊列深度。這是適配器驅動程序配置為支持的ESX VMkernel活動命令的最大數量。

     要確定存儲設備隊列深度:

          1。在ESX主機或ESXi shell(技術支持模式)中的服務控制台運行esxtop命令。

          2。按U

          3。按F,然后選擇隊列統計F.

          4DQLEN列的值是存儲設備的隊列深度。這是適配器驅動程序配置為支持的ESX VMkernel活動命令的最大數量。

     如果你不斷地發現,您的設備/ LUN隊列報告100%“主動/滿”的,則它可能是一個指示,你的設備上的隊列,或底層的存儲有瓶頸。  

     另一個有趣的內容是在VMware ESX / ESXi中控制LUN隊列深度的限制。

     你在每個設備設置QFullSampleSizeQFullThreshold

     運行以下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

     •對於3PARNetAppIBM XIV存儲陣列,QFullSampleSize值設置為32

     •對於其他存儲陣列,請聯系您的存儲供應商。

     QFullThreshold

     •對於3PAR存儲陣列中,設置QFullThreshold4

     •對於NetAppIBM XIV存儲陣列,設置QFullThreshold值設置為8

     •對於其他存儲陣列,請聯系您的存儲供應商。

     vSphere的一個功能,從存儲陣列和設備/ LUN隊列中來檢測隊列滿的警告,這樣vSphere發出的I / O請求的數量減少了。此功能默認情況下是關閉的,但根據您的存儲供應商的最佳實踐,應該啟用。  

     總之,有很多虛擬化存儲堆棧和隊列,這些隊列有各種不同的默認大小。對於大多數環境中,你並不需要調整隊列。然而,對於I / O密集​​型工作負載,產生了大量的並發I / O請求或高度整合的環境中,它可能是有益的調整,使存儲陣列可以更有效地處理傳入的I / O請求。使用SIOC和其他隊列調節功能,可以減輕一些潛在的風險增加了vSphere的隊列,但它始終是最好的做法進行測試和評估他們在生產中實施前后的變化,避免過度或不必要的修改,如果你沒有注意到的隊列隊列滿的瓶頸。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM