標題: Linux 使用I/O Scheduler來調整硬碟I/O模式以及加大Readahead Cache來增加效能 [打印本頁] 作者: IT_man 時間: 2017-8-26 21:22 標題: Linux 使用I/O Scheduler來調整硬碟I/O模式以及加大Readahead Cache來增加效能 一、 首先介紹硬碟的 I/O Scheduler 7 Y; X- |: C. H7 K0 i0 F U S6 u9 b: N v , T" G+ N* `9 P; S: Q2 N# |1 UI/O Scheduler是什麼?看看Wiki的說明: 0 l3 C& y7 l: R% X& [/ `Input / Output Scheduling or I/O Scheduling is a term used to describe the method computer operating systems decide the order that block I/O operations will be submitted to storage volumes. I/O Scheduling is sometimes called 'disk scheduling'. m+ q$ D# E' y/ ~, j Y
0 g( }' z( U. U( I: Q
* d7 M- V' m g! K9 I9 W! `! G: v
簡單的說,就是讓我們可以經由不同的設定,來達到調整磁碟存取(I/O)模式的一種設定工具。 8 w& s4 V0 s, z+ l7 t: Q+ M- Q0 j9 j; J4 @$ R
* H& D: ^# M# r- M
目前Linux支援四種I/O Schedule模式,分別為:* a8 Z. n$ F' U e! O
1 G6 ^* Z1 v- W( M! P7 w* w1 k' |0 X0 k! N
Noop Scheduler (簡稱noop) -- RIAD 或 SSD 建議使用 noop3 _4 @- J, o* \ L4 N' c
可以算是最基本且簡化的Scheduler,主要應用於一些較為特別的軟體與硬體搭配操作的環境中,且這些軟/硬體已經具備有自己的I/O存取機制,且對於系統核心的要求較少,這樣的Scheduler比較適合運用在嵌入式的環境系統中。 ) N: y5 B% z0 x: W g Y2 q# t5 d. }* t4 C* e% S
) y8 ?! [9 {) C3 h
Completely Fair Queuing (簡稱cfq)8 P7 B( B3 K" Y$ i
顧名思義,針對硬碟與系統應用所需要的所有I/O任務,均分配給相同的佇列順序(Queuing),這樣的Scheduler最適合用於一般使用者桌上型電腦的操作環境,自從2006年12月Linux Kernel 2.6.18問世直至今日,CFQ Scheduler一直是Linux核心預設的 I/O scheduler。 , l1 a1 z3 z: ^8 h; Y* X" ^: ^; }0 K8 F
6 \& l$ c5 x- v" p! z" SAnticipatory Scheduling (簡稱anticipatory)! X8 ^/ w; U4 V- h: L( r+ o6 L
曾經一度是Linux 2.6 Kernel 的預設 I/O Scheduler ,由Anticipatory (預先/預想) 的文字解釋來看,如果有第一個I/O出現,且同時又有別的系統第二個I/O請求操作時,Anticipatory Scheduling將會產生一個預設需要6毫秒的"猜測"(預想)時間,這個猜測,是在猜測第二個I/O請求是要做什麼用的,這樣的猜測預想模式在經常性進行隨機存取的系統內會造成較大的時間延遲,尤其是像資料庫這樣的系統環境,但反之,Anticipatory Scheduling對於像網頁伺服器這樣的系統則會表現的相當好。 6 }, n. C* h( S9 g1 G# l2 Z& K0 F0 p# z: d& }+ M
( y' z$ A- F- o- [8 n6 g$ z" V1 n- ?
Deadline Scheduler (簡稱deadline) -- SATA 建議使用 deadline: D& h8 R, N' Y7 o1 B
主要這個Scheduler就是針對Anticipatory Scheduling的缺點來進行改善,它會針對磁碟中經常遭到存取的不同應用程式,記錄並製作符合最小延遲時間的佇列順序,這樣的結果對於資料庫系統能提供更加的存取效率。 7 l: s6 k" Q1 o+ T% m5 T " U% o) \3 U( H5 ]$ V; }" J7 d R. c3 I
下圖是Red Hat Enterprise Linux 4 (2.6 Kernel) 搭配Oracle10G資料庫與各種I/O Scheduler測試的結果 (圖片與資料來源屬Redhat公司所有)# H6 ~# N3 v( X* d- {; F