字節跳動ZNS SSD應用案例解析

一、ZNS SSD基本原理

圖片

ZNS SSD的原理是把namespace空間劃分多個zone空間,zone空間內部執行順序寫。這樣做的優勢:

  • 降低SSD內部的寫放大,提升SSD的壽命

  • 降低OP空間,host可以獲得更大的使用空間

  • 降低SSD內部DRAM的容量,降低整體的SSD成本

  • 降低SSD寫延遲

  • ZNS寫入了標準NVME協議,更易于打造軟件生態,利于普及

圖片

與SMR架構類似,ZNS SSD的zone空間內部,也是追加寫。每次順序寫完成后,有一個標記位“Write Pointer”來記錄已經寫過數據所在的LBA位置。

圖片

Zone的狀態有以下幾個:

  • Full:zone寫滿的狀態

  • Empty:zone數據空的狀態

  • Explicitly Opened:對zone執行open zone命令成功后的狀態

  • Implicitly Opened:對處于Empty或者Closed狀態的zone完成寫數據后的狀態

  • Closed:還未寫滿的zone,在close zone命令成功后的狀態

  • Read Only:處于只讀狀態的zone

  • Offline:zone處于異常狀態,可能是介質異常或者其他的問題

圖片

在Linux內核適配方面,針對zoned設備,之前針對SMR已經有ZAC/ZBC命令規范,并在4.10內核已經支持。針對ZNS SSD,在內核5.10以后也支持了ZNS SSD,軟件生態已經基本完善。

圖片

在傳統的SSD中,SSD控制器會搭配10-100個NAND Die存儲介質,管理這些NAND介質就需要一個強大的算法,這里就有一個FTL管理層。

在這個過程中,ZNS SSD最大的優勢是取消了塊接口稅(Block Inteface Tax)

圖片

圖片

與傳統Block SSD相比,性能更加穩定,不受OP的影響。

圖片

如果在文件系統層刪除一個文件,比如下圖文件C,在沒有GC搬遷的情況下,會在無效數據C會占用大量的存儲空間。

圖片

GC搬遷有效數據到空的block后,之前無效文件C所在數據塊block就可以被整個block擦除了。

圖片

整個GC的過程最終導致寫放大WAF的增加。寫放大的增加相應對SSD帶來的負面效應就是寫帶寬下降、讀延遲升高、使用壽命下降等問題

在ZNS的場景下,不同應用按照Zone配置信息,相應存放業務數據。主要集中在順序讀寫的workload場景。由于是Host管理數據的擺放和存取位置,會最大程度減少GC垃圾回收。

圖片

減少SSD的DRAM空間和去掉OP冗余空間,提升用戶可用的容量。

圖片

二者具體的優劣對比:

圖片

擴展閱讀:NVMe SSD:ZNS與FDP對決,你選誰?

二、字節跳動ZNS SSD應用案例分析

圖片

字節給出未來數據中心的發展趨勢,包括計算、網絡、存儲三大組件。

圖片

字節目前遇到云存儲的痛點主要包括:性能、成本、穩定性、定制化。性能方面,SSD的垃圾回收在傳統SSD并不可控。成本方面,傳統SSD需要預留一定的OP預留空間。穩定性方面,出現異常后,傳統SSD的定位周期很大程度依賴SSD廠商。定制化方面,目前主要有SGL、CMB、PMR、ZNS等。

圖片

在使用ZNS SSD的場景中,字節采用了軟硬結合的方式整體優化。軟件方面,負責GC,WL,NAND數據存放位置優化以及QoS優化。硬件方面,主要負責是底層NAND異常和NAND管理,以及CMB、PMR特性

圖片

軟件架構如下:NAND相關等盤體異常可以通過AER進行錯誤上報。

圖片

軟件針對數據管理的架構:

圖片

利用分布式存儲chunk管理,與Zone SSD映射關系如下:

圖片

通過分布式存儲完成Host側的垃圾回收GC:

圖片

Host在對ZNS SSD寫數據過程中,有一個很重要的特性就是要支持寫入數據最后一個LBA overwrite覆蓋寫,優化NAND存儲空間,最終降低寫放大。LBA覆蓋寫在ZNS標準協議是不支持的,需要定制化設計。

圖片

同時,對于有硬件,有兩個重要的定制功能,是需要支持CMB和PMR

圖片

CMB(Controller Memory Buffer),即控制器內存緩沖區,是SSD控制器內部用于緩存數據的動態隨機訪問存儲器(DRAM)。它的主要目的是加速數據處理,減少讀寫操作的延遲。通過使用CMB,SSD可以預先將一部分數據緩存在高速的DRAM中,然后根據需要快速地從CMB中提供數據給主機系統,或者臨時存儲等待寫入閃存的數據。

CMB的工作原理包括:

  • 預取(Prefetching):當控制器預測到即將需要的數據時,會提前將其加載到CMB中,從而減少了實際從閃存讀取數據的時間。

  • 寫回(Write-back):如果主機發出一個寫入請求,而目標地址已經存在于CMB中,那么控制器可以選擇先更新CMB中的數據,稍后再將修改后的數據寫入閃存。這允許更快地響應寫入操作,并且有助于提高整體性能。

圖片

在 NVME 1.4 SPEC引入了類似CMB的PMR(Persistent Memory Region),PMR的作用是提供一種內存級讀寫速度、斷電后數據不會丟失的存儲區域。它使用此功能創建并控制一個稱為持久性內存區域(PMR)的存儲區域,該存儲區可以映射到PCI Express總線上的地址空間上面,并且可被主機和其他設備訪問。PMR的主要特點是,在電源斷電(power cycle),控制器復位以及PMR啟用/禁用切換之后,寫入PMR的數據也會保留。此功能使SSD除了提供通過邏輯塊地址(LBA)訪問的存儲區域外,還提供了另一個非易失性存儲區域,并且這塊存儲區域假定的訪問方法是內存訪問而不是塊訪問。

圖片

Zero Copy通過消除這些不必要的數據復制來提高效率它允許數據直接從源緩沖區傳輸到目標設備,而不需要經過中間緩沖區。這樣可以減少CPU的參與,釋放更多的計算資源,并加快數據傳輸的速度。

SGL(Scatter-Gather List)是實現Zero Copy的一種方法。在這種機制下,應用將一系列分散的數據塊(稱為scatter-gather list)提交給設備驅動程序,而不是一個連續的內存區域。驅動程序則可以直接將這些分散的數據塊傳輸到目標設備上,從而避免了在傳輸過程中對數據進行復制。

結合Zero Copy技術和SGL,可以顯著提升存儲系統的性能,尤其是對于需要處理大量小規模I/O操作的應用場景,如數據庫、虛擬化環境和大數據分析等。

針對云數據中心對ZNS SSD的特別定制需求,字節跳動總結如下:

圖片

基于字節跳動公布的ZNS SSD的應用效果顯示:可用容量提升30%,帶寬提升3倍,成本下降20%。

圖片

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209074.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209074.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209074.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一款可無限擴展的軟件定時器開源框架項目代碼

摘自鏈接 時間片輪詢架構如何穩定高效實現,取代傳統的標志位判斷方式,更優雅更方便地管理程序的時間觸發操作。 可以在STM32單片機上運行。

基于SSM的社區管理系統

末尾獲取源碼 開發語言:Java Java開發工具:JDK1.8 后端框架:SSM 前端:Vue 數據庫:MySQL5.7和Navicat管理工具結合 服務器:Tomcat8.5 開發軟件:IDEA / Eclipse 是否Maven項目:是 目錄…

LeetCode(52)最小棧【棧】【中等】

目錄 1.題目2.答案3.提交結果截圖 鏈接: 最小棧 1.題目 設計一個支持 push ,pop ,top 操作,并能在常數時間內檢索到最小元素的棧。 實現 MinStack 類: MinStack() 初始化堆棧對象。void push(int val) 將元素val推入堆棧。void…

區分工業設計軟件中CAD、CAE、CAM、PDM等概念

工業設計軟件是專門用于輔助工業設計師在產品設計和開發過程中進行各種任務的計算機程序。這些軟件提供了廣泛的工具和功能,幫助設計師創建、分析、修改和可視化產品的概念和詳細設計。 CAD 計算機輔助設計(Computer-Aided Design,CAD&…

15、SQL注入——Sqlmap

文章目錄 一、Sqlmap簡介1.1 sqlmap可以對URL干嘛?1.2 Sqlmap支持的注入技術1.3 SQLmap檢測注入漏洞的流程1.4 Sqlmap的誤報檢測機制 二、sqlmap基本使用 一、Sqlmap簡介 sqlmap使用教程 1.1 sqlmap可以對URL干嘛? 判斷可注入的參數判斷可以使用哪一種…

汽車電子智能保險絲解決方案

一、背景知識 在過去的幾十年里,電子在汽車系統創新中發揮了關鍵作用。新型半導體器件具有新穎的功能,增強了車輛機械系統提供的功能。 雖然半導體解決方案和電子產品將繼續在汽車電子產品中發揮關鍵作用,但展望未來,汽車創新將…

css順時針旋轉90°再3D中繞Y軸旋轉180°

CSS 順時針旋轉 90 再 3D 中繞 Y 軸旋轉 180 的示例代碼如下: div {transform: rotate(90deg) perspective(500px) rotateY(180deg); }在這個示例中,元素被先進行了 2D 順時針旋轉 90,然后設置了 perspective 屬性來定義元素的視角距離&…

UE4 材質實現Glitch效果

材質實現Glitch效果 UE4 材質實現Glitch效果預覽1預覽2 UE4 材質實現Glitch效果 預覽1 添加材質函數: MF_RandomNoise 添加材質: 預覽2 添加材質函數MF_CustomPanner: 添加材質函數:MF_Glitch 材質添加: 下面用…

Docker 部署 2FAuth 服務

拉取最新版本的 2FAuth 鏡像: $ sudo docker pull 2fauth/2fauth:latest在本地預先創建好 2fauth 目錄, 用于映射 2FAuth 容器內的 /2fauth 目錄。 使用以下命令, 在 前臺 運行 2FAuth 容器: $ sudo docker run -it --rm --name 2fauth -p 10085:8000/tcp -v /ho…

3D材質編輯:制作被火燒的木頭

在線工具推薦: 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 當談到游戲角色的3D模型風格時,有幾種不同的風格&#xf…

css實現頭部占一定高度,內容區占剩余高度可滾動

上下布局&#xff1a; <div class"container"><header class"header">頭部內容</header><div class"content">內容區域</div> </div>.container {display: flex;flex-direction: column;height: 100vh; /*…

SQL Server 2017數據庫window server服務器改名操作

在window服務器修改機器名重新加域后&#xff0c;需要執行下面的SQL語句修改數據庫里面記錄的機器名字&#xff0c;才能在修改后通過新名字連接數據庫。 if serverproperty(servername) <> servername begin declare server sysname set server ser…

53. Protocol buffer 的Go使用

文章目錄 一、介紹二、安裝三、protoc3語法1、 protoc3 與 protoc2區別2、proto3生成go代碼包Message內嵌Message字段單一標量字段單一message字段可重復字段slicemap字段枚舉 一、介紹 Protobuf是Google旗下的一款平臺無關&#xff0c;語言無關&#xff0c;可擴展的序列化結構…

AWS KeyPair密鑰格式轉換PPK<>PEM

概述說明 PEM&#xff08;Privacy Enhanced Mail&#xff09;和PPK&#xff08;Putty Private Key&#xff09;都是與加密和安全相關的文件格式&#xff0c;通常用于存儲私鑰信息。它們在不同的上下文中使用&#xff0c;并且與不同的軟件和協議相關聯。 PEM&#xff08;Priva…

【kubernetes】k3s集群搭建(正在更新……)

文章目錄 一、k3s簡介二、快速搭建1.控制平面2.鏡像加速 Pod容器集1.創建和管理pod Deployment(部署)與ReplicaSet(副本集)滾動更新 Service命名空間YAML語法管理對象常用命令縮寫YAML規范 聲明式配置對象標簽選擇器 容器運行時接口(CRI)與鏡像導入導出容器運行時接口(CRI) 金絲…

基于POSIX標準的Linux進程間通信

文章目錄 1 管道&#xff08;匿名管道&#xff09;1.1 管道抽象1.2 接口——pipe1.3 管道的特征1.4 管道的四種情況1.5 匿名管道用例 2 命名管道2.1 創建一個命名管道——mkfifo2.2 關閉一個管道文件——unlink2.3 管道和命名管道的補充2.4 命名管道用例 3 共享內存3.1 原理3.2…

案例二:SQL Server數據庫的備份和還原

1、備份類型。 在 SQL Server 中提供了三種常用的備份類型&#xff0c;分別是完整備份&#xff0e;差異備份和事務日志備份。 完整備份&#xff1a; 完整備份包括對整個數據庫、部分事務日志、數據庫結構和文件結構的備份。完整備份代表的是備份完成時刻的數據庫。 完整備份是…

【Hydro】Python繪制降雨徑流雙Y軸成果圖

目錄 說明源代碼說明 雙y軸圖像具有單y軸圖像沒有的對比效果,通常會用來繪制降雨徑流成果圖,在MATLAB中有plotyy函數可以實現,Python的實現方式沒有MATLAB那樣方便,不過實現效果卻也不見得差。 Python中的matplotlib通常使用twinx來生成雙Y軸,下圖便是使用matplotlib繪制…

8、操作符重載

友元 可以通過friend關鍵字&#xff0c;把一個全局函數、另一個類的成員函數或者另一個類整體&#xff0c;聲明為授權類的友元友元擁有訪問授權類任何非公有成員的特權友元聲明可以出現在授權類的公有、私有或者保護等任何區域且不受訪問控制限定符的約束友元不是成員&#xf…