io調度演算法
① 誰有linux i/o 調度演算法deadline,anticipatory,noop,cfq中各個調優參數的具體作用。
1.Deadline scheler Deadline scheler 用 deadline 演算法保證對於既定的 IO 請求以最小的延遲時間,從這一點理解,對於 DSS 應用應該會是很適合的。
2.Anticipatory scheler(as) 曾經一度是 Linux 2.6 Kernel 的 IO scheler 。Anticipatory 的中文含義是」預料的, 預想的」, 這個詞的確揭示了這個演算法的特點,簡單的說,有個 IO 發生的時候,如果又有進程請求 IO 操作,則將產生一個默認的 6 毫秒猜測時間,猜測下一個 進程請求 IO 是要干什麼的。這對於隨即讀取會造成比較大的延時,對資料庫應用很糟糕,而對於 Web Server 等則會表現的不錯。這個演算法也可以簡單理解為面向低速磁碟的,因為那個」猜測」實際上的目的是為了減少磁頭移動時間。
3.Completely Fair Queuing 雖然這世界上沒有完全公平的事情,但是並不妨礙開源愛好者們設計一個完全公平的 IO 調度演算法。Completely Fair Queuing (cfq, 完全公平隊列) 在 2.6.18 取代了 Anticipatory scheler 成為 Linux Kernel 默認的 IO scheler 。cfq 對每個進程維護一個 IO 隊列,各個進程發來的 IO 請求會被 cfq 以輪循方式處理。也就是對每一個 IO 請求都是公平的。這使得 cfq 很適合離散讀的應用(eg: OLTP DB)。我所知道的企業級 Linux 發行版中,SuSE Linux 好像是最先默認用 cfq 的.
4.NOOP Noop 對於 IO 不那麼操心,對所有的 IO請求都用 FIFO 隊列形式處理,默認認為 IO 不會存在性能問題。這也使得 CPU 也不用那麼操心。當然,對於復雜一點的應用類型,使用這個調度器,用戶自己就會非常操心。
1.IO 對資料庫的影響較大 linux 默認的 IO 調度演算法為 cfq 需要修改為 deadline
如果是 SSD 或者 PCIe-SSD 設備 需要修改為 noop
2.由於日誌的記錄帶來的直接性能損耗就是資料庫系統中最為昂貴的IO資源
所以默認僅僅打開錯誤日誌即可 關閉其他所有日誌 以達到減少 IO 損耗的目的
③ cpu調度的基本方式
我們知道,程序需要獲得CPU的資源才能被調度和執行,那麼當一個進程由於某種原因放棄CPU然後進入阻塞狀態,下一個獲得CPU資源去被調度執行的進程會是誰呢?下圖中,進程1因為阻塞放棄CPU資源,此時,進程2剛IO操作結束,可以獲得CPU資源去被調度,進程3的時間片輪轉結束,也同樣可以獲得CPU資源去被調度,那麼,此時的操作系統應該安排哪個進程去獲得CPU資源呢?這就涉及到我們操作系統的CPU調度策略了。
根據生活中的例子,我們很容易想到以下兩種策略CPU調度的直觀想法:1.FIFO誰先進入,先調度誰,這是一種非常簡單有效的方法,就好比我們去飯堂打飯,誰先到就給誰先打飯。但是這種策略會遇到一個問題:如果遇到一個很小的任務,但是它是最後進入的,那麼必須得前面一大堆任務結束完後才能執行這個小小的任務,這樣就感覺很不劃算呀!因為我只是簡簡單單的一個小任務,但是從打開這個任務到結束這個任務要很久。這顯然不符合我們的需求,因而我們會想到第2種策略,就是先調度小任務,後調度大任務。2.Priority很簡單,就是任務短的優先執行,但是此時又有問題了,任務雖然短,但是它的執行時間不一定短,就好比在一個銀行業務中,客戶填寫一個表,這是一個非常短的任務吧——就單單填個表,但是這個表很長很長,那麼這個短任務它的執行時間就很長了,我們怎麼知道這個短的任務將來會執行多長的時間呢?所以,這樣的策略還是依然有問題。那麼,面對諸多的場景,如何設計調度演算法呢?首先,我們要明白我們的演算法應該讓什麼更好呢?面對客戶:銀行調度演算法的設計目標應該是用戶滿意;而面對進程:CPU調度的目標應該是進程滿意。那怎麼才能讓進程滿意呢?那就是時間了。進程希望盡早地結束任務,這就是周轉時間(從任務到達到任務結束)要短,而且希望用戶的操作能夠盡快地被響應,這就是響應時間(從操作發生到響應)要短。而且系統內耗時間要少,吞吐量(任務的完成量)要大,系統需要把更多的時間用在任務的執行上,而不能老是去做無關緊要的事情,例如:頻繁切換任務,切換棧,分配資源等事情。同時,系統還要去合理地調配任務。那麼,CPU的調度策略如何做到合理呢?首先得明白系統中有以下的幾種矛盾。1.吞吐量和響應時間之間有矛盾響應時間小=>切換次數多=>系統內耗大=>吞吐量小由於需要較短的響應時間,那麼就得頻繁地切換任務,這樣系統的很多時間都花在切換任務上面了,系統的內耗大了,吞吐量就小了。2.前台任務和後台任務的關注點不同前台任務關注響應時間,後台任務關注周轉時間。前台任務例如我們的word文檔,我們打一個字,需要立馬顯示在文檔中,這就是word文檔這個任務關注的是響應時間;而後台任務中,例如我們的javac編譯java代碼,它的周轉時間要小,即該任務從進入到結束所花的時間要小,即編譯完成的時間要小。http://3.IO約束型任務和CPU約束型任務各有各的特點IO約束型任務就是使用CPU的時間較少,進行IO操作的時間較長,CPU約束型的任務就是使用CPU的時間較長。因此,要做到合理,需要折中、綜合考慮以上的幾種矛盾。由此,產生了一些CPU的調度演算法,在下一節我們將重點講述這些CPU調度演算法。
關注小鯨融創,一起深度學習金融科技!
編輯於 2019-12-11 · 著作權歸作者所有
贊同 1
評論
展開全部
④ 為什麼先來先服務調度演算法有利於CPU繁忙型的作業,不利於IO繁忙型的作業
先來先服務的,要是對於IOI型的話,需要經常性的訪問內存,這樣等待時間比較長,所以適合處理能力高的這樣縮短相對時間
⑤ 為什麼說傳統的調度演算法都不能算是公平的調度演算法
公平調度器按資源池(pool)來組織作業,並把資源公平的分到這些資源池裡。默認情況下,每一個用戶擁有一個獨立的資源池,以使每個用戶都能獲得一份等同的集群資源而不管他們提交了多少作業。按用戶的 Unix 群組或作業配置(jobconf)屬性來設置作業的資源池也是可以的。在每一個資源池內,會使用公平共享(fair sharing)的方法在運行作業之間共享容量(capacity)。用戶也可以給予資源池相應的權重,以不按比例的方式共享集群。
除了提供公平共享方法外,公平調度器允許賦給資源池保證(guaranteed)最小共享資源,這個用在確保特定用戶、群組或生產應用程序總能獲取到足夠的資源時是很有用的。當一個資源池包含作業時,它至少能獲取到它的最小共享資源,但是當資源池不完全需要它所擁有的保證共享資源時,額外的部分會在其它資源池間進行切分。
主要特點如下:
Ø 支持多用戶多隊列
Ø 資源公平共享(公平共享量由優先順序決定)
Ø 保證最小共享量
Ø 支持時間片搶占
Ø 限製作業並發量,以防止中間數據塞滿磁碟
3. 公平調度演算法分析
3.1 變數定義
⑥ XFS,WB,nobarrier,noop代表什麼意思,XFS知道,後面的誰能解釋一下嗎
你是看了imysql.cn的測試文章嗎?
xfs是文件系統
wb是指raid卡的寫策略:回寫(write back)
nobarrier是指不使用raid卡上電池
noop是指系統IO調度演算法
cat /sys/block/sdb/queue/scheler
noop anticipatory [deadline] cfq
⑦ ( )調度演算法有利於CPU繁忙型的作業,而不利於I/O繁忙型的作業(進程)。 A.時間片輪轉調度演算法 B.先
B.先來先服務調度演算法
http://www.kaoyan.com/kaoyan/18/330045/
⑧ 系統當前有4個進程P1,P2,P3,P4 。P1處於運行狀態,P2、P3、P4 均處於就緒狀態
P1在做I/O,在P1由於I/O阻塞讓出cpu;內核調度程序會在內核態根據調度演算法找出下一個需要運行的進程,比如P2。則P1的運行環境被保存,運行環境包括進程內存空間,寄存器狀態,棧指針SP,頁表,然後P2的運行環境被restore,然後P2運行。接下來P3 P4都有可能被調度(如果P2的時間片已經用完),在這一過程中如果P1的io已經完成,在i/o會有中斷發給內核,i/o中斷處理程序會被調用告訴操作系統i/o已經完成,P1現在的狀態就轉變為可運行狀態,或者就緒狀態,可能P1馬上就會運行,也可能要等下一次調度
⑨ 以下哪種io調度演算法 吞吐量最高
肯定是都可以的,FCFS這種方式不太合適,因為如果有一個程序IO時間長的話就使得其他程序都會「死」掉,輪轉和優先順序結合起來較好