白皮書

NVMe 固態硬碟寫入性能

概述

BittWare 的數據記錄器參考設計 可捕獲高達 200 Gb/s 的高速感測器數據到 NVMe 固態硬碟 (SSD)。這為使用者提供了一個開放的架構來構建他們所需的任何數據記錄器系統,但我們聽到的一個常見問題是 “給定的持續數據速率需要多少個驅動器?

我們想要解決這個問題,因為它通常假設計算很簡單:查看SSD供應商的驅動器寫入速度規格,並劃分應用程式所需的最大持續頻寬,增加一點餘量,然後您就有了所需的RAID0(條帶化)驅動器數量。挑戰在於,對於我們高性能客戶的長記錄時間,在SSD規格表上寫入數位永遠無法持續。

讓我們看一下使用常見SSD驅動器類型的一些實際性能數據,並深入研究持續寫入不如讀取速度簡單的原因。最後,我們將使用我們的數據記錄儀參考設計,在給定速度下對驅動器陣列提出一些建議。好消息是,我們的設計可以使用我們的TeraBox伺服器和250-SoC FPGA卡根據需要輕鬆擴展。

本白皮書的 PDF 版本

固態硬碟聲譽

具有NVMe介面的固態硬碟以速度非常快而聞名。實際上,對於特定的工作負載,它們比傳統的硬碟驅動器(HDD)更快。具體來說,SSD針對比寫入和隨機訪問更多的讀取進行了優化。當然,對於數據記錄器,重點恰恰相反: 順序寫入

另一個挑戰是,NVMe SSD 通常具有最大「流寫入」帶寬的規格,該頻寬在執行持續寫入時僅限於驅動器容量的一小部分。長時間持續寫入的大部分將明顯低於此數字,並且隨著驅動器變大,它會變得更糟。為了瞭解原因,讓我們簡要看一下位是如何存儲在SSD上的。

較大的 SSD 往往會降低持續寫入性能

增加SSD密度意味著轉向更新的技術,這些技術恰好也會使持續寫入速度變慢。這些SSD技術代被稱為SLC,MLC,TLC,最後是QLC,按照它們在市場上出現的順序,這也是從最低密度到最高密度的順序。SSD設計人員非常清楚,隨著時間的推移,他們正在使流式寫入速度變慢。因此,它們通常保留一部分,即使是最新,最密集的SSD,以在舊的SLC模式下運行。這允許寫入以舊的,更快的速度流式傳輸,直到該部分驅動器被填滿。之後,寫入流速度將減慢到驅動器其餘部分支援的速度。

SSD 硬碟性能降級閾值

前三個閾值將在我們的基準測試部分進一步研究。

  • 只有在 SLC 快取被填滿之前,才會提供最佳性能。有關何時對一系列驅動器發生這種情況的詳細資訊,請參閱基準測試部分。
  • 然後,我們看到性能降低,直到驅動器達到 容量閾值 ,它開始減小 SLC 緩存的大小。
  • 收縮 SLC 快取需要 後台副本 ,這會進一步減慢速度。

當記錄器開始用較 新的數據覆蓋舊數據 時,還會發生另一種減少。我們將在下一節中介紹這一點。

覆蓋數據性能下降

為什麼覆蓋數據會降低性能

  • SSD 在寫入頁面之前必須將頁面清零。
  • 因此,如果您只更改一個字節,SSD控制器會查找它過去歸零的頁面,然後將整個頁面複製到該頁面上,並更改該位元組。
  • SSD 不能將單個頁面歸零。該操作使用頁面塊。
    • 每個SSD都是不同的,但例如,三星840 EVO有2048 Kb頁面。一個塊中有256個這樣的頁面。
  • 將頁面清零是一個相對較慢的操作,當NVMe Trim命令告訴SSD某些塊不再使用時,會在後台發生。
  • 在磁碟記錄器中,數據通常被捕獲到環形數據結構中,當磁碟已滿時,環形數據結構將環繞。
    • 在這種情況下,沒有機會提前修剪。此外,即使應用程式確實發出修剪問題,SSD錄像機也可能太忙而無法找到空閒時間來執行歸零。
    • 如果每隔幾個頁面寫入后出現暫停,而另一個頁面塊被清零,則性能將顯著下降。

如何在FPGA中避免這種情況

  • 當磁碟已滿時,您的應用程式可能會停止,而不是換行。
  • 或者,您可以發出 trim 命令並提供足夠的 NVMe 驅動器,使每個驅動器都有一些性能,可以節省到零塊。

固態硬碟基準測試

驅動標杆管理方法

  • 我們使用SPDK對NVMe硬碟性能進行基準測試
  • 消除任何文件系統開銷
  • 通過將緩衝區與緩存行對齊來最大限度地提高 DMA 效率
  • 使用專用線程盡可能快地完全填充空驅動器,並確保 NVME DMA 控制器始終具有要處理的寫入命令

測試類別

我們的目標是從消費者和企業市場中選擇範例,而不是對特定驅動器進行基準測試:

  • 消費市場:TLC與SLC
  • 消費市場:無 SLC 的 MLC
  • 企業市場:無 SLC 的 TLC
  • 企業市場:3D XPoint

消費市場:TLC與SLC

經過測試的驅動器示例: 三星 970 Plus,1 TB

這是具有 SLC 快取的典型 TLC 使用者級驅動器。

  • 數據表顯示流式寫入速度為“最大 3.3 GB/秒”
  • 我們測量了 2.7-2.8 GB/秒,直到 SLC 緩存填滿
  • 然後下降到大約1.6 GB /秒
  • 當我們開始覆蓋陳舊數據時,驅動器設法以相同的速度繼續寫入

實現100G錄像機性能:

RAID 0 配置至少需要 8個 驅動器

重寫完整驅動器

消費市場:無 SLC 的 MLC

經過測試的驅動器示例: 三星 970 Pro,512 GB

這是一款面向消費者市場的 MLC 驅動器,沒有 SLC 緩存。

  • 數據表顯示流式寫入速度為“最大 2.3 GB/秒”
  • 此驅動器中沒有 SLC 快取。我們測量了大約 2.2 GB/秒,沒有下降
  • 當我們開始覆蓋陳舊數據時,驅動器設法以相同的速度繼續寫入

實現100G錄像機性能:

RAID 0 配置至少需要 6 個 驅動器

企業市場:無 SLC 的 TLC

經過測試的驅動器示例: 三星 1725b、1.6 掘進機

這是一款面向消費者市場的 MLC 驅動器,沒有 SLC 緩存。

  • 數據表顯示流式寫入速度為“2.0 GB/秒”
  • 大多數情況下,此驅動器提供1.7 GB /秒;但是,它偶爾會下降到1.3 GB /秒
  • 這是一個針對企業市場的TLC驅動器,顯然沒有SLC緩存;它被戴爾作為「NVMe混合使用快速快閃記憶體」出售;「企業」標籤意味著更長的使用壽命規格。

實現100G錄像機性能:

RAID 0 配置至少需要 10個 驅動器

企業市場:3D XPoint

經過測試的驅動器示例: 英特爾傲騰,480 GB

傲騰硬碟採用 3D XPoint 記憶體技術,比傳統 SSD 硬碟具有明顯更好的耐用性。但是,它們無法提供與傳統NVMe驅動技術相同的高容量。

  • 數據表指定 2.2 GB/s 順序寫入頻寬
  • 始終如一地提供 2.2 GB/s 或更高的速度

實現100G錄像機性能:

RAID 0 配置至少需要 6 個 驅動器

企業市場:第 4 代 3D 薄層色譜

經測試的驅動器示例: 英特爾固態盤 D7-P5510 3.84TB

使用PCIe Gen4的硬碟顯著提高了性能。為了利用優化的數據移動引擎,我們使用了 256KB 或更大的大型緩衝區大小。

  • 數據表指定 3.3 GB/s 順序寫入頻寬
  • 始終如一地提供 3.2 GB/s 或更高的速度

實現100G錄像機性能:

RAID 0 配置至少需要 5 個驅動器

基準測試摘要

使用多單元架構來獲得更大的驅動器大小是以長時間持續寫入為代價的。這最大的影響來自消費者SSD。與聲稱的最大數位相匹配的最佳實際流寫入速度來自英特爾傲騰驅動器;但是,這些也是驅動器大小最有限的驅動器。

對於那些指定持續寫入系統的人來說,關鍵是在目標驅動器上獲取或執行實際的基準測試。我們上面關於以 100 Gb/s 的速度持續寫入的建議就是基於此類實際測試數據。

即便如此,在SSD的書面形式中,還應該考慮進一步的考慮因素,我們將在下面介紹。

驅動器使用壽命

寫入性能的最後一個考慮因素是驅動器的存留期。寫入 SSD 會磨損它—特別是數據記錄器應用程式可能會給驅動器的使用壽命帶來壓力。

  • SSD 的使用壽命指定為保修期內的每日驅動器寫入次數 (DWPD)。
    • SSD 的使用壽命存在很大差異,但為了確定預期,請注意,額定值為 1 DWPD 的驅動器可以覆蓋 1,800 次。

“企業”SSD包括額外的快閃記憶體單元(過度配置),以實現更長的使用壽命(更大的DWPD)。

  • 100 GbE 磁碟錄影機可以生成高達12.5 GB/秒的數據包數據。
    • 這不包括元數據(PcapNg 數據包標頭)
  • 如果您的數據包記錄器使用12個昂貴的30 TB企業級SSD,則意味著您的陣列可以容納大約8小時的100 GbE流量。如果DWPD為1,陣列將在1.5年內磨損。

但是,此示例具有說明性,不現實。

  • 沒有 100 GbE 鏈路將全天候運行,流量飽和。
  • 商業網路安全設施希望保持7-10天的流量,而不僅僅是8小時。

結論

雖然SSD與傳統硬碟驅動器相比具有令人印象深刻的性能,但這些改進是特定於應用程式的,並且在某些情況下會降低性能。

對於具有持續寫入的應用程式,例如我們的數據捕獲和記錄器專案所針對的應用程式,除了最大持續寫入規範之外,還有許多因素需要考慮。

與 BittWare 聯繫,詳細瞭解我們的存儲加速和感測器處理產品和解決方案。