memcached - a distributed memory object caching system

超越 RAM 的快取:NVMe 的案例 - Dormando(2018 年 6 月 12 日)

堆疊中每一層的快取架構都體現了效能與成本之間的隱含權衡。然而,這些權衡不斷在改變:新的轉折點可能會隨著儲存技術的進步、工作負載模式的變化或硬體供需的波動而出現。

在這篇文章中,我們探討了 RAM 成本上升對快取系統的設計影響。雖然 RAM 一直很貴,但 DRAM 價格在 2017 年上漲了 50% 以上,而高密度的 RAM 涉及多插槽 NUMA 機器,膨脹了功耗和整體成本。同時,閃存和 Optane 等替代儲存技術持續進步。它們具有專門的硬體介面、一致的效能、高密度和相對較低的成本。雖然將快取從 RAM 卸載到 NVMe 或 NVM 裝置的經濟誘因越來越大,但對效能的影響仍未廣為人知。

我們將在 Memcached 的背景下探討這些設計影響,Memcached 是一個分散式、簡單、以快取為重點的鍵/值儲存。如需快速概觀,請參閱 關於頁面故事教學

Memcached 有個 稱為 extstore 的儲存系統,它允許在磁碟上保留一部分「較少最近使用」的鍵的資料,釋放 RAM。請參閱連結以全面了解其運作方式,但簡而言之:鍵保留在 RAM 中,而值可以分割到磁碟。最近和頻繁存取的鍵仍會將其值保留在 RAM 中。

此測試在 Accelerate with Optane 的協助下完成,他們提供了硬體和指導。同時也要感謝 Netflix 採用 extstore,並提供許多寶貴的意見回饋。

快取 RAM 細項

db to cache breakdown

例如,一個 1TB 的資料庫在特定時間段內(例如 4 小時)可能只有 20% 的資料為「活動」狀態。如果您想要快取所有活動資料,您可能需要 200G 的 RAM。在這 200G 的 RAM 中,只有 20% 可能被高度使用。

cache hit rate breakdown

在已使用的快取記憶體中,只有 10% 的 RAM 可能負責快取中所有命中率的 90%。其餘 90% 的 RAM 只占 10%。

然而,如果您削減 90% 的 RAM 使用量,您的遺失率至少會加倍,進而加倍您的資料庫負載。根據您的後端系統執行方式,損失一些 RAM 會加倍後端成本。

cache size breakdown

細分記憶體中的項目,我們可能會發現絕大多數(在上述情況中為 97.2%)只存在於 30% 的 RAM 中。少數較大但仍然重要的項目佔用了其他 70%。更大的項目甚至可以非常快速地消耗 RAM

請記住,這些較大的項目可能是網路使用率的顯著百分比。一個 8k 要求所佔用的頻寬與 80 多個小要求相同。

extstore breakdown

extstore 如何提供協助?透過將較少最近使用的大型項目中的值與其金鑰分開並指向磁碟,我們可以節省大部分較少使用的 RAM。根據使用案例,您可以

even distribution

其他工作負載變異是否可以?在上述範例中,快取命中均勻分佈。此理論系統的 IO 限制為 400,000,這應與高端 SSD 或 Optane 驅動器類似。在這種情況下,無法依賴 RAM 來飽和網路。

在 400,000 IOPS 下,只需 3072 位元組平均值即可飽和 10G NIC。8192 適用於 25G。在適當設計的叢集中,需要額外的空間來因應池內的成長、使用率高峰或故障。這表示項目大小可能低至 1024 位元組平均值,然而在 1024b(假設每個金鑰有 100 位元組的額外負擔)下,extstore 將只能將 RAM 中可容納的資料儲存到磁碟的 10 倍。

需要仔細的容量規劃 並非所有人的工作負載都與外部儲存相容。在將磁碟用於快取之前,請仔細評估快取池中 RAM 的使用方式。如果您有獨家的小項目、簡短的 TTL 或高寫入率,RAM 仍然會更便宜。計算這個值的方法是監控 SSD 的「每日磁碟寫入」容忍度。如果一個 1TB 的裝置可以在 24 小時內以 2TB 的寫入量存活 5 年,它的容忍度為 2 DWPD。Optane 的容忍度很高,為 30DWPD,而高階快閃磁碟機為 3-6DWPD。

測試設定

這些測試是在一台 Intel Xeon 機器上進行的,配備 32 個核心、192G RAM、一個 4TB SSD 和 3 個 Optane 750G 磁碟機。測試期間只使用了一個 Optane 磁碟機。在撰寫本文時,extstore 只適用於一個磁碟機,而此組態反映了大多數使用者。

在每次測試執行期間,mc-crusher 客戶端數量以及伺服器中的 extstore IO 執行緒數量都會有所不同。IO 執行緒太少無法使裝置飽和,而太多執行緒會使裝置過載並可能導致佇列。

每個測試在熱身後執行一分鐘。

延遲和吞吐量測量

由於 mc-crusher 沒有計時結果,因此使用兩個指令碼來產生結果資料

對於每個測試,都會提供延遲範例的完整細目。抽樣以每毫秒一次的最大速率進行。
注意:不使用事件迴圈,以避免在同時發生一組事件時,必須將經過時間判定為等待處理的時間。

測試

執行了三項一般測試

結果

不幸的是,圖表中有些許波動;這是因為在測試期間留下的 RAM 太少。Optane 的效能是一致的,而作業系統則難以跟上。

供參考:針對此 memcached 精確設定(32 個執行緒等)的純 RAM 多重取得負載測試結果為每秒 1800 萬個金鑰。更複雜的基準測試讓具有許多核心的伺服器超過每秒 5000 萬個金鑰

使用少量的 extstore IO 執行緒 Optane 磁碟機能夠更接近飽和 IO 限制:4 個執行緒,4 個客户端:230k Optane,40k SSD。延遲細目顯示 SSD 的等待時間通常高出一個數量級,Optane 停留在 10 微秒區段,而 SSD 停留在 100 微秒區段,滑入 1 毫秒。

使用許多 extstore IO 執行緒時,底層作業系統會飽和,導致 Optane 圖表中的擺動和佇列。同時,SSD 持續受益於額外的執行緒資源,以克服快閃記憶體的額外延遲。

對於許多工作負載,SSD 和 Optane 都完全可行。如果大量讀取仍來自 RAM,而 extstore 用於服務僅限於大型物件的長尾,則它們在回應時間中都能將請求保持在 1 毫秒以下。

如果您想突破 extstore 的界限,Optane 等驅動器大有可為

測試類型 SSD IO 執行緒 Optane IO 執行緒



學習

結論

由於成本而目前無法進行的工作負載現在可以進行了。包含混合資料大小和大型池的大多數工作負載都可以顯著降低成本。


Extstore 需要每個磁碟項目使用 RAM。此圖表假設每個項目 (金鑰 + 元資料) 有 100 位元組的額外負載,可視化項目大小增加時 RAM 額外負載如何下降。

DRAM 成本是 Optane 的 3-4 倍,是 SSD 的 4-8 倍,視磁碟機而定。

當快取從 RAM 轉移到 Optane (或快閃記憶體) 時,純粹花在 RAM 上的錢可以降至三分之一。

減少 RAM 可降低對多插槽伺服器的依賴,以取得極高的 RAM 密度,通常需要具備 NUMA 功能的機器。這些機器有多個插槽、多個 CPU,一半的 RAM 連接到每個 CPU。由於 memcached 效能極高,因此您可以減少 RAM,以及在減少 RAM 後減少一半的主機板/CPU 甚至電源成本。針對特定工作負載,成本可合理降低達 80%。

高速、低延遲的 SSD 為資料庫和快取設計開啟了新紀元。我們展示了各種使用案例的高效能數字,以降低成本和擴充快取使用。