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

 

介紹

 

vSphere的存儲隊列是什麼,須要改變嗎?前端

更多信息

 

     咱們都不得不在咱們的生活中等待一次或兩次排隊,排隊等候只是一個生活的元素。在存儲領域,這是真實的;存儲I / O有大量的隊列,他們必須等待。在這篇文章中,咱們分析了在虛擬化存儲堆棧的不一樣隊列,討論什麼時候,如何,以及爲何要修改它們。shell

     隊列是必要的,但主要它們被用來容許共享的資源,並容許併發流。經過使用隊列,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請求。spa

 

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在須要的時候減小它。 orm

     爲何要增長設備隊列?增長了設備隊列的緣由是存儲陣列一般是更有效的,若是它能夠一次看到多個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的隊列,但它始終是最好的作法進行測試和評估他們在生產中實施先後的變化,避免過分或沒必要要的修改,若是你沒有注意到的隊列隊列滿的瓶頸。

相關文章
相關標籤/搜索