Linux 磁盤I/O優(yōu)化

文件系統(tǒng)優(yōu)化

** 動態(tài)調(diào)整請求隊列數(shù)來提高效率,默認(rèn)請求隊列數(shù)為:128, 可配置512 **
[root@c37 queue]# cat /sys/block/sda/queue/nr_requests
128
** read_ahead, 通過數(shù)據(jù)預(yù)讀并且記載到隨機(jī)訪問內(nèi)存方式提高磁盤讀操作,默認(rèn)值 128,ceph配置:8192 **
[root@c37 queue]# cat /sys/block/sda/queue/read_ahead_kb
128
** 關(guān)閉最后一次訪問文件(目錄)的時間戳 **
例如:
mount -t xfs -o defaults,noatime,nodiratime /dev/sda5 /data
** 大文件,大容量,大量文件數(shù)建議使用xfs文件系統(tǒng) **

調(diào)整I/O調(diào)度算法

[root@c37 queue]# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
centos6.x默認(rèn)為cfq
調(diào)整為deadline
[root@c37 queue]# echo deadline > /sys/block/sda/queue/scheduler
[root@c37 queue]# cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq
** I/O調(diào)度算法介紹 **

  1. CFQ(完全公平排隊I/O調(diào)度程序) 默認(rèn)
    特點:
    CFQ試圖均勻地分布對I/O帶寬的訪問,避免進(jìn)程被餓死并實現(xiàn)較低的延遲,是deadline和as調(diào)度器的折中.
    CFQ賦予I/O請求一個優(yōu)先級,而I/O優(yōu)先級請求獨立于進(jìn)程優(yōu)先級,高優(yōu)先級的進(jìn)程的讀寫不能自動地繼承高的I/O優(yōu)先級.
    工作原理:
    CFQ為每個進(jìn)程/線程,單獨創(chuàng)建一個隊列來管理該進(jìn)程所產(chǎn)生的請求,也就是說每個進(jìn)程一個隊列,各隊列之間的調(diào)度使用時間片來調(diào)度,
    以此來保證每個進(jìn)程都能被很好的分配到I/O帶寬.I/O調(diào)度器每次執(zhí)行一個進(jìn)程的4次請求.
  2. NOOP(電梯式調(diào)度程序)
    特點:
    在Linux2.4或更早的版本的調(diào)度程序,那時只有這一種I/O調(diào)度算法.
    NOOP實現(xiàn)了一個簡單的FIFO隊列,它像電梯的工作主法一樣對I/O請求進(jìn)行組織,當(dāng)有一個新的請求到來時,它將請求合并到最近的請求之后,以此來保證請求同一介質(zhì).
    NOOP傾向餓死讀而利于寫.
    NOOP對于閃存設(shè)備,RAM,嵌入式系統(tǒng)是最好的選擇.
    電梯算法餓死讀請求的解釋:
    因為寫請求比讀請求更容易.
    寫請求通過文件系統(tǒng)cache,不需要等一次寫完成,就可以開始下一次寫操作,寫請求通過合并,堆積到I/O隊列中.
    讀請求需要等到它前面所有的讀操作完成,才能進(jìn)行下一次讀操作.在讀操作之間有幾毫秒時間,而寫請求在這之間就到來,餓死了后面的讀請求.
  3. Deadline(截止時間調(diào)度程序)
    特點:
    通過時間以及硬盤區(qū)域進(jìn)行分類,這個分類和合并要求類似于noop的調(diào)度程序.
    Deadline確保了在一個截止時間內(nèi)服務(wù)請求,這個截止時間是可調(diào)整的,而默認(rèn)讀期限短于寫期限.這樣就防止了寫操作因為不能被讀取而餓死的現(xiàn)象.
    Deadline對數(shù)據(jù)庫環(huán)境(ORACLE RAC,MYSQL等)是最好的選擇.
  4. AS(預(yù)料I/O調(diào)度程序)
    特點:
    本質(zhì)上與Deadline一樣,但在最后一次讀操作后,要等待6ms,才能繼續(xù)進(jìn)行對其它I/O請求進(jìn)行調(diào)度.
    可以從應(yīng)用程序中預(yù)訂一個新的讀請求,改進(jìn)讀操作的執(zhí)行,但以一些寫操作為代價.
    它會在每個6ms中插入新的I/O操作,而會將一些小寫入流合并成一個大寫入流,用寫入延時換取最大的寫入吞吐量.
    AS適合于寫入較多的環(huán)境,比如文件服務(wù)器
    AS對數(shù)據(jù)庫環(huán)境表現(xiàn)很差.
    ** I/O調(diào)度算法總結(jié) **
    Anticipatory I/O scheduler 適用于大多數(shù)環(huán)境,但不太合適數(shù)據(jù)庫應(yīng)用
    Deadline I/O scheduler 通常與Anticipatory相當(dāng),但更簡潔小巧,更適合于數(shù)據(jù)庫應(yīng)用, DATA/SAS盤
    CFQ I/O scheduler 為所有進(jìn)程分配等量的帶寬,適合于桌面多任務(wù)及多媒體應(yīng)用,默認(rèn)IO調(diào)度器
    NOOP I/O scheduler 適用于SSD盤,有RAID卡,做了READ的盤

** sysctl.conf針對磁盤優(yōu)化 **
vm.swappiness = [0 - 10] 默認(rèn)是60,太高了,如果是緩存服務(wù)器建議配置為0

針對固態(tài)硬盤優(yōu)化

  1. 關(guān)閉日志功能
    fstab里加掛載參數(shù)data=writeback
  2. 啟用 TRIM 功能
    Linux內(nèi)核從2.6.33開始提供TRIM支持,所以先運(yùn)行“uname -a”命令,查看自己的內(nèi)核版本,如果內(nèi)核版本低于2.6.33的,請先升級內(nèi)核。
    然后運(yùn)行“hdparm -I /dev/sda”查看自己的硬盤支不支持TRIM技術(shù),如果支持,你會看到
    Data Set Management TRIM supported
    如果上面兩個條件都滿足了,就可以在fstab中添加discard來開啟TRIM功能,如:
    原始的UUID=2f6be0cf-2f54-4646-b8c6-5fb0aa01ef23 / ext4 defaults,errors=remount-ro 0 1
    改后的UUID=2f6be0cf-2f54-4646-b8c6-5fb0aa01ef23 / ext4 discard,defaults,errors=remount-ro 0 1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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