關於持久記憶體(PMem)你知道多少?

第四正規化開發者社群發表於2021-07-16

你說不定在不同的渠道已經聽說過一些類似的讓人一頭霧水的技術名詞,比如非易失性儲存,持久記憶體,傲騰持久記憶體,甚至英文的名詞Optane SSD, Optane persistent memory, PMem, DCPMM, AEP等等…… 這些名詞到底是什麼?有什麼聯絡?有什麼用處?本文從科普的角度,幫你回答這些問題。希望你看了本文以後,不管你是程式設計師還是相關行業從業者,至少都能明白什麼是持久記憶體,它到底能發揮什麼樣的作用。

持久記憶體到底是什麼?

首先回答一下混亂的命名問題,我們暫時不糾結於這些名字之間的演化關係了,簡單來說可以認為大部分都是指的同一個東西(當然不是嚴格正確)。目前Intel中文官方命名為英特爾傲騰持久記憶體”,簡稱為“持久記憶體”。英文官方名為 Intel Optane Persistent Memory,簡稱為 PMem。因此在本篇文章中,統一使用“持久記憶體”或者“PMem”進行指代。

那麼正式開始……說到底,持久記憶體其實是一種新型的記憶體條,我們可以先來看一下,它長這個樣子,和普通記憶體條其實沒啥特別大差異,而且它就是插在伺服器的記憶體插槽裡的。

所以簡單來說,你可以自行購買,然後插到你的伺服器上的記憶體插槽上,你就可以使用持久記憶體啦。當然,持久記憶體對於硬體是有一定的要求的,AMD的CPU就不用想了,持久記憶體屬於 Intel 的獨家法寶,自然不會留給競爭對手做支援。具體CPU的支援型號可以自行查詢,這裡不多贅述。當然如果想要發揮持久記憶體的最大優勢,其在硬體配置插法上是有一定的講究的,後面將會具體展開。

然後我們研究下持久記憶體在整個計算機體系架構中的位置。學過計算機的同學,一定對計算機的儲存金字塔的架構非常熟悉,那麼如果我們把持久記憶體也放到這個金字塔裡,會是在什麼位置呢?我們具體來看一下。如下圖所示的儲存金字塔中,我們可以看到持久記憶體處於外存(HDD或者SSD)以及記憶體DRAM之間,其不論在容量、效能、價格上都是處於兩者的中間位置。除此以外,在功能上,它完全就是個DRAM和外存的混血兒(所以為什麼在圖上PMEM標記為一半是海水,一般是火焰)。也就是說,它即可以當做記憶體使用,也可以當做持久化外存裝置使用,當然也可以兩者兼顧,完全取決於你如何使用持久記憶體。

如果你還是不太能理解我描述的是什麼,那麼最直接的,告訴你持久記憶體三個最重要的特徵:大, 快,永續性:

  1. 大:目前持久記憶體單條記憶體容量最大可以達到 512 GB,而目前伺服器單條記憶體一般最多到 32/64 GB。也就是說,單臺伺服器使用持久記憶體可以輕鬆到達 TB 級別的記憶體容量。另一方面,單位價格來說,持久記憶體為普通記憶體的一半左右。
  2. 快:既然也號稱為記憶體,那必然不能慢。可以看到,持久記憶體相比較於普通 SSD 有1-2個數量級的延遲效能優勢,相比較於硬碟優勢更加巨大。當然對比與DRAM,其會有一定的效能差距。但是實際使用中由於效能瓶頸不一定在記憶體上,所以一般不會有特別明顯的差距(一般效能衰退在一倍以內)。
  3. 永續性:通俗來說,就是持久記憶體有跟硬碟一樣的特性,斷電以後重啟,記憶體中的資料依然存在。此項特性可以說是秒殺記憶體,記憶體中的資料我們都知道斷電或者程式以外退出以後就不復存在。此項特性使得持久記憶體即可以當做一個高速持久化裝置使用,也可以滿足記憶體應用某些場景下的快速恢復的需求。

如下表格總結了對於資料中心單臺伺服器上的典型配置,以及相應的大致的效能數字作為參考。

常見記憶體和持久化裝置在單臺伺服器上的大致效能表現

持久記憶體主要優勢場景是什麼?

說完了持久記憶體的特性,大家一定也能想象出它在某些應用場景下具有得天獨厚的優勢。具體來說,持久記憶體在實際落地中可能有以下幾種玩法。以下從幾個具體場景舉例出發,並且辯證的給出使用持久記憶體帶來的優勢,以及可能引入的問題。

場景1:大記憶體低成本解決方案

如果你的應用記憶體消耗量是關鍵,是整個系統的資源瓶頸,那麼使用持久記憶體將會是你降低成本的最佳解決方案。你的系統一般在兩種情況下對於大記憶體有特別的需求

  1. 基於記憶體效能的考量,你必須使用基於記憶體的解決方案,而不可能使用基於磁碟的方案,比如記憶體資料庫(Redis, MemSQL)。

  2. 雖然你的應用可以接受基於磁碟而帶來的效能損耗,但是顯然如果記憶體擴大,你的應用可以跑得更快更加節省時間,比如基於 Spark 搭建的應用。

此種場景下,你可以考慮使用持久記憶體來提供一個大記憶體低成本的解決方案。

優勢:持久記憶體在單位價格上約為普通記憶體的一半,並且可以在單臺機器上輕鬆達到 1.5 TB,甚至 3 TB 的記憶體大小。因此比如你目標需要 20 TB 的總記憶體容量,持久記憶體可能只需要10臺機器即可滿足,但是基於DDR記憶體的叢集可能需要40臺甚至更多。考慮機器投入以及運營上帶來的成本,持久記憶體所帶來的低成本解決方案的優勢是顯而易見的。

可能的問題:當然引入持久記憶體,相比較於記憶體可能會帶來一定的效能衰退,衰退的原因可能是持久記憶體本身所引起的,也可能是由於機器臺數減少,其他硬體資源(比如CPU核數或者網路頻寬)減少所引起的。所以實際專案落地中,作為決策者,一定需要進行謹慎評估,來量化持久記憶體帶來的利害關係。

場景2:高效能持久化需求的應用

持久記憶體作為一個記憶體和外存的混合體,其高速持久化的特性在某些磁碟 IO 作為效能瓶頸的場景下是一個破局的解法。雖然 SSD 一定程度上也可以緩解磁碟 IO 效能瓶頸,但是相比較於 PMem 這種可以實現兩個數量級的吞吐和延遲改進的持久化裝置來說,PMem 無疑是具有革命性的意義的。以下拋磚引玉舉幾個磁碟IO作為效能瓶頸的場景。

  1. 訊息佇列:大家熟悉的開源訊息佇列 Kafka,由於其訊息持久化邏輯的存在,其吞吐最終會卡在硬碟 IO 上。目前的解法是不斷堆機器來擴充套件整個 Kafka 叢集的吞吐。

  2. 搜尋系統:類似於 Kafka,流行的開源搜尋系統 Elasticsearch,也將部分的資料結構存放在磁碟上。那麼最終影響整體延遲和吞吐的將會是磁碟 IO 的效能。

  3. 資料庫或者KV儲存引擎:比如 MySQL 或者 RocksDB,都具有重要的面向外存的資料持久化邏輯。

  4. 分散式檔案系統:在人工智慧場景中,常常會有大量的小檔案存在。比如在 Ceph 的檔案系統中,在 metadata server 上對大量小檔案的管理常常由於大量隨機讀寫的存在而產生效能問題。

優勢:顯然,對於有高速持久化讀寫需求的場景,持久記憶體引入直接有了數量級的效能提升。在吞吐方面,由於單機吞吐提升,因此總的機器數量規模可以大量減少,在延遲方面則是提供了另一給維度的優勢。具體效能比對可以參照上一節末尾給出的效能比對錶格。

可能的問題:PMem 作為純粹的持久化裝置可能是把雙刃劍,最主要的問題是其容量相比較於傳統硬碟來說還是偏小,同時單位成本也高。因此對於某些場景下如果除了對於效能,對於容量也有較高的要求,那麼使用 PMem 帶來效能的提升,但是也可能會造成成本的上升。

場景3:記憶體資料永續性的應用

這種場景下,本質上還是把 PMem 當做一個記憶體來使用,和上一個高效能持久化的場景有所相似有所區別。上一個場景主要是針對本來軟體架構設計就有持久化邏輯(比如檔案系統本來就需要存在硬碟上),然後我們把持久化邏輯搬移到PMem上就可以。其本身可能並不涉及到複雜的資料結構的修改,因為其本來的設計就已經帶有了持久化邏輯。但是在場景 3 這種記憶體資料持久化場景中,軟體本身的記憶體資料結構的設計是沒有考慮到持久化邏輯的。因此你需要針對記憶體中的資料結構重新設計持久化資料結構和邏輯。這一類應用對開發的要求是最高的,同時也是最能完全發揮 PMem 的特點。

此種場景往往是本來就是基於純記憶體的應用,但是希望增加資料持久的特性,最常見的需求是因為要快速資料恢復。此種需求一般來自線上服務系統(比如資料庫 Redis,或者人工智慧場景下的引數伺服器、特徵工程資料庫等),線上服務一旦節點離線,都會造成服務質量的影響。由於系統是基於記憶體資料結構,離線以後的資料恢復往往需要小時級別的時間來重新抓取資料,並且重新構建記憶體中的資料結構。如果有了持久記憶體,此類服務不僅能夠通過大記憶體降低成本,而且可以增加快速恢復功能,保證線上服務質量。

優勢:如上所述,此種模式下,可以把持久記憶體的優勢充分發揮出來。首先大記憶體帶來硬體成本的下降,其次,通過永續性,賦予了本來的記憶體應用的新的持久化特性,可以支援資料快速回復,保證線上服務質量。

可能的問題:此種應用唯一的問題可能是帶來比較多的額外的開發工作量。一般的記憶體資料結構都沒有持久化邏輯,一般要求程式設計師通過 PMDK 重新設計持久化資料結構和邏輯,實現期望中的記憶體資料持久化。

如何做做持久記憶體的開發?

首先必須弄明白,如果memory mode這種低成本擴充套件記憶體容量的方式可以滿足你的業務需求,那麼你根本不需要開發成本。但是如果不能滿足你的需求,存在以下幾種問題,那麼你可能得動腦子想想需要如何對現有場景進行改造。

  • 記憶體模式效能衰退過於明顯,希望使用大容量記憶體的同時,保持和DRAM接近的效能
  • 想利用持久記憶體來替代(或者一部分替代)傳統外存裝置,利用其高速持久化特性
  • 希望對記憶體資料做持久化,提供離線以後的快速恢復功能

持久記憶體的開發會是一個非常大的topic,而且根據你想要達到的目的不同,思路會完全不一樣,我們這裡不做展開。

比賽邀請

基於以上介紹,相信你已經對持久記憶體有了初步的瞭解。那麼你想了解更多嗎?你想切身感受這項技術嗎?如果你想體驗持久記憶體在AI應用上進一步的探索的話,我們為你提供了良好的機會!

第四正規化聯合英特爾共同舉辦了【AI應用與異構記憶體程式設計挑戰賽】,此次比賽基於人工智慧應用,以異構記憶體架構為硬體底座,基於英特爾® 傲騰™ 持久記憶體的前沿應用探索及硬核程式設計挑戰賽。通過比賽你將會對人工智慧如何在異構記憶體架構上受益有全新的認識,步入技術新境界。

大賽會有技術專家親自指導及講解。同時還設有高達20萬元的賽道獎勵,以及為高校學生提供了Intel&第四正規化聯合實驗室實習機會。歡迎所有技術背景或對此項技術感興趣的人群報名。高獎勵、雙賽道、低門檻、良好的體驗環境及技術支援,還不趕快報名!

大賽官網:opensource.4paradigm.com/ai2021/
報名註冊連結:openaios.4paradigm.com

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章