MD中的bitmap(4) Bitmap的設定

2021-05-01 19:38:16 字數 2271 閱讀 7092

bitmap

在磁陣處理寫訪問請求時,呼叫

bitmap_startwrite

設定bitmap

記憶體的資訊,包括記憶體中的

bitmap

結構,以及記憶體中

bitmap

磁碟檔案的對映

filemap

;在磁陣實際將寫請求實際提交給子裝置前,呼叫

bitmap_unplug

將bitmap

資訊寫入磁碟。

除這兩個函式外,

bitmap_start_sync

,bitmap_end_sync

,bitmap_endwrite

等函式也和

bitmap

的一些標誌設定有關。

bitmap_startwrite

該函式在磁陣處理訪問請求時(

make_request

)呼叫。函式主要完成:

1.如果是延遲寫,則增加延遲寫計數

2.由於乙個寫操作涉及的資料段可能對應多個

bitmap

,對於每個這樣的

bitmap:a)

獲取該bitmap

的記憶體結構,即

bp陣列指向的內容

b)如果該

bitmap

的counter

達到最大值,說明磁陣上該資料區正在進行的寫訪問已經太多,磁陣等待太久,此時需要啟動裝置的佇列處理。

c)如果

bitmap

上沒有正在進行的寫操作

(count=0)

,設定filemap

的對應bit

。將記憶體

bitmap

結構count

直接設定為2。

d)bitmap

記憶體結構

count

累加。(也就是寫操作計數為

0時,表示沒有寫入操作;為1,

2都是特殊狀態,

3表示有乙個寫入,依次類推)

bitmap_unplug

遍歷bitmap

的所有filemap

頁,如有標記為臟的頁(

bitmap_page_dirty

,bit

置位時設定),或者為需要寫入的(

bitmap_page_needwrite

,bit

清除時設定),則將該頁寫入磁碟。

如果有髒頁,則等待寫入結束後返回。

注意這裡如果只有

bitmap_page_needwrite

標記的頁,是不需要等待的,因為

bit的清除並不是很關鍵,即使這個資訊丟失,最多不過是多餘的同步操作而已,沒有***。而

bit設定則需要可靠寫入磁碟後方可進行磁陣條帶的寫入,否則在條帶資料寫入磁碟過程中,

bitmap

寫入磁碟前,磁陣出現異常,則可能導致資料不一致而

bitmap

不能發覺。

bitmap_start_sync

在磁陣同步操作開始時,呼叫該函式。

這個函式獲取

bitmap

的記憶體結構,如果

need

標誌或者

resync

標誌被設定,就認為該資料塊需要同步,此時如果磁陣工作完好,則清除

need

標誌,設定

resync

標誌;如果

need

和resync

都沒有設定,則認為該資料塊不需要同步。

bitmap_end_sync

磁陣同步完成後,呼叫該函式。

這個函式獲取

bitmap

的記憶體結構,如果

resync

標誌被設定,則清除該標誌。如果同步是失敗的,則設定

need

位。如果

count小於3

,則設定該頁

file_attr

的bitmap_page_clean

(下文簡寫為

clean

),表示該頁存在需要清除的

bit位。

bitmap_endwrite

寫操作完成後,取出對應資料段的

bitmap

記憶體結構,

count

遞減,如果

count小於3

,則設定對應

filemap

頁的clean

屬性。如果寫失敗,則設定對應

bitmap

的need

標誌。

MD中的bitmap 開篇

從csdn上得到很多資料,貢獻不多,很慚愧。由於工作關係,近期學習一些linux 軟體raid相關的 網上找到一些相關的介紹內容,對於bitmap機制介紹得較少,正好看到這塊,在共享精神感召下,咱不揣淺薄,也把自己的一些學習情況記錄下來,希望大家多多指正。在raid1 raid5 等存在資料冗餘的磁...

MD中的bitmap(3) Bitmap初始化

bitmap create 完成bitmap 的初始化,該函式在磁陣啟動時或者使用者設定 bitmap 檔案時被呼叫,主要完成 bitmap 從磁碟到記憶體的載入 1.前面說過,bitmap 檔案在磁碟上可能有兩個位置,分別以檔案指標或者與超級塊之間的偏移來指定。2.讀入超級塊,注意 bitmap ...

Redis中bitmap的妙用

在redis中我們經常用到set,get等命令,細心的你有沒有發現,還有幾個相似的命令叫setbit,getbit,它們是用來幹嘛的?就是通過乙個bit位來表示某個元素對應的值或者狀態,其中的key就是對應元素本身。我們知道8個bit可以組成乙個byte,所以bitmap本身會極大的節省儲存空間。r...