Unity 存儲中的 FAST VP:工作原理

今天我們將討論在 Unity/Unity XT 存儲系統中實現的一項有趣的技術 - FAST VP。 如果這是您第一次聽說 Unity,那麼您可以使用本文末尾的鏈接查看系統特性。 我在 Dell EMC 項目團隊的 FAST VP 工作了一年多。 今天我想更詳細地談談這項技術,並揭示其實現的一些細節。 當然,只有那些被允許透露的。 如果您對高效數據存儲問題感興趣或者只是沒有完全理解文檔,那麼本文肯定會很有用且有趣。

Unity 存儲中的 FAST VP:工作原理

我會立即告訴您材料中不會包含哪些內容。 不會尋找競爭對手並與他們進行比較。 我也不打算談論開源中的類似技術,因為好奇的讀者已經了解它們。 當然,我不會做任何廣告。

存儲分層。 FAST VP 的目的和目標

FAST VP 代表虛擬池全自動存儲分層。 有點難? 沒問題,我們現在就解決這個問題。 分層是一種組織數據存儲的方式,其中有多個級別(層)存儲數據。 每個都有自己的特點。 最重要的是:存儲單位信息的性能、容量和價格。 當然,他們之間是有關係的。

分層的一個重要特徵是,無論數據當前處於哪個存儲級別,都統一提供對數據的訪問,並且池的大小等於其中包含的資源大小的總和。 與緩存的區別在於:緩存的大小不會添加到資源(本例中為池)的總量中,並且緩存數據會從主介質中復制某些數據(或者如果緩存中的數據尚未寫入)。 此外,數據按級別的分佈對用戶是隱藏的。 也就是說,他並不能準確地看到每個級別上的數據是什麼,儘管他可以通過設置策略(稍後介紹)來間接影響這一點。

現在我們來看看Unity中實現存儲分層的特點。 在 Unity 中,有 3 個級別:

  • 極致性能 (SSD)
  • 性能(SAS HDD 10k/15k RPM)
  • 容量(NL-SAS HDD 7200 RPM)

它們按性能和價格的降序排列。 極致性能僅包括固態硬盤 (SSD)。 另外兩層包括磁盤驅動器,它們的轉速不同,相應的性能也不同。

將同一級別、相同大小的存儲介質組合成RAID陣列,形成RAID組(RAID組,縮寫為RG); 您可以在官方文檔中了解可用和推薦的 RAID 級別。 存儲池由一級或多級的 RAID 組構成,然後從中分配可用空間。 並從池中為文件系統和 LUN 分配空間。

Unity 存儲中的 FAST VP:工作原理

為什麼我需要分層?

簡而言之,抽像地說: 以最少的資源取得最多的成果。 更具體地說,結果通常被理解為一組存儲系統特徵 - 速度和訪問時間、存儲成本等。 最少的資源意味著最少的支出:金錢、能源等等。 FAST VP 實現了在 Unity/Unity XT 存儲系統中不同級別之間重新分配數據的機制。 如果你相信我,那麼你可以跳過下一段。 其餘的,我會告訴你更多一些。

在存儲層之間正確分配數據可以讓您通過犧牲一些很少使用的信息的訪問速度來節省總體存儲成本,並通過將常用數據移動到更快的介質來提高性能。 在這裡,有人可能會爭辯說,即使沒有分層,普通管理員也知道在哪裡放置哪些數據,存儲系統對其任務的理想特徵是什麼,等等。 這無疑是正確的,但手動分發數據也有其缺點:

  • 需要管理員的時間和注意力;
  • “重繪”存儲資源以適應不斷變化的條件並不總是可能的;
  • 一個重要的優勢消失了:對位於不同存儲級別的資源的統一訪問。

為了讓存儲管理員減少對工作安全的擔憂,我要補充一點,這裡也需要進行有效的資源規劃。 現在已經簡要概述了分層的任務,讓我們看看您可以從 FAST VP 中獲得什麼。 現在是回到定義的時候了。 前兩個詞 - 完全自動化 - 字面意思是“完全自動化”,意味著級別的分配自動發生。 虛擬池是一個數據池,包含來自不同存儲級別的資源。 它看起來是這樣的:

Unity 存儲中的 FAST VP:工作原理

展望未來,我會說 FAST VP 僅在單個池內移動數據,而不是在多個池之間移動數據。

FAST VP 解決的任務

我們先抽像地說一下。 我們有一個池和一些可以在該池內重新分配數據的機制。 請記住,我們的目標是實現生產力最大化,讓我們問問自己:我們可以通過哪些方式來實現這一目標? 可能有幾個,FAST VP 可以為用戶提供一些東西,因為該技術不僅僅是存儲分層。 以下是 FAST VP 提高池性能的一些方法:

  • 數據分佈在不同類型的磁盤、級別上
  • 在同一類型的磁盤之間分配數據
  • 擴容池時的數據分佈

在了解如何解決這些任務之前,我們需要了解有關 FAST VP 工作原理的一些必要事實。 FAST VP 使用特定大小(256 兆字節)的塊進行操作。 這是可以移動的最小連續數據“塊”。 在文檔中,他們稱之為:切片。 從 FAST VP 的角度來看,所有 RAID 組都由一組這樣的“片段”組成。 因此,所有 I/O 統計數據都會針對此類數據塊進行累積。 為什麼選擇這個塊大小以及它會減小嗎? 塊相當大,但這是數據粒度(較小的塊大小意味著更準確的分佈)和可用計算資源之間的折衷:考慮到現有對 RAM 的嚴格限制和大量的塊,統計數據可能會佔用太多了,計算量也會成比例增加。

FAST VP 如何將數據放入池中。 政治家

要控制啟用 FAST VP 的池中數據的放置,有以下策略:

  • 最高可用層
  • 自動分層
  • 從高開始,然後自動分層(默認)
  • 最低可用層

它們影響初始塊分配(首先寫入的數據)和隨後的重新分配。 當數據已經位於磁盤上時,將根據計劃或手動啟動重新分配。

最高可用層嘗試將新塊放置在最高性能層。 如果沒有足夠的空間,則會將其放置在下一個最高效的級別,但隨後可以將數據移動到更高效的級別(如果有空間或通過替換其他數據)。 自動分層根據可用空間量將新數據放置在不同級別,並根據需求和可用空間重新分配。 “從高開始,然後自動分層”是默認策略,也是推薦的策略。 最初放置時,它作為最高可用層,然後根據其使用統計數據移動數據。 最低可用層策略旨在將數據放置在效率最低的層中。

數據傳輸具有較低的優先級,以免干擾存儲系統的有用工作,但是,有一個“數據重定位率”設置可以更改優先級。 這裡有一個特點:並非所有數據塊都具有相同的重新分配順序。 例如,標記為元數據的塊將首先移動到更快的層。 元數據可以說是“關於數據的數據”,一些附加信息,不是用戶數據,而是存儲其描述。 例如,文件系統中有關特定文件位於哪個塊的信息。 這意味著訪問數據的速度取決於訪問元數據的速度。 鑑於元數據通常要小得多,因此將其移動到更快的磁盤的好處預計會更大。

Fast VP 在工作中使用的標準

每個塊的主要標準,如​​果非常粗略的話,就是數據“需求”的特性,這取決於數據片段的讀寫操作的次數。 這種特性稱為“溫度”。 有一些熱門數據比無人認領的數據更熱門。 定期計算,默認間隔一小時。

溫度計算函數具有以下性質:

  • 在沒有 I/O 的情況下,數據會隨著時間的推移而“冷卻”。
  • 隨著時間的推移,在或多或少相同的負載下,溫度首先升高,然後穩定在一定範圍內。

接下來,考慮上述策略和每層的可用空間。 為了清楚起見,我將提供文檔中的圖片。 這里紅色、黃色和藍色分別表示高溫、中度和低溫的塊。

Unity 存儲中的 FAST VP:工作原理

但讓我們回到任務上來。 因此,我們可以開始分析正在採取哪些措施來解決 FAST VP 問題。

A. 數據在不同類型磁盤、級別上的分佈

實際上,這就是FAST VP 的主要任務。 從某種意義上說,其餘的都是它的衍生物。 根據所選策略,數據將分佈在不同的存儲級別上。 首先,考慮放置策略,然後考慮塊溫度和 RAID 組的大小/速度。

對於最高/最低可用層保單,一切都非常簡單。 對於另外兩個人來說,情況也是如此。 數據分佈在不同的級別上,同時考慮到 RAID 組的大小和性能:使得塊的總“溫度”與每個 RAID 組的“條件最大性能”的比率大致相同。 因此,負載或多或少均勻地分佈。 需求較多的數據將移至速度較快的介質,使用頻率較低的數據將移至速度較慢的介質。 理想情況下,分佈應如下所示:

Unity 存儲中的 FAST VP:工作原理

B. 數據在同類型磁盤之間的分佈

請記住,一開始我寫的存儲介質來自 一個或多個 級別合併到一個池中? 在單一級別的情況下,FAST VP 也有工作要做。 為了在任何級別實現最大性能,建議在磁盤之間均勻分佈數據。 這(理論上)會讓您獲得最大的 IOPS。 RAID 組內的數據可以被視為均勻分佈在磁盤上,但 RAID 組之間的情況並不總是如此。 如果發生不平衡,FAST VP 將根據數據量和“條件性能”(以數字形式)的比例在 RAID 組之間移動數據。 為了清楚起見,我將展示三個 RAID 組之間的重新平衡方案:

Unity 存儲中的 FAST VP:工作原理

B.擴池時的數據分佈

此任務是前一個任務的特例,在將 RAID 組添加到池中時執行。 為了確保新添加的 RAID 組不會保持空閒狀態,部分數據將轉移到該組,這意味著負載將在所有 RAID 組之間重新分配。

SSD磨損均衡

通過磨損均衡,FAST VP 可以延長 SSD 的使用壽命,儘管此功能與存儲分層沒有直接關係。 由於已經有了溫度數據,寫入操作的次數也被考慮在內,我們知道如何移動數據塊,FAST VP 解決這個問題也是合乎邏輯的。

如果一個 RAID 組的寫入次數明顯超過另一 RAID 組的寫入次數,FAST VP 將根據寫入次數重新分配數據。 一方面,這消除了負載並節省了某些磁盤的資源,另一方面,它為負載較少的磁盤增加了“工作”,從而提高了整體性能。

通過這種方式,FAST VP 應對了存儲分層的傳統挑戰,並且做得比這更多。 所有這些都允許您在 Unity 存儲系統中非常高效地存儲數據。

一些技巧

  1. 不要忽視閱讀文檔。 有一些最佳實踐,而且效果很好。 如果你遵循它們,那麼通常不會出現嚴重的問題。 其餘的建議基本上是重複或補充。
  2. 如果您已配置並啟用 FAST VP,最好將其保持啟用狀態。 讓它在規定的時間內分發數據,每年一次,這會對其他任務的性能產生嚴重影響。 在這種情況下,數據重新分配可能需要很長時間。
  3. 選擇搬遷窗口時要小心。 儘管這是顯而易見的,但請嘗試選擇 Unity 負載最小的時間並分配足夠的時間。
  4. 規劃您的存儲擴展,並按時進行。 這是一般性建議,對於 FAST VP 也很重要。 如果可用空間量非常小,則數據移動將會減慢或變得不可能。 特別是如果你忽略了第2點。
  5. 在啟用 FAST VP 的情況下擴展池時,不要從最慢的驅動器開始。 也就是說,我們要么一次性添加所有計劃的 RAID 組,要么首先添加最快的磁盤。 在這種情況下,將數據重新分配到新的“快速”磁盤將提高池的整體速度。 否則,從“慢”磁盤開始,您可能會遇到非常不愉快的情況。 首先,數據將被傳輸到新的、相對較慢的磁盤,然後,當添加更快的磁盤時,則以相反的方向傳輸。 不同的 FAST VP 策略存在細微差別,但在一般情況下,這種情況是可能的。

如果您正在查看此產品,可以通過下載 Unity VSA 虛擬設備免費試用 Unity。

Unity 存儲中的 FAST VP:工作原理

在材料的最後,我分享了幾個有用的鏈接:

結論

我想寫很多內容,但我知道並非所有細節都會引起讀者的興趣。 例如,您可以更詳細地討論 FAST VP 做出數據傳輸決策的標準以及分析 I/O 統計數據的過程。 另外,互動的話題 動態池,這值得單獨寫一篇文章。 你甚至可以幻想這項技術的發展。 我希望這並不無聊,我也沒有讓你感到無聊。 再見!

來源: www.habr.com

添加評論