我們的 前一篇貼文 介紹了 Extstore,這是 memcached 的一個擴充功能,允許將快取資料移到快閃記憶體儲存裝置。我們與 Intel 和 Packet 合作,在高速快閃 SSD 和 Optane NVMe 裝置上測試了 extstore。然而,這些測試留下了許多有趣的問題尚未解答
在這篇貼文中,我們將嘗試回答這些問題,在比以前更嚴格的審查和更惡劣的條件下執行測試。memcached 可以僅使用 RAM 和大量批次處理在 48 核心機器上每秒處理超過 5,000 萬個金鑰。儘管令人印象深刻,但實際情況充滿了額外負擔:小型個別請求、系統呼叫、內容切換等等。為了避免潛在的「基準行銷」,我們將嘗試在測試 RAM、快閃記憶體和 Optane 裝置時複製這些細微差別。
尾端延遲可能會導致少數後端請求速度過慢,進而影響大多數使用者流量。雖然快取系統可以改善回應時間,但回應基數高的服務反而會受到進一步影響。命中率低可能表示查詢快取服務所需的時間只是對那些未命中請求的時間稅。
現在已經有 有趣的的研究,探討在具有許多後端的服務背後的共用快取池。這涵蓋了一些,但不是全部的使用案例,因為後端的回應越來越大,可能會壓垮由 RAM 支援的快取。應用程式的地理擴張也會推高成本,因為每項服務都必須部署在每個位置。
為了嘗試透過擴充儲存空間代碼來解決這些問題,我們在兩種組態中測試了代碼。對於基準測試,我們使用了「一大堆裝置」(JBOD)。所有裝置都會建立一個大型頁面池,可以平均分配讀取和寫入。JBOD 支援已在 memcached 1.5.10 中發布。
我們沒有進行基準測試的另一種方法是分層儲存。使用 extstore 時,儲存的資料會組織成邏輯儲存區塊。這些儲存區塊可以群組到特定裝置,讓使用者能夠部署具備小型/快速和大型/便宜 NVMe 裝置組合的硬體。甚至可以使用網路區塊裝置。
可以按此追蹤草稿。將在未來的文章中詳細說明。
測試使用 mc-crusher 的標籤 4,在「test-optane」指令碼下執行。
測試硬體是配備雙 16 核心 Intel Xeon (總計 32 個核心)、192G RAM、4TB 快閃 SSD 和 3 個 750G Optane 磁碟的伺服器。
CPU 和記憶體已繫結到 NUMA 節點 0,效能表現如同單一插槽伺服器。這應該接近使用者的部署情況,讓我們能夠專注於我們的發現。
我們執行的其他測試專注於具有取樣請求延遲的吞吐量。在少數 TCP 連線上使用大量批次處理,以允許每秒數百萬個金鑰的擷取速率。此測試專注於單一裝置和 JBOD 組態中的最糟情況。我們沒有使用少數連線來發送大量管線請求,而是有數百個連線定期傳送個別 GET 指令集。
存在僅限 RAM 的測試作為基準:顯示我們最糟的情況組態,完全不觸及 extstore。比較 RAM 與有問題磁碟機的百分位數和散佈圖非常重要,以確定將快取移至磁碟的影響。
這讓我們處於中間地帶,偏向最糟情況。由於大多數使用者透過多金鑰擷取具備某種程度的批次處理,因此此基準測試應該是實際的。
我們繪製出目標請求速率增加時的延遲百分比。我們還有一個點雲,顯示隨著時間推移所擷取的每個範例。這顯示了異常值,以及在每次測試期間效能的一致性。
強調使用百分比平均值來衡量效能是有問題的,這一點很重要。我們在第一個圖表中使用它們來識別趨勢。然後,我們補充延遲摘要和測試全時長的散點圖。沒有這些,可能會有一些測試在線圖中看起來很好,但實際上卻有嚴重的異常值或讓所有流量中斷幾秒鐘。
延遲百分比 - 將滑鼠移到您的製作查詢速率上,以查看詳細的細目
我們在此顯示的額外測試展示了單一機器搭配一個或多個裝置的最糟情況效能基準。在請求速率約為每秒 500,000 次,且平均延遲低於一毫秒的情況下,大多數工作負載都能輕鬆地相容。雖然擴充磁碟空間運作良好,但需要進一步開發才能改善多個高效能裝置的吞吐量。