io排程演算法
io排程演算法存在的意義有兩個:一是提高io吞吐量,二是降低io響應時間。然而io吞吐量和io響應時間往往是矛盾的,為了盡量平衡這兩者,io排程器提供了多種排程演算法來適應不同的io請求場景。
1、noop
該演算法實現了最簡單的fifo佇列,所有io請求大致按照先來後到的順序進行操作。之所以說"大致",原因是noop在fifo的基礎上還做了相鄰io請求的合併,並不是完完全全按照先進先出的規則滿足io請求。
假設有如下的io請求序列:
100,500,101,10,56,1000
noop將會按照如下順序滿足:
100(101),500,10,56,1000
2、cfq
cfq演算法的全寫為completely fair queuing。該演算法的特點是按照io請求的位址進行排序,而不是按照先來後到的順序來進行響應。
假設有如下的io請求序列:
100,500,101,10,56,1000
cfq將會按照如下順序滿足:
100,101,500,1000,10,56
在傳統的sas盤上,磁碟尋道花去了絕大多數的io響應時間。cfq的出發點是對io位址進行排序,以盡量少的磁碟旋轉次數來滿足盡可能多的io請求。在cfq演算法下,sas盤的吞吐量大大提高了。但是相比於noop的缺點是,先來的io請求並不一定能被滿足,可能會出現餓死的情況。
3、deadline
deadline在cfq的基礎上,解決了io請求餓死的極端情況。除了cfq本身具有的io排序佇列之外,deadline額外分別為讀io和寫io提供了fifo佇列。讀fifo佇列的最大等待時間為500ms,寫fifo佇列的最大等待時間為5s。fifo佇列內的io請求優先順序要比cfq佇列中的高,而讀fifo佇列的優先順序又比寫fifo佇列的優先順序高。優先順序可以表示如下:
fifo(read) > fifo(write) > cfq
這個演算法特別適合資料庫這種隨機讀寫的場景。
4、anticipatory
cfq和deadline考慮的焦點在於滿足離散io請求上。對於連續的io請求,比如順序讀,並沒有做優化。為了滿足隨機io和順序io混合的場景,linux還支援anticipatory排程演算法。anticipatory的在deadline的基礎上,為每個讀io都設定了6ms的等待時間視窗。如果在這6ms內os收到了相鄰位置的讀io請求,就可以立即滿足。
磁碟排程演算法:磁碟排程的目標是使磁碟的平均尋到時間最少,常用的磁碟排程演算法有先來先服務(fcfs),最短尋道時間優先(sstf)及掃瞄演算法(scan)
1.先來先服務直接從字面的意思 可以理解不用多解釋
2.最短尋道時間優先,當前磁頭我距離哪乙個近我就讀取哪乙個,但是這個會出現問題,磁頭頻繁移動上下肯定會降低效率的,不能保證平均的尋道時間最短,而且還可能 出現飢餓現象,我一直朝這個方向讀下去。
3.掃瞄演算法,在2的演算法基礎上考慮的磁頭的方向問題。這個又稱為電梯排程演算法。
spooling:為了緩衝cpu的高速性與io裝置低俗性間的矛盾而引入的離線輸入輸出技術。提高io的速度,將獨佔裝置改造為共享裝置,實現了虛擬裝置
面試中遇到的問題
ado activex data objects 是乙個用於訪問資料來源的 com元件 應用程式介面 應用程式和底層軟體互動控制的聯絡方法 超文字置標語言 英文 hypertext markup language 簡稱為 html 什麼是 超檔案傳輸協議 是網際網路上應用最為廣泛的一種網路傳輸協議。...
面試中遇到的問題
ado activex data objects 是乙個用於訪問資料來源的 com元件 應用程式介面 應用程式和底層軟體互動控制的聯絡方法 超文字置標語言 英文 hypertext markup language 簡稱為 html 什麼是 超檔案傳輸協議 是網際網路上應用最為廣泛的一種網路傳輸協議。...
面試 面試中遇到的演算法題
概念平面內兩條線段位置關係的判定在很多領域都有著廣泛的應用,比如遊戲 cad 圖形處理等,而兩線段交點的求解又是該演算法中重要的一環。本文將盡可能用通俗的語言詳細的描述一種主流且效能較高的判定演算法。為方便計算,對座標點的大小比較作如下定義 x座標較大的點為大,x座標相等但y座標較大的為大,x與y都...