溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進行Linux 磁盤I/O優(yōu)化

發(fā)布時間:2021-11-01 09:54:24 來源:億速云 閱讀:471 作者:柒染 欄目:系統(tǒng)運維

如何進行Linux 磁盤I/O優(yōu)化,針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

概述

分享下關(guān)于linux磁盤I/0方面的優(yōu)化,中間插一個rac方面的報錯解決。

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

** 動態(tài)調(diào)整請求隊列數(shù)來提高效率,默認請求隊列數(shù)為:128, 可配置512 **

[root@bo queue]# cat /sys/block/sda/queue/nr_requests128

** read_ahead, 通過數(shù)據(jù)預(yù)讀并且記載到隨機訪問內(nèi)存方式提高磁盤讀操作,默認值 128,ceph配置:8192 **

[root@bo queue]# cat /sys/block/sda/queue/read_ahead_kb128

** 關(guān)閉***一次訪問文件(目錄)的時間戳 **

例如:

mount -t xfs -o defaults,noatime,nodiratime /dev/sda5 /data

** 大文件,大容量,大量文件數(shù)建議使用xfs文件系統(tǒng) **

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

如何進行Linux 磁盤I/O優(yōu)化

磁盤IO調(diào)度算法

[root@bo queue]# cat /sys/block/sda/queue/scheduler noop anticipatory deadline [cfq]

centos6.x默認為cfq

調(diào)整為deadline

[root@bo queue]# echo deadline > /sys/block/sda/queue/scheduler [root@bo queue]# cat /sys/block/sda/queue/scheduler noop anticipatory [deadline] cfq

PS:這里在用redhat6部署rac的時候如果沒配置會提示I/0 scheduler的警告,按上面配置就可以解決了。

如何進行Linux 磁盤I/O優(yōu)化

I/0 scheduler報錯

如何進行Linux 磁盤I/O優(yōu)化

多少個盤寫多少個

** I/O調(diào)度算法介紹 **

CFQ(完全公平排隊I/O調(diào)度程序) 默認

 特點:

CFQ試圖均勻地分布對I/O帶寬的訪問,避免進程被餓死并實現(xiàn)較低的延遲,是deadline和as調(diào)度器的折中.

CFQ賦予I/O請求一個優(yōu)先級,而I/O優(yōu)先級請求獨立于進程優(yōu)先級,高優(yōu)先級的進程的讀寫不能自動地繼承高的I/O優(yōu)先級.

 工作原理:

CFQ為每個進程/線程,單***建一個隊列來管理該進程所產(chǎn)生的請求,也就是說每個進程一個隊列,各隊列之間的調(diào)度使用時間片來調(diào)度,

以此來保證每個進程都能被很好的分配到I/O帶寬.I/O調(diào)度器每次執(zhí)行一個進程的4次請求.

NOOP(電梯式調(diào)度程序)

 特點:

在Linux2.4或更早的版本的調(diào)度程序,那時只有這一種I/O調(diào)度算法.

NOOP實現(xiàn)了一個簡單的FIFO隊列,它像電梯的工作主法一樣對I/O請求進行組織,當(dāng)有一個新的請求到來時,它將請求合并到最近的請求之后,以此來保證請求同一介質(zhì).

NOOP傾向餓死讀而利于寫.

NOOP對于閃存設(shè)備,RAM,嵌入式系統(tǒng)是***的選擇.

電梯算法餓死讀請求的解釋:

因為寫請求比讀請求更容易.

寫請求通過文件系統(tǒng)cache,不需要等一次寫完成,就可以開始下一次寫操作,寫請求通過合并,堆積到I/O隊列中.

讀請求需要等到它前面所有的讀操作完成,才能進行下一次讀操作.在讀操作之間有幾毫秒時間,而寫請求在這之間就到來,餓死了后面的讀請求.

Deadline(截止時間調(diào)度程序)

 特點:

通過時間以及硬盤區(qū)域進行分類,這個分類和合并要求類似于noop的調(diào)度程序.

Deadline確保了在一個截止時間內(nèi)服務(wù)請求,這個截止時間是可調(diào)整的,而默認讀期限短于寫期限.這樣就防止了寫操作因為不能被讀取而餓死的現(xiàn)象.

Deadline對數(shù)據(jù)庫環(huán)境(ORACLE RAC,MYSQL等)是***的選擇.

AS(預(yù)料I/O調(diào)度程序)

 特點:

本質(zhì)上與Deadline一樣,但在***一次讀操作后,要等待6ms,才能繼續(xù)進行對其它I/O請求進行調(diào)度.

可以從應(yīng)用程序中預(yù)訂一個新的讀請求,改進讀操作的執(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 為所有進程分配等量的帶寬,適合于桌面多任務(wù)及多媒體應(yīng)用,默認IO調(diào)度器

NOOP I/O scheduler 適用于SSD盤,有RAID卡,做了READ的盤

** sysctl.conf針對磁盤優(yōu)化 **

vm.swappiness = [0 - 10] 默認是60,太高了,如果是緩存服務(wù)器建議配置為0

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

1、關(guān)閉日志功能

2、fstab里加掛載參數(shù)data=writeback

3、啟用 TRIM 功能

Linux內(nèi)核從2.6.33開始提供TRIM支持,所以先運行“uname  -a”命令,查看自己的內(nèi)核版本,如果內(nèi)核版本低于2.6.33的,請先升級內(nèi)核。

然后運行“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

關(guān)于如何進行Linux 磁盤I/O優(yōu)化問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI