大容量儲存與磁碟排程

SCAN 排程(SCAN scheduling)

/ scan /

再想想電梯。它不會衝向最近呼叫的人;它選定一個方向往那邊掃,沿途為每位等待的乘客停下,直到抵達頂樓,然後掉頭往下掃回,同樣為每個人停下。沒有人會被永遠跳過,也沒有人造成浪費的來回曲折。SCAN 排程移動磁碟臂的方式正像這部電梯——這也是它被暱稱為電梯演算法的原因。

具體來說,在 SCAN 中,讀寫頭朝一個方向穩定移動(比方說朝較高的磁軌號),服務它經過的每個待處理請求,直到抵達那個方向上的最後一軌;接著它反向,往另一邊掃回,同樣依序服務請求。它有幾個著名的變體。C-SCAN(環狀 SCAN)只朝一個方向掃並服務請求,然後直接跳回起點、回程不服務,這帶來更均勻的等待時間。LOOK 與 C-LOOK 是務實的改良:臂不再一路開到磁碟的實體邊緣,而是一旦它的方向上前方沒有更多請求就反向(或跳回)——所以它只走到工作實際需要的那麼遠。

為什麼重要:SCAN 與它的親戚解決了 SSTF 的飢餓問題。因為臂有條不紊地掃過整個範圍,即使是遙遠的請求也保證會在當前或下一趟被服務——它的等待是有界的。代價是 SCAN 在某個當下的平均搜尋距離上可能不如 SSTF,但它公平又可預測,這在實務上更重要。LOOK 與 C-LOOK 才是大多數真實磁碟排程器實際上比較像的樣子,因為走到磁片用不到的邊緣純屬浪費。和這一切一樣,記住那個但書:在沒有搜尋時間的 SSD 上,這些電梯式的巧思幾乎都買不到什麼好處。

讀寫頭在 53 軌向上移動,佇列為 {98, 183, 37, 122, 14, 124, 65, 67}。SCAN 先向上服務(65、67、98、122、124、183),再反向服務其餘(37、14)。C-LOOK 則會服務 65……183 後直接跳回 14,服務 14、37——絕不浪費一趟跑到實體邊緣。

用掃的,別亂竄:每個請求都在一兩趟之內被服務。

C-SCAN 與 C-LOOK 犧牲一點純效率,換取比單純 SCAN 更公平、更均勻的等待(單純 SCAN 略偏袒中間的磁軌)。在快閃 SSD 上,這些電梯式方案都沒什麼價值。

又稱
SCANelevator algorithmC-SCANLOOKC-LOOK電梯演算法