在 Linux 中使用 Azure Premium 存儲的基本優(yōu)化指南

Note

以下測試和結果都是基于 CentOS 6.5。對于其他版本,請參考本文檔,并自行進行相關測試。

建議使用最新的內(nèi)核版本

一般情況下,新的內(nèi)核版本能解決老版本中存在的問題,添加對新出現(xiàn)硬件的支持,以及改進對硬件的支持程度。

建議使用你當前 Linux 發(fā)行版本中最新的內(nèi)核版本;如有可能,定期更新到大版本中最新的補丁版本。

更新 Linux LIS 驅(qū)動

官方文檔中提到,CentOS 和 Oracle 特定的發(fā)行版本,需要更新 LIS 以支持 Premium storage。具體如下圖所示:

高級存儲:適用于 Azure 虛擬機工作負荷的高性能存儲

在磁盤分區(qū)時,與設備的頁大小對齊

在2.6.32-431.29.2.el6.x86_64的內(nèi)核中,fdisk默認還是使用柱面為邊界來分區(qū);如果柱面與 SSD 磁盤的頁大小沒有對齊,文件系統(tǒng)層面的一個 IO,可能會在設備層產(chǎn)生額外的開銷,影響讀寫響應時間。

以下是 CentOS 6.5 執(zhí)行fdisk不帶參數(shù)時的警告信息。

以下是通過不同參數(shù)進行磁盤分區(qū)后,使用fdisk -u -c -l的結果。/dev/sdc1是從磁盤的第二個 1024k 開始的,/dev/sdd1則是從第二個 8k 開始的。一般來講,這個邊界對齊最好是 128K 的偶數(shù)倍。

復制

#fdisk -u -c /dev/sdc

#fdisk /dev/sdd

在 CentOS 7 以后,fdisk默認就使用了以 512Bytes 的 Sector 大小為單位來顯示,分區(qū)時也默認從第 2048 個 sector 開始劃第一個分區(qū)。所以不必擔心 SSD 還會有邊界對齊問題,使用默認命令fdisk即可。

參考該文檔:Improving performance/Storage devices

文件系統(tǒng)格式

在 CentOS 7 以后,默認使用XFS作為文件系統(tǒng)格式。在 CentOS 6 中,推薦使用ext4或者XFS。

掛載選項

Write barrier是用來保證內(nèi)存中數(shù)據(jù)以正確順序?qū)懭氪疟P,以防止突然斷電而引起的數(shù)據(jù)不一致問題。如果在新建磁盤時設置的 cache 規(guī)則為none或者readonly, 完全可以禁用該功能,因為數(shù)據(jù)會不經(jīng)過 cache 直接寫入 Azure Premium Storage 底層的磁盤。

noatime/relatime : atime是文件屬性中的訪問時間。每次文件被訪問,該時間就會被更改。如果文件被頻繁訪問,那花費在記錄該時間上的時間也很可觀,會影響 IO 的效率。

如果應用不需要比較文件訪問時間,建議將其禁止;若因為某些原因要保持atime更新,可以設置relatime,將atime設置成和mtime一起更新。

Note

在 Azure 提供的 CentOS 7 版本以后,默認掛載選項已經(jīng)設置成relatime。

操作方法:

命令行中使用

復制

#mount -o noatime,barrier=0 /dev/sdxn /mount/point

或者

復制

#mount -o relatime,barrier=0 /dev/sdxn /mount/point

在掛載配置文件中更改

復制

#vi /etc/fstab

/dev/sdxn? /mount/point? ? ext4? noatime,barrier=0? 0 0

或者

復制

/dev/sdxn? /mount/point? ? ext4? ? relatime,barrier=0? 0 0

Discard: 用來決定是否在有數(shù)據(jù)被刪除時對 SSD block 進行整理,以備后續(xù)數(shù)據(jù)寫入時提高速度;但如果小文件刪除頻繁,discard本身可能引起性能下降。慎用之。

參考:

Impact of ext4’s discard option on my SSD

Performance of TRIM command on ext4 filesystem

IO調(diào)度算法

CFQ: CentOS 6 中的默認 IO 算法。特點是對所有有 IO 請求的進程,提供公平的磁盤 IO 帶寬。

NOOP: 即none operation。對所有的 IO 請求,不做任何操作,直接發(fā)給磁盤控制器。

Deadline: CentOS 7 中默認 IO 算法。其特點在于盡量將所有的 IO 請求的延遲保持在一定范圍內(nèi),避免有的 IO 一直等待無法獲取響應時間。

根據(jù)應用的 IO 類型,選擇合適的 IO 調(diào)度算法,能在一定程度上提供應用性能。這里講的 IO 調(diào)度算法的主要目的是為了節(jié)省磁盤尋道時間。而 SSD 磁盤和 HDD 最大的不同,在于它沒有尋道時間和旋轉(zhuǎn)延遲。因此對于 HDD 性能有極大幫助的CFQ和Deadline,以及nr_requests/queue_depth參數(shù),對于 SSD 來講意義不大;相反,使用noop或deadline這種基本不排序 IO 的算法,反倒能提升 SSD 的響應時間。

Deadline和noop的算法還是有所不同的,建議兩種分別測試比較一下,擇優(yōu)而用。另外,IO 調(diào)度算法是根據(jù)底層磁盤來的,如果有多個磁盤,要分別進行設置。

查看 IO 算法 :

復制

#cat /sys/block/sdx/queue/scheduler

在線更改算法 :

復制

#echo noop > /sys/block/sdx/queue/scheduler

將算法更新到啟動參數(shù)中(CentOS 6):

復制

#vi /etc/grub.conf

kernel /boot/vmlinuz-2.6.32-431.29.2.el6.x86_64 ro root=UUID=8fc4d768-29cd-462c-a7ab-5bf4bcfa9fa2 rd_NO_LUKS? KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 numa=off console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 rd_NO_MD SYSFONT=latarcyrheb-sun16 rd_NO_LVM rd_NO_DM elevator=deadline

使用sysbench 0.5,在1 core, 3.5 GB memory的 DS1 型號的 CentOS 6.5 中進行了文件讀寫測試。經(jīng)過比較,使用了noatime和barrier=0,且使用了邊界對齊分區(qū)方法的ext4文件系統(tǒng),在使用deadline或者noopIO 算法時,平均 IO 時間和最大 IO 時間都有所下降,文件讀寫 IO 綜合情況表現(xiàn)較好。

上述情況僅從基本操作上進行了一些優(yōu)化。在實際環(huán)境中,各個參數(shù)的調(diào)整,都需要進行反復測試,以求達到最佳狀態(tài)。

更多參考

Azure Storage secrets and Linux I/O optimizations

優(yōu)化 Azure Linux VM 上的 MySQL 性能

高級存儲:適用于 Azure 虛擬機工作負荷的高性能存儲

Using the Deadline IO Scheduler

立即訪問http://market.azure.cn

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容