在調(diào)查存儲(chǔ)性能問題和瓶頸的時(shí)候,你應(yīng)該調(diào)查從應(yīng)用程序和客戶操作系統(tǒng)到存儲(chǔ)陣列的各個(gè)級(jí)別的存儲(chǔ)堆棧的排隊(duì)情況。在這篇文章中,我將只討論在vSphere存儲(chǔ)堆棧中的隊(duì)列。

對(duì)于大多數(shù)用戶,默認(rèn)的三個(gè)主要隊(duì)列的隊(duì)列大小在vSphere是普遍合適的,不需要任何調(diào)整。但是,對(duì)于那些在他們的環(huán)境中具有一個(gè)高層次整合或非常密集的存儲(chǔ)工作負(fù)載的客戶,一些在vSphere中的隊(duì)列可能需要進(jìn)行調(diào)整,以獲得最佳性能。下圖顯示了在vSphere的三個(gè)主要隊(duì)列,其典型的默認(rèn)隊(duì)列大小。正如你可以看到,I/O請(qǐng)求流入每個(gè)虛擬機(jī)隊(duì)列中,然后流入每個(gè)HBA隊(duì)列,最后適配器隊(duì)列中的I/O流入每個(gè)LUN隊(duì)列。從默認(rèn)的尺寸,你可以看到每個(gè)虛擬機(jī)能夠發(fā)出32個(gè)并發(fā)I/O請(qǐng)求,而下方的適配器隊(duì)列是相當(dāng)大的,通??梢越邮芩械腎/O請(qǐng)求,但在它下面的LU??N隊(duì)列通常本身只有大小為32。這意味著,如果多個(gè)虛擬機(jī)共享一個(gè)LUN,LUN隊(duì)列可能不夠大,不足以支持所有的共享LUN的虛擬機(jī)所發(fā)送的并發(fā)I/O請(qǐng)求。

為什么虛擬機(jī)隊(duì)列和LUN隊(duì)列的設(shè)置只有32?設(shè)置限制的原因是為了防止一個(gè)虛擬機(jī)或vSphere主機(jī),竊取所有的存儲(chǔ)性能,用它自己的 I/O請(qǐng)求占據(jù)了存儲(chǔ),所謂的“吵鬧的鄰居”問題。例如,一個(gè)存儲(chǔ)陣列LUN可以由多個(gè)vSphere主機(jī)共享,通過限制每個(gè)vSphere主機(jī)在這個(gè) LUN上只有32個(gè)并發(fā)I/O,一個(gè)vSphere主機(jī)會(huì)飽和整個(gè)LUN而其他主機(jī)卻挨餓的風(fēng)險(xiǎn)大大減少了。

然而,任意設(shè)置硬盤的限制是上世紀(jì)的處事方式。今天使用的功能,如存儲(chǔ)I/O控制(SIOC),vSphere通過??一個(gè)更優(yōu)雅的和公平的機(jī)制也可以減輕虛擬機(jī)和vSphere主機(jī)遇到吵鬧的鄰居的風(fēng)險(xiǎn)。因此,今天,如果你都注意到,您的設(shè)備隊(duì)列,不斷提高他們的最高限額,我們建議增加設(shè)備/ LUN的深度和使用SIOC,以幫助減輕任何潛在的吵鬧的鄰居問題。一個(gè)快速的小紙條,SIOC通過修改設(shè)備/ LUN隊(duì)列的深度來控制存儲(chǔ)工作負(fù)載,但SIOC不可以增加設(shè)備隊(duì)列的深度以超出設(shè)定了的最大值。所以,在工作負(fù)荷需要更大的隊(duì)列的時(shí)候,你需要自己調(diào)節(jié)隊(duì)列的最大值,然后讓SIOC在需要的時(shí)候減少它。

為什么要增加設(shè)備隊(duì)列?增加了設(shè)備隊(duì)列的原因是存儲(chǔ)陣列通常是更有效的,如果它可以一次看到多個(gè)I/O請(qǐng)求。存儲(chǔ)陣列知道越多的I/O,它更有效維護(hù)它們。這是因?yàn)榇鎯?chǔ)陣列可以重新排列所要求的I/O塊和利用I/O塊的接近。例如,如果虛擬機(jī)要求在存儲(chǔ)主軸上彼此非常接近的2塊,存儲(chǔ)陣列可獲得第一個(gè)塊,然后迅速收集第二個(gè)塊,當(dāng)主軸上的存儲(chǔ)頭正好“在附近” 。如果隊(duì)列深度設(shè)置為1和存儲(chǔ)陣列只能看到一個(gè)I/O請(qǐng)求,當(dāng)磁盤頭是“在附近”時(shí),它不能有效地收集其他的I/O塊,因?yàn)榇鎯?chǔ)陣列不知道下一個(gè)你會(huì)想要什么塊。

您可以監(jiān)視,并檢查當(dāng)前的各種隊(duì)列的隊(duì)列深度,以及他們?nèi)绾畏e極被使用。

要確定存儲(chǔ)適配器的隊(duì)列深度:

1. 在ESX主機(jī)或ESXi shell(技術(shù)支持模式)中的服務(wù)控制臺(tái)運(yùn)行esxtop命令。

2. 按D。

3. 按F,然后選擇隊(duì)列統(tǒng)計(jì)F.

4. AQLEN列的值是存儲(chǔ)適配器的隊(duì)列深度。這是適配器驅(qū)動(dòng)程序配置為支持的ESX VMkernel活動(dòng)命令的最大數(shù)量。

要確定存儲(chǔ)設(shè)備隊(duì)列深度:

1.在ESX主機(jī)或ESXi shell(技術(shù)支持模式)中的服務(wù)控制臺(tái)運(yùn)行esxtop命令。

2.按U。

3.按F,然后選擇隊(duì)列統(tǒng)計(jì)F.

4. DQLEN列的值是存儲(chǔ)設(shè)備的隊(duì)列深度。這是適配器驅(qū)動(dòng)程序配置為支持的ESX VMkernel活動(dòng)命令的最大數(shù)量。

如果你不斷地發(fā)現(xiàn),您的設(shè)備/LUN隊(duì)列報(bào)告100%“主動(dòng)/滿”的,則它可能是一個(gè)指示,你的設(shè)備上的隊(duì)列,或底層的存儲(chǔ)有瓶頸。

另一個(gè)有趣的內(nèi)容是在VMware ESX / ESXi中控制LUN隊(duì)列深度的限制。

你在每個(gè)設(shè)備設(shè)置QFullSampleSize和QFullThreshold。

運(yùn)行以下ESXCLI命令。

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

在重新啟動(dòng)后設(shè)置是持久性的。

您可以通過使用相應(yīng)的列表命令檢索設(shè)備的值。

esxcli storage core device list

該命令支持可選的 – 設(shè)備參數(shù)。

esxcli storage core device list –device device

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

QFullSampleSize:

• 對(duì)于3PAR,NetApp和IBM XIV存儲(chǔ)陣列,QFullSampleSize值設(shè)置為32。

• 對(duì)于其他存儲(chǔ)陣列,請(qǐng)聯(lián)系您的存儲(chǔ)供應(yīng)商。

QFullThreshold:

• 對(duì)于3PAR存儲(chǔ)陣列中,設(shè)置QFullThreshold值4。

• 對(duì)于NetApp和IBM XIV存儲(chǔ)陣列,設(shè)置QFullThreshold值設(shè)置為8。

• 對(duì)于其他存儲(chǔ)陣列,請(qǐng)聯(lián)系您的存儲(chǔ)供應(yīng)商。

vSphere的一個(gè)功能,從存儲(chǔ)陣列和設(shè)備/ LUN隊(duì)列中來檢測(cè)隊(duì)列滿的警告,這樣vSphere發(fā)出的I/O請(qǐng)求的數(shù)量減少了。此功能默認(rèn)情況下是關(guān)閉的,但根據(jù)您的存儲(chǔ)供應(yīng)商的最佳實(shí)踐,應(yīng)該啟用。

總之,有很多虛擬化存儲(chǔ)堆棧和隊(duì)列,這些隊(duì)列有各種不同的默認(rèn)大小。對(duì)于大多數(shù)環(huán)境中,你并不需要調(diào)整隊(duì)列。然而,對(duì)于I/O密集??型工作負(fù)載,產(chǎn)生了大量的并發(fā)I/O請(qǐng)求或高度整合的環(huán)境中,它可能是有益的調(diào)整,使存儲(chǔ)陣列可以更有效地處理傳入的I/O請(qǐng)求。使用SIOC和其他隊(duì)列調(diào)節(jié)功能,可以減輕一些潛在的風(fēng)險(xiǎn)增加了vSphere的隊(duì)列,但它始終是最好的做法進(jìn)行測(cè)試和評(píng)估他們?cè)谏a(chǎn)中實(shí)施前后的變化,避免過度或不必要的修改,如果你沒有注意到的隊(duì)列隊(duì)列滿的瓶頸。

分享到

huanghui

相關(guān)推薦