bitmap_create
完成bitmap
的初始化,該函式在磁陣啟動時或者使用者設定
bitmap
檔案時被呼叫,主要完成
bitmap
從磁碟到記憶體的載入:
1.前面說過,
bitmap
檔案在磁碟上可能有兩個位置,分別以檔案指標或者與超級塊之間的偏移來指定。
2.讀入超級塊,注意
bitmap
是以小尾格式存在磁碟上的。在讀入過程中,判斷
bitmap
是否過期(超級塊的
event和md
的event
是否相同),並根據判斷設定
bitmap
過期狀態。
3.計算出
bitmap
在磁碟上的點陣圖大小(以頁為單位),並根據這個大小申請
bp陣列。
4.如果
bitmap
未過期而且磁陣完好,可以從
md當前的同步位置開始讀入
bitmap
,而之前的由於已經同步完成,在
bitmap
中加以忽略。
5.呼叫
bitmap_init_from_disk
從磁碟中讀入
bitmap
,該函式完成如下功能:
a)申請
filemap
空間,大小和
bitmap
磁碟資料相同,用於儲存從磁碟中讀取的資訊
b)申請
filemap_attr
空間,每4個
bit對應
bitmap
磁碟檔案的一頁
c)bitmap
磁碟檔案的每
bit,對應磁陣中的一段資料塊,對於
bitmap
每一位,執行下面操作:
i.找到該
bit對應磁碟檔案所在頁,以及頁中的偏移量
ii.如果該
bit是新的頁,則讀入該頁;如果
bitmap
過期,則設定該頁的所有位(如果是第一頁,當然要跳過超級塊),並回寫到磁碟上
iii.
如果該bit為1
,則設定其對應的
bitmap
記憶體結構,具體是設定其
need
位,表明磁陣對應資料段需要同步。設定所在頁有需要清除
bit的標誌(
bitmap_page_clean
),這個標誌我們後面講到
d)讀入完成後,清除
bitmap
的過期標誌
e)如果
bitmap
有位被設定,說明此時有同步的需要,則設定需要同步標誌,喚醒守護程序
6. 根據
bitmap
資訊設定守護程序的喚醒間隔時間。寫入
bitmap
的超級塊。因為可能是此時
bitmap
記錄的事件等需要更新。
MD中的bitmap 開篇
從csdn上得到很多資料,貢獻不多,很慚愧。由於工作關係,近期學習一些linux 軟體raid相關的 網上找到一些相關的介紹內容,對於bitmap機制介紹得較少,正好看到這塊,在共享精神感召下,咱不揣淺薄,也把自己的一些學習情況記錄下來,希望大家多多指正。在raid1 raid5 等存在資料冗餘的磁...
MD中的bitmap(4) Bitmap的設定
bitmap 在磁陣處理寫訪問請求時,呼叫 bitmap startwrite 設定bitmap 記憶體的資訊,包括記憶體中的 bitmap 結構,以及記憶體中 bitmap 磁碟檔案的對映 filemap 在磁陣實際將寫請求實際提交給子裝置前,呼叫 bitmap unplug 將bitmap 資訊...
Redis中bitmap的妙用
在redis中我們經常用到set,get等命令,細心的你有沒有發現,還有幾個相似的命令叫setbit,getbit,它們是用來幹嘛的?就是通過乙個bit位來表示某個元素對應的值或者狀態,其中的key就是對應元素本身。我們知道8個bit可以組成乙個byte,所以bitmap本身會極大的節省儲存空間。r...