天天看點

SDF: Software-defined flash for web-scale internet storage systems1、摘要2、現有背景下的問題3、提出的解決方案4、測試結果及分析5、方案優缺點

1、摘要

In the last several years hundreds of thousands of SSDs have been deployed in the data centers of Baidu, China’s largest Internet search company. Currently only 40% or less of the raw bandwidth of the flash memory in the SSDs is delivered by the storage system to the applications. Moreover, because of space over-provisioning in the SSD to accommodate non sequential or random writes, and additionally, parity coding across flash channels, typically only 50-70% of the raw capacity of a commodity SSD can be used for user data. Given the large scale of Baidu’s data center, making the most effective use of its SSDs is of great importance. Specifically, we seek to maximize both bandwidth and usable capacity.

To achieve this goal we propose software-defined flash (SDF), a hardware/ software co-designed storage system to maximally exploit the performance characteristics of flash memory in the context of our workloads. SDF exposes individual flash channels to the host software and eliminates space over-provisioning. The host software, given direct access to the raw flash channels of the SSD, can effectively organize its data and schedule its data access to better realize the SSD’s raw performance potential.

Currently more than 3000 SDFs have been deployed in Baidu’s storage system that supports its web page and image repository services. Our measurements show that SDF can deliver approximately 95% of the raw flash bandwidth and provide 99% of the flash capacity for user data. SDF increases I/O bandwidth by 300% and reduces per-GB hardware cost by 50% on average compared with the commoditySSD-based system used at Baidu.

Categories and Subject Descriptors B.3.2 [Memory Structures]: Design Styles - mass storage (e.g., magnetic, optical, RAID)

Keywords Solid-State Drive (SSD), Flash Memory, Data Center.

近年來,SSD裝置已經應用到百度的資料中心。目前SSD裝置中flash隻有不到40%的原始帶寬通過存儲系統帶到應用層。另外,SSD裝置中因處理随機寫操作和校驗,需要預留額外的空間,故SSD中隻有50%-70%的空間用于存儲使用者資料。故需要尋求更大的帶寬和使用者空間。

本文提出軟體定義的flash(SDF),軟硬體聯合設計的存儲系統,最大程度的開發性能特點。SDF将flash通道暴露給主機軟體,并消除了預留白間。主機軟體,直接通路SSD的裸裝置通道,有效的組織資料、排程資料通路,以開發SSD裸裝置的潛能。

2、現有背景下的問題

為了滿足日益增長的資料中心的需求,基于flash的SSD裝置因其高吞吐率和低延遲而得到廣泛應用。過去七年裡,百度在其基礎存儲設施中就應用了超過300000個SSD裝置。SSD裝置每單元價格較高,故需要充分發揮SSD的性能和存儲潛能。實際上,SSD商品的原始帶寬和原始容量都沒有得到充分的利用。

3、提出的解決方案

百度的軟體定義的flash(SDF)工程,通過将SSD硬體的通道資訊向軟體透明,可以将負載并發與硬體并行相比對,同時在一個通道中使用多線程将接口最小化。SDF需要軟體顯示初始化塊擦除操作,需要在寫操作之前對塊進行軟體擦除,故裝置不需要為GC操作預留白間。同時,系統軟體在裝置空閑時排程擦除操作。同時,移除通道中的奇偶校驗碼,使用系統級的資料複制確定資料的一緻性。

每個SDF包含一個自定義的flash裝置和對應的軟體層,軟體層提供一個不對稱的塊通路接口(寫/擦除機關:8MB,讀機關:8KB)。硬體提供多個獨立的通道,同時,軟體層将硬體的并行性轉化成為應用層的吞吐量。

3.1 方案的具體論述

SDF的硬體層結構見圖2。SDF控制器包含5個FPGA,一個Xilinx Virtex-5 FPGA控制資料通路,用于PCIe的DMA傳輸和晶片間的橋接。Virtex-5 FPGA連接配接4個Xilinx Spartan-6 FPGA,每個Spartan-6 FPGA實作一個獨立的FTL,管理11個通道。每個通道控制2片Micron 25nm MLC flash晶片,每個晶片有2個plane,每個晶片8GB,故整個SDF裝置容量為704GB = 8GB*2片/通道11通道/FTL 4個FTL。

每個flash通道都有專用的通道驅動,實作FTL(包含塊位址映射、動态磨損均衡、壞塊管理、資料通路邏輯)。塊映射表和用于動态磨損均衡的擦除次數表存儲在片上SRAM中,隻能通過FPGA通路。

圖4顯示了Spartan-6 FPGA的邏輯圖。邏輯總線接口(LB_IF)是片間總線,是連接配接Virtex-5 FPGA的橋接線。為了充分使用帶寬,所有通道共享一個高帶寬的資料通路,經過通道的資料被緩存在一個DRAM中,故在資料傳輸排程時更加靈活。如圖4,在邏輯總線接口與通道驅動間,有一個DDR管理器,管理2個512 MB DDR3 16-bit DRAM。每個專用通道控制器(CH_ENGINE)中,有三個子產品:映射表(LA2PA)、壞塊管理(BBM)子產品、動态磨損均衡(DWL)子產品。SDF使用中斷歸約(interrupt reduction)技術,減少CPU的負載,提高IOPS。SDF合并同一個Spartan-6中通道控制器中的中斷,然後合并Virtex-5中所有Spartan-6中的中斷。通過這種合并,中斷率減少到最大IOPS的1/5到1/4。

SDF中,每個Spartan-6有59%的邏輯區域用于實施功能,其中42%(總容量的25%)用于每個晶片的BCH編碼。SDF移除了垃圾回收邏輯、晶片内奇偶校驗、靜态磨損均衡,減少了16%的邏輯空間,SDF中剩餘的FPGA邏輯容量可用于計算,在文獻[ ]中已實作。

SDF裝置主要作為機械盤的緩存,不使用DRAM做緩存,因為DRAM易失。寫操作隻有在資料寫回到flash中才被确認,故SDF中的寫操作都是同步的。SDF通過BCH ECC和軟體管理的資料複制保證可靠性,不僅可以有效的保證可靠性,也可節省空間。

3.2 接口設計

首先,将讀/寫/擦除操作的不對稱向上層軟體透明。傳統的SSD裝置提供對稱接口,讀寫機關大小相等。SDF中,讀操作機關較小,寫操作機關增大到多個擦除塊的大小,但這需要寫操作的塊位址對齊。故寫放大被消除,因為在垃圾回收期間沒有flash塊會既包含有效資料頁,也包含無效資料頁。

寫/擦除機關:8MB,讀機關:8KB。

其次,将裝置的内部并行行向負載透明。如圖5,傳統的SSD裝置中隻有一個控制器,且裝置作為單一的邏輯裝置軟體挂載,而SDF将每個通道做為獨立裝置,呈現給應用層(比如/dev/sda0到/dev/sda43)。為了開發每個通道的并行性(每個通道4個plane),将SDF中寫操作機關設為8MB。

最後,将擦除操作作為一個新的指令,它被軟體調用。SDF将所有的原始空間都提供給軟體層,并在軟體層執行垃圾回收操作。軟體層在背景排程垃圾回收操作,或者将垃圾回收的優先級置為很低。

3.3 百度的存儲系統:SDF

SDF的存儲系統包含三個資料管理子系統:Table、FS和KV,存儲的資料格式分别為資料庫表格、檔案系統、簡單的鍵值對(simple key-value pairs)。Table系統,關鍵字是一個表的行索引,值是表的行資料。FS系統中,關鍵字是檔案的路徑名,值是檔案的資料或段。

每個子系統托管在分布式存儲系統中。根據關鍵字,使用者請求被散列到不同的hash堆棧(即slices)。Slice使用百度的CCDB系統管理它的KV pairs,KV pair使用LSM tree[ ]管理。與谷歌的BigTable[ ]相似,CCDB使用一個容器存儲寫請求的KV項。

底層的slice抽象是一個統一的使用者空間塊裝置層,處理由 slices到SDF裝置的I/O請求,并規定8MB的寫大小,要求每個寫請求為一個128位ID。ID的低64 位用于識别寫操作的資料塊;高64位ID作為關鍵字。塊裝置層将ID均勻散列到通道。連續ID的塊循環的寫入到44個通道。

SDF隻在本地伺服器的CCDB資料管理軟體中使用,故大多檔案系統的功能均不需要。為提高效率,我們開打一個裝置作為裸裝置檔案,使用IOCTRL接口盡可能繞過核心,直接通路下層PCIE裝置驅動。塊裝置層實作檔案系統的基本功能:塊配置設定、位址映射。SDF與傳統SSD的I/O堆棧的不同見圖6。SDF的軟體堆棧帶來的延遲約2-4 us,主要用于處理PCIe接口的中斷。

4、測試結果及分析

4.1 測試環境

實驗中,建立很多使用者節點,用于将KV讀寫請求發送給伺服器節點。使用者節點和伺服器節點在同一叢集中,且配置相同,如表2示。

伺服器連接配接兩個10Gbps NIC的開關,SDF安裝在伺服器上,其規範見表3.與華為Gen3的配置相同。對比裝置:華為Gen3、基于SATA的intel 320.華為Gen3中,使用30%的額外空間供内部操作(比如垃圾回收)使用,資料分段,分段機關為8KB。

4.2 實驗基準測試

SDF中将請求發送給SDF裸裝置,繞過了核心的I/O堆棧。在Intel和華為的SSD裝置中,請求通過Linux 的I/O堆棧發送到相應的裝置。

實驗中,首次運作microbenchmarks,對三種裝置,它流出大小為8KB、16KB、64KB的随機讀請求以及8KB的寫請求。SDF使用44個線程,每個通道使用一個線程,以開發硬體并行性。而Intel和華為隻使用一個線程,因為上層隻知道有一個通道,通道流出異步請求。SDF的所有請求都是同步流出,且盡可能保持通道忙碌,結果見表4。SDF的寫請求大小最小為8KB。

對于資料讀和資料寫PCIe最大吞吐率為1.61GB/s和1.4GB/s,SDF聚合的flash原始讀寫帶寬為1.67GB/s和1.01GB/s,很接近此結構的上限帶寬。SDF擦除操作的開銷達到40GB/s。

華為Gen3與SDF有相同數目的通道、相同的晶片和FPGA,但是它的吞吐率比SDF小。64KB或者更小的請求,其吞吐率較小。SDF中,隻要請求不大于8KB,都由一個通道服務。但華為Gen3中,邏輯位址空間在44個通道上分段,每段大小為8KB,大請求被分割成多個子請求,分散到不同的通道。故請求資料需要被分割(寫請求)或合并(讀請求),且每個通道需要服務大量的小請求,這增大了開銷,減小了吞吐率。

如圖7,顯示了在連續8MB的讀請求和寫請求下,當通道數量變化時,SDF的吞吐率。由圖可得,在達到PCIe帶寬或flash原始帶寬之前,随着通道數量的增加,吞吐率線性增大。

SDF中,擦除操作在寫操作之前,顯示的、立即執行,故寫操作的延遲包含了擦除操作的時間,如圖8。

如圖8,當寫請求為8MB時,華為Gen3延遲在7ms到650ms間變化,平均為73ms,SDF延長為383ms,變化很小。華為Gen3有一個1GB的闆上DRAM緩存,緩存命中是的延長很低,但是SDF中沒有這個緩存。SDF在每個寫操作前顯示執行擦除操作,提供了寫性能的一緻性。當寫請求大小增大到352MB時,華為Gen3平均延長達到2.94s,方差減小到25%。

4.3 生産系統

目前生産系統中部署的SDF裝置支援網頁服務。首先,爬蟲收集網際網路中的網頁,并存儲在網頁存儲庫中。庫中的網頁經過不同的處理步驟(提取摘要、分析網頁間的聯系、建構逆向索引)。如圖9,網頁庫是搜尋引擎的中心部件。CCDB的表格系統處理網頁庫。

随機讀:圖10顯示了單個slice時,随機讀大小為512KB時,不同批處理大小下的吞吐率。由圖可知,當批處理大小小于32時,SDF的吞吐率總比華為Gen3小;SDF的高通道并發的優勢在随機讀請求和一個slice下不能實作。

圖11顯示了slice為4或8時,在不同大小的批處理下的吞吐率。由圖可知,當批處理很小時,SDF的吞吐率比華為Gen3小,當時随着批處理的增大,SDF的吞吐率相應的增大,但是華為Gen3的吞吐率大緻不變。

當slice為4或者8時,華為Gen3的8KB的分段方式,使得所有的通道都在工作。當并發請求很少時,華為Gen3也可達到較高的吞吐率;增大并發性,也不能進一步增大吞吐率。當請求大小為512KB,分段大小為8KB,44個通道中,每個通道服務16KB或者8KB的請求,故并發性很高。但排程開銷會随着增加,不同通道中異步請求的服務時間會增大某些請求的服務時間。

當批處理足夠大,SDF的44個通道逐漸被占用,其吞吐率的增長逐漸變緩,但這種增長并沒有停止。當請求數隻比通道數大一點點,由于輪詢位址映射,随機請求不可能均勻分布到通道,即需要更多的并發請求來平衡負載。

圖12顯示了批處理大小為44時,不同slice、不同随機讀請求大小時的吞吐率。由圖可知,隻要請求能夠并發,不管請求是大還是小,都可以達到很高的吞吐率。通過将44個通道向軟體透明,在高并發的負載條件下,軟體的并行性可得到充分的利用。

順序讀:I/O密集操作用于建構逆向索引表,逆向索引伺服器向Central Repository of Web Pages發送建構逆向索引的請求,Central Repository of Web Pages中儲存網頁資料。每個網頁伺服器有一個或者多個slice,每個slice可存儲或者通路特定範圍的關鍵字。每個表被不同的slice管理。根據需求,逆向索引伺服器建構大小不同的索引表。已建構索引的slice中的I/O操作,在指定的範圍内浏覽/順序讀出所有鍵值對。生産系統中為了限制一個slice的I/O請求,每個slice使用6個線程向存儲器流出同步請求。如圖13顯示了不同數目的slice下的吞吐率。由圖可知,吞吐率随着slice的增大而增大,當slice為16時,SDF吞吐率達到峰值。

寫操作:在CCDB,百度的KV存儲系統,所有的寫操作在寫入存儲器之前,累積成8KB的更新檔。因為寫操作導緻壓縮操作(即從儲存器中讀出更新檔,歸并分類更新檔,然後再寫回存儲器),儲存設備服務的I/O請求來源于使用者的寫請求和CCDB内部的讀寫請求,均為8MB。

實驗中,使用者不斷發送同步寫請求到一個slice。如圖14。由于隻有在壓縮操作中會産生讀操作,故途中的讀操作代表了内部資料清理操作的強度。當slice增長到16時,SDF的吞吐率增長到峰值1GB/s;slice由16增長到32時,讀操作的吞吐率所占的比例減小,這是因為寫請求的需求量增大,促使了壓縮負荷的降低。另一方面,華為Gen3的吞吐率在slice很小時也很多,但是并不随着slice的增大而增大;且讀操作(壓縮操作)所占的比例持續降低。

5、方案優缺點

優點:将讀/寫/擦除操作的不對稱向上層軟體透明,而不是使用傳統的塊設計接口,增加了操作的靈活性;将裝置的内部并行行向負載透明,上層軟體看到的每個通道都是一個獨立的裝置,故軟體能更好的利用裝置,最大限度的開發裝置的并行性;根據應用環境的特點,SDF中移除了垃圾回收邏輯、晶片内奇偶校驗、靜态磨損均衡等功能,減少了額外空間的使用。

缺點:SDF的設計針對百度的資料中心,不具有通用性;寫操作的機關為8MB,不利于小寫操作; SDF中沒有DRAM做緩存,故當寫操作較小時,平均寫響應時間比一般系統大;當隻有一個slice時,SDF通道的高并發的優勢不能實作。