當前位置:才華齋>IT認證>Linux認證>

Linux下的兩種分層儲存方案

Linux認證 閱讀(2.01W)

在儲存裝置中,使用分層技術,將冷熱資料自動分層存放在具有不用讀寫效能的儲存介質上,已經是很普遍的做法,比如 IBM 的 DS8K 中使用的 Easy Tier。這些功能都需要儲存裝置韌體的支援,如何在 Linux 主機上,使用 Linux 現有的機制,實現資料的分層儲存?本文主要介紹了 Linux 平臺上兩種不同的實現分層儲存的方案。

Linux下的兩種分層儲存方案

  背景介紹

隨著固態儲存技術 (SSD),SAS 技術的不斷進步和普及,儲存介質的種類更加多樣,採用不同儲存介質和介面的儲存裝置的效能出現了很大差異。SSD 相較於傳統的機械硬碟,由於沒有磁碟的機械轉動,定址速度大大提高,尤其在隨機讀寫較多的應用環境下,效能會大大提升,但這些高效能儲存裝置的單位儲存價格相對於傳統的磁帶和 SATA 硬碟也高出很多,如圖 1 所示。

圖 1 不同儲存裝置的效能價格對比

所以,如何高效平衡地利用這些儲存裝置,是所有儲存廠商都在關注的問題。採用 Storage Tiering分層儲存,將資料按照冷熱進行自動分層,越熱的資料存放在訪問效能越高的裝置上,而越冷的資料存放在訪問效能越低的裝置上,既可以獲取高的效能,又可以有效節約成本。

Storage Tiering 分層儲存技術在企業級的儲存裝置中已經被廣泛使用,如 IBM 的 Easy Tier, EMC 的 FAST 等,但這些功能都整合在儲存裝置內部,需要儲存裝置韌體的支援。

本文主要 Host 主機的角度,分析在 Linux 上實現 Storage Tiering 分層儲存的兩種方案以及其開源實現。為便於表述,本文中僅以兩級 Tiering 為例,慢速裝置為傳統的 SATA 硬碟(DEV1),快速裝置為固態儲存硬碟 SSD(DEV2)。

  分層儲存的技術要點

要實現分層儲存,首先需要將具有不同訪問效能的儲存裝置(DEV1, DEV2)虛擬化成一個新的儲存裝置(VDEV)。與快取(Cache)不同,VDEV 的儲存容量是 DEV1 與 DEV2 的容量之和(需除去一些用於存放元資料的空間)。

所有使用者的 IO 請求將會發給新的儲存裝置 VDEV,然後再按照一定的地址對映關係被轉發到相應的物理裝置 DEV1 或 DEV2。

同時還需要統計 IO 的熱度,並根據這些熱度資料,動態地在不同的 Tiering 間遷移資料,以達到效能容量的優化。

因此,實現分層儲存主要包括三方面的工作,如圖 2 所示。

  儲存裝置的虛擬化

負責虛擬裝置的建立,刪除; 維護虛擬裝置到物理裝置的地址對映關係。

  IO 效能的監測統計

統計 IO 的熱度,以及 IO 的大小,隨機效能屬性,為資料遷移提供依據。

  資料的遷移

根據 IO 資料的熱度等統計屬性,將訪問頻度高的資料遷移至讀寫效能高的 Tier 存放,而將訪問頻度低的資料遷移到效能低的 Tier 存放。

圖 2 分層儲存的資料遷移

  基於 Block Device 的分層儲存方案

該方案完整地實現了以上提到的分層儲存中所有的工作,包括虛擬化,IO 效能統計以及資料的遷移。

  方案結構

該方案的結構包括一個 Linux 裝置驅動程式和若干使用者態的控制程式,如圖 3 所示。

驅動程式實現儲存裝置的虛擬化,IO 效能監測統計以及資料的遷移;

使用者態控制程式負責建立、刪除虛擬裝置,手動觸發資料遷移,以及設定獲取裝置狀態。

該方案由於 Storage Tiering 所有的功能都在 Linux 核心實現,且需要維護虛擬裝置到物理裝置的地址對映表,以及保證資料一致性,所以實現難度和工作量比較大,但可擴充套件性和靈活性也相對較大。

圖 3 基於 Block Device 的分層儲存方案

  方案實現

該方案的實現主要包括以下內容:

1、管理裝置的註冊

管理裝置主要用於與使用者態程式的 IOCTL 互動,可以是一個字元裝置或者 Misc 裝置。Linux 下可以通過 register_chrdev 或 misc_register 註冊,並實現所需要的 IOCTL 介面。

2、虛擬塊裝置的建立

使用者態控制程式通過 IOCTL 向控制裝置發起建立虛擬裝置的請求,並傳入所有的物理磁碟(DEV1,DEV2)的引數,如裝置名,磁碟大小,虛擬磁碟的塊大小等;驅動程式收到該請求後,進行必要的引數檢查,然後呼叫 register_blkdev 建立一個新的塊裝置(VDEV)。並設定新裝置的相關引數,如 IO 處理函式,佇列大小,裝置容量等。

3、虛擬裝置地址與物理裝置地址對映

虛擬裝置地址到物理裝置的地址對映表在虛擬裝置建立是被初始化,並在資料遷移過程中被修改。

虛擬裝置和物理裝置都被分成固定大小的塊,塊大小可以固定或通過 IOCTL 由使用者指定,但一旦確定,不能更改,一個 Block 是熱度統計以及資料遷移的最小單位;每個 Block 包含若干個 sector(512 Byte)。

當 VDEV 收到一個 bio,可以由 bi_sector 和 bi_size 找出所對應的 VDEV 的 Block 以及 Block 內的偏移量,通過查詢對映表,找到各個 VDEV Block 所對應的物理裝置以及 Block,然後讀取物理裝置 Block 內的偏移量,如圖 4 所示。

地址對映表以及其他的元資料需要儲存在物理裝置上,以便機器重啟時能重構這個虛擬的塊裝置,且需要採取一定的備份策略,防止斷電或磁碟損壞造成資料丟失。

4、IO 熱度統計

IO 熱度統計也以 Block 為基本單位,每個 Block 內的任何一個 sector 被訪問,該 Block 的熱度都為增加。由於大 IO 以及順序 IO 在效能在傳統硬碟和 SSD 上的差異並不是特別大,所以在進行熱度統計是應該考慮排除大 IO 和順序 IO。

5、資料遷移

可以採用自動方式或手動方式。自動方式由驅動內的定時器驅動,每隔一定的時間,啟動資料遷移的掃描,將 IO 熱度統計中的熱資料向高效能儲存裝置遷移,冷資料向低效能儲存裝置遷移;手動方式由使用者指定,將某塊資料向高效能儲存裝置遷移或低效能裝置遷移。手動資料遷移方式增加了更大的靈活性和可擴充套件性。

圖 4 虛擬裝置與物理裝置的地址對映

  開源實現

BTier 基於 Block Device 的分層儲存方案的開源實現。BTier 最大支援 16 個裝置的虛擬化,這些裝置被 BTier 簡單地捆綁成一個 btier 塊裝置,因此,其中任何一個裝置的失效,都會導致整個 btier 的失效。

編譯並以模組形式安裝 BTier 之後,會建立一個名為 tiercontrol 的字元裝置;

然後使用 BTier 提供的 btier_setup 應用可以建立一個新的塊裝置 btiera,然後就可以對 btiera 裝置進行所有塊裝置的讀寫操作,包括分割槽和建立檔案系統。

BTier 還提供了豐富的. sysfs 介面,進行控制和資訊獲取,如資料遷移的開關,間隔時間,IO 統計資訊等。

不過 BTier 每個 Tier 層僅支援 1 個物理裝置,同層多個裝置的虛擬化需要藉助其他的方法,在虛擬化上面,BTier 還有可以改善的空間。

  基於 LVM 的分層儲存方案

Linux 的邏輯卷管理(LVM)提供了儲存虛擬化,可以將多個物理卷(PV)建成一個卷組(VG),然後再在 VG 裡建立虛擬卷(VG)。而且 LVM 提供了在不同物理卷之間遷移資料的 API。因此,基於 LVM 的分層儲存方案藉助 LVM 的虛擬化和資料遷移的能力,實現會更簡單。

方案結構

該方案中,資料一致性的問題以及資料遷移時 IO 中斷的問題都由 LVM 進行處理,重點在於如何分析並統計 IO 的熱度資訊,並且不涉及核心態的開發。該方案的結構如圖 5 所示。

圖 5 基於 LVM 的分層儲存方案

  方案實現

該方案的實現主要包括以下內容:

1、建立虛擬裝置

使用 pvcreate 將所有的物理磁碟建立成物理卷(PV);再使用 vgcreate 將所有的 VG 建立成一個卷組(VG);最後使用 lvcreate 在創建出來的 VG 上建虛擬卷。

2、IO 熱度統計

IO 熱度統計可以使用 blktrace 工具,或者實現一個裝置驅動來檢測 IO 的熱度。使用 blkparse 可以解析 blktrace 的輸出,然後分析這些 IO 的分佈以及讀寫頻度,從而得到 IO 的熱度統計資訊。

4、資料遷移

根據 IO 的熱度統計資訊,使用 LVM 提供的 pvmove 工具,可以在屬於同一個 VG 裡的不同 PV 之間進行資料遷移,將熱資料和冷資料分佈存放在不同的物理捲上。

開源實現

LVMTS(LVM Tired Storage)是一個使用 SSD 和 HDD 來建立混合儲存的方案,完全在使用者態實現,主要由幾個守護程序構成。

Lvmtscd 負責監測 blktrace 的輸出並統計塊裝置的訪問頻度,並將這些統計資訊記錄在檔案中;

Lvmtsd 負責根據使用者配置的資訊,啟動其他的守護程序,並完成資料遷移。

實際使用中發現,LVMTS 並不是太穩定,而且在 IO 分析統計上並不是太完善,可開發的空間仍然很大。

  總結

在 Linux 上實現 Storage Tiering 分層儲存,方法有很多,包括使用 Linux Device Mapper 機制等。本文對比較常用的兩種方案的實現進行了大概的分析,以及各個方案的優劣,在實際實現中,還有很多細節需要考慮,如 Thin Provision,SSD Trim 等的支援。