天天看點

優化存儲性能?你需要關注這些Linux I/O排程程式選項

要優化linux性能,it團隊應該檢查目前正在使用的i/o排程程式,并評估諸如deadline和完全公平隊列(completely fair queuing)這樣的替代方案選項。

如果某台linux伺服器性能不佳,通常與存儲信道有關。幾十年前,還相對容易進行分析,伺服器擁有raid陣列,raid陣列的頂層存在分區并且ext2檔案系統在分區頂層運作。然而在今天的資料中心,分析存儲信道就不那麼容易了。

許多現代資料中心的linux伺服器運作在vmware虛拟機管理程式的頂端,與不同類型的存儲區域網絡(storage area network,san)系統相連接配接。這意味着在進行linux存儲優化過程中要考慮許多因素。

常識上認為,當你在虛拟機管理程式上使用linux,你不需要做關于存儲優化的任何操作,但在很多的情況下并非事實。存儲性能取決于許多因素,其中的一個因素便是linux i/o排程程式,如果它調試正确能給性能帶來決定性的影響。

了解不同的linux i/o排程程式類型

i/o排程程式是決定i/o請求是如何被排序的核心程序。有很多種不同類型的排程程式,如deadline類型、completely fair queuing類型以及noop(無操作)類型。在較早的核心版本中,也存在着預期(anticipatory)排程程式。

大多數系統預設的linux i/o排程程式是完全公平的隊列(completely fair queuing)。有了這個排程器,linux核心嘗試在讀寫請求之前将它們均勻地配置設定到存儲通道中。大多數的虛拟機管理程式和協同san産品也在做同樣的事情,是以這一類型的排程程式相對于改進,更可能給特定的負載小的降底。盡管如此,這是最安全的選擇,這也是為什麼所有的版本都使用它作為預設設定。

許多it專業人士認為當使用智能存儲時,noop排程程式提供最佳的性能。有了這一排程程式,linux核心直接傳輸讀寫請求到存儲信道,并将他們重新排序。在大多使用虛拟機管理程式、固态硬碟或san的情況下,noop排程程式提供了最好的性能。然而,這可能并不總是這樣的,特别是在面向大量寫入負載時,使用deadline排程程式可能更有助于底層存儲信道。

deadline i/o排程程式以最高效的方式重新排序來優化寫入請求,進而在底層虛拟機管理程式層簡化了性能負載。如果您的伺服器寫入操作很多,deadline i/o排程程式值得一試。

最後,還可能會遇到預期排程程式。這一排程程式在舊的linux核心中使用,現在已并不常見。在這些較舊的核心上,此排程程式在執行檔案存儲塊時通過執行預讀來優化讀取請求。

1set linux i/o排程程式

管理者可以為指定的磁盤或整個伺服器設定i/o排程程式。要為整個伺服器進行設定,修改grub配置 file/etc/default/grub。在這一檔案中,找到從linux開始的那行。在某些版本中,linux後面可能跟着數字。這行内容中包含着所有的核心啟動參數。在這一行添加elevator=setting,“setting”的更改需要借助所使用的i/o排程程式進行。改變grub的配置檔案完成後,運作grub2-mkconfig -o /boot/grub2/grub.cfg将新的設定寫入系統,然後重新啟動系統。

雖然更改整個系統的linux i/o排程程式可以在某些特定的工作負載上生效,考慮更改每塊磁盤i/o排程程式設定作為一種備選方案。如果伺服器有不同的存儲負載,不同的負載類型又正在寫入不同的裝置,則考慮帶着這些設定運作測試。

每塊磁盤裝置的接口檔案都有一個帶有名字/sys/block/device/queue/scheduler。你可以重複所請求的排程設定推送到這個檔案以使其立即生效,例如重複請求:deadline >/sys/block/sda/queue/scheduler。當設定能夠被持續更改時,linux并不提供标準配置檔案,是以你需要在系統啟動腳本中內建它并使其自動運作。

本文轉自d1net(轉載)

繼續閱讀