ZNS初步認識—GPT

1. ZNS SSD 的基本概念

  • Zoned Namespace (ZNS): ZNS 是一種新的NVMe接口規范,它將SSD的邏輯塊地址空間劃分為多個獨立的、固定大小的“區域”(Zones)。
  • 區域 (Zone): ZNS SSD 的基本管理單元。每個區域都有自己的寫入指針(write pointer),數據只能從這個指針位置開始順序寫入。一旦寫入,就不能隨機覆蓋,必須“重置”(reset)整個區域才能重新寫入。
  • 順序寫入限制: 這是ZNS最核心的特性。在一個區域內,數據必須嚴格按照順序寫入,不能跳過或隨機寫入。如果需要修改區域內的數據,必須將整個區域的數據(包括未修改的部分)讀出,修改后,再將整個區域重置并重新順序寫入。

2. ZNS 誕生的背景:傳統 SSD 的挑戰

理解ZNS的必要性,首先要了解傳統SSD面臨的問題。

  • 閃存轉換層 (Flash Translation Layer, FTL):
    • 作用: 傳統SSD內部有一個復雜的FTL層,負責將主機發出的邏輯塊地址(LBA)映射到NAND閃存的物理塊地址(PBA)。它隱藏了NAND閃存的底層復雜性,使SSD表現得像一個傳統的塊設備(可以隨機讀寫)。
    • 挑戰: FTL需要管理各種復雜任務,如:
      • 磨損均衡 (Wear Leveling): 確保所有NAND塊均勻磨損,延長SSD壽命。
      • 垃圾回收 (Garbage Collection, GC): NAND閃存只能以頁(page)為單位寫入,但只能以塊(block)為單位擦除。當一個塊中的某些頁數據失效后(被更新或刪除),這個塊就變成了“臟塊”,其中包含有效數據和無效數據。GC就是將臟塊中的有效數據讀出,寫入到新的干凈塊中,然后擦除(回收)整個臟塊。
      • 寫入放大 (Write Amplification, WA): GC過程會導致實際寫入NAND的數據量大于主機發出的寫入量。例如,主機寫入1個頁的數據,但為了GC,控制器可能需要移動并重新寫入多個頁的數據。WA是實際寫入閃存的數據量與主機寫入數據量的比值,WA越高,SSD壽命越短,性能越不穩定。
      • 過量配置 (Over-Provisioning, OP): 為了給FTL和GC提供足夠的空間來管理數據和進行后臺操作,SSD廠商通常會在SSD內部預留一部分空間不暴露給用戶,這就是OP。OP越高,WA越低,性能越穩定,但用戶可用容量越小。
  • 傳統SSD的弊端:
    • 性能不確定性: GC是后臺操作,發生在不可預測的時間,導致隨機寫入性能波動大,有時會出現“卡頓”現象。
    • 寫入放大: 導致SSD壽命縮短。
    • 高功耗: 復雜的FTL和GC邏輯需要更多功耗。
    • 高成本: 需要更多的NAND顆粒(用于OP),復雜的控制器芯片。

3. ZNS SSD 的工作原理

ZNS通過改變主機與SSD的交互方式來解決上述問題,將部分閃存管理職責上移到主機端。

  • 區域 (Zone) 的結構和狀態:
    • 每個區域有固定的容量,例如256MB、512MB或1GB。
    • 每個區域有唯一的寫入指針,指示下一個寫入操作的LBA。
    • 區域狀態(Zone States):
      • Empty (空): 區域中沒有有效數據,寫入指針位于區域的起始地址。
      • Implicitly Open (隱式開放): 區域正在被寫入數據,寫入指針正在移動。多個區域可以同時處于隱式開放狀態。
      • Explicitly Open (顯式開放): 主機通過 Open 命令明確聲明要向該區域寫入數據。同一時間只能有有限數量(由SSD控制器決定)的區域處于顯式開放狀態,通常用于保證性能。
      • Closed (關閉): 主機通過 Close 命令停止向該區域寫入,或隱式開放區域在一段時間沒有寫入后自動關閉。寫入指針停止移動。
      • Full (已滿): 區域中的所有LBA都已被寫入數據,寫入指針位于區域的末尾。
      • Read Only (只讀): 區域可能包含數據,但不能再寫入。通常用于特殊數據(如固件)。
      • Offline (離線): 區域不可用。
  • 區域管理命令: 主機通過NVMe命令與ZNS SSD交互,管理區域。
    • Report Zones 獲取所有區域的信息(狀態、寫入指針位置、容量等)。
    • Zone Append 將數據寫入一個或多個區域的當前寫入指針位置。這是最常用的寫入方式。
    • Open Zone 顯式地打開一個區域進行寫入。
    • Close Zone 關閉一個已打開的區域。
    • Finish Zone 強制一個區域進入 Full 狀態,即使它還沒寫滿。
    • Reset Zone 擦除一個區域的所有數據,將其狀態恢復到 Empty,寫入指針回到起始位置。這是ZNS中實現“刪除”或“更新”的唯一方式(通過重寫整個區域)。

4. ZNS SSD 帶來的優勢

  • 顯著降低寫入放大 (WA): ZNS SSD的FTL變得非常簡單甚至可以沒有,因為主機負責將數據以順序方式寫入區域。當區域數據失效時,主機直接重置區域即可。GC操作大大簡化,從而使WA接近于1。
  • 更可預測的性能: 由于GC活動大大減少,性能波動小,隨機寫入性能更加穩定。
  • 延長SSD壽命: WA的降低直接減少了NAND閃存的實際擦寫次數,從而延長了SSD的耐久性。
  • 降低過量配置 (OP) 需求: 由于GC的簡化,SSD內部不需要預留大量的OP空間,可以提供更高的可用容量。
  • 簡化SSD固件: SSD控制器不再需要復雜的FTL和GC邏輯,可以更專注于讀寫性能優化。
  • 更好的主機-設備協作: 主機了解閃存的物理特性,可以根據應用的需求進行更智能的數據放置和管理。

5. ZNS 對軟件棧的影響(核心挑戰和研究方向)

ZNS的優勢是基于其對傳統塊設備接口的顛覆。這意味著現有的操作系統、文件系統、數據庫和應用程序都無法直接、高效地使用ZNS SSD。

  • 文件系統:
    • 傳統文件系統: 例如 ext4、XFS、NTFS 等,它們假定底層存儲設備是隨機可寫的塊設備。如果直接運行在ZNS上,每次寫入都需要重置整個區域,效率極低。
    • 日志結構文件系統 (LFS/LSM-Tree Like FS): F2FS, Btrfs 等日志結構文件系統,其寫入模式(追加寫)與ZNS的順序寫入特性更契合。它們需要進行修改和優化才能在ZNS上高效運行。
    • ZNS-aware 文件系統: 需要全新的文件系統設計,能感知區域、管理寫入指針、智能地選擇區域進行寫入、高效地處理元數據、并在區域滿或需要更新數據時智能地管理區域重置。Linux 內核中的 zonefs 是一個初步的ZNS文件系統,但功能有限。
  • 數據庫和鍵值存儲:
    • LSM-Tree 數據庫 (e.g., RocksDB, Cassandra): 它們的寫入操作(MemTable flush、Compaction)天然是順序的,與ZNS特性非常匹配。需要優化其compaction策略,使其能更好地利用ZNS的區域特性,例如將L0/L1層數據直接映射到ZNS區域。
    • B-Tree 數據庫 (e.g., MySQL, PostgreSQL): 它們的隨機寫入模式對ZNS是一個挑戰。需要設計新的緩存層、WAL(Write-Ahead Log)策略或數據結構來適應ZNS,例如將WAL寫入ZNS區域,而將隨機更新寫入一個小的常規SSD區域或PMem區域。
  • 應用程序:
    • 許多應用程序直接依賴文件系統或數據庫接口。
    • 對于高性能應用,可能需要直接通過ZNS API(如 libzbd 庫)與ZNS SSD交互,從而實現定制化的存儲管理,最大化性能。
    • 適合ZNS的應用: 日志系統、流媒體存儲、大數據分析(特別是追加寫入和批處理)、版本控制系統、歸檔存儲等。
  • I/O 棧:
    • 操作系統需要新的I/O調度器來管理ZNS設備的區域分配和寫入調度。
    • 需要新的內存管理和頁緩存策略,以優化數據寫入ZNS。

6. 如何學習和實踐

  • 閱讀 NVMe Zoned Namespace Command Set 規范: 這是最官方、最詳細的ZNS定義。
  • 學習 libzbd 庫: 這是Linux上與ZNS SSD交互的C語言庫,可以幫助你理解如何編程管理區域。
  • 使用 ZNS 模擬器:
    • Linux null_blk 模塊: 這是Linux內核提供的一個非常強大的模擬器,可以模擬ZNS設備,無需真實硬件即可進行軟件開發和測試。
    • QEMU 模擬器: QEMU 也可以模擬ZNS設備,用于虛擬機環境的測試。
  • 關注 Linux 內核對 ZNS 的支持: 了解 zonefs、F2FS on ZNS、ZNS block layer 等進展。
  • 閱讀相關論文: 搜索FAST、USENIX ATC、OSDI、EuroSys、HotStorage等頂級會議上關于ZNS的論文,了解最新的研究進展和挑戰。
  • NVMe-CLI 工具: 使用 nvme-cli 工具,特別是其 nvme zns 子命令,可以查看ZNS設備信息、管理區域等。

總而言之,ZNS SSD代表了存儲系統從“設備管理復雜性”向“主機管理復雜性”的轉變。這為上層軟件帶來了巨大挑戰,但也開啟了巨大的優化潛力和研究機會。深入理解ZNS的底層機制和其對整個系統棧的影響,是成功進行相關研究和開發的基石。

NAND 閃存FTL(Flash Translation Layer) 在 SSD 中的核心作用。我們一條一條地梳理清楚:

? 一、為什么要把邏輯地址映射到 NAND 的物理地址?

1. 主機視角:

主機(比如操作系統)通過標準的塊設備接口(如 SATA 或 NVMe)訪問存儲設備,發出的命令是:

“我想在邏輯地址 LBA=123456 上寫入這段數據。”

主機并不知道這個邏輯地址對應底層閃存的什么地方,它只管讀/寫某個“地址”。


2. SSD內部視角(NAND 閃存):

但 SSD 里存儲數據的介質是 NAND 閃存,它有如下特點:

  • NAND 不能隨機覆蓋寫入,只能:
    • 把數據“寫到空白頁”。
    • 如果想更新某個數據,只能把整塊擦掉后再重寫(成本很高)。
  • NAND 分為“頁”(最小寫入單元)和“塊”(最小擦除單元):
    • 通常:頁 = 4KB,塊 = 256頁(1MB)。

所以:

主機說:“請把數據寫入 LBA 123456”

SSD 不能直接寫進 NAND 對應的那個位置 —— 那里可能已經有數據,必須重寫整塊,非常低效。


3. FTL 的作用:

FTL(Flash Translation Layer)就像一個中介或“翻譯器”,它做了這幾件事:

主機FTLNAND 閃存
LBA 123456查表找到一個空頁,比如 Block 7, Page 42
寫入數據實際寫入到該物理地址

FTL 的核心功能:

  • 建立一個 LBA → PBA(物理塊地址) 的映射表。
  • 管理數據更新、GC、磨損均衡等任務。
  • 屏蔽 NAND 的寫入限制,讓 SSD 像機械硬盤一樣“看起來可以隨便寫”。

? 二、什么是 NAND?

NAND 是一種非易失性存儲器,屬于閃存(Flash Memory)的一種:

類型特點
NAND Flash大容量、便宜、寫入快、擦除復雜,用于 SSD、U盤、SD卡等
NOR Flash啟動速度快、可直接執行代碼,常用于BIOS、嵌入式系統

NAND 的結構特點:

  • 分為 Block(塊) → Page(頁);
  • 通常一次寫入一頁(例如 4KB),但只能一次性擦除整個塊(例如 1MB);
  • 數據寫入必須是“空頁寫入”(不能覆蓋寫過的數據);
  • 具有壽命限制(每個塊只能擦除一定次數)。

? 三、現在的 SSD 是不是還是用 NAND 存儲數據?

是的。

當前主流的 SSD(無論是消費級還是企業級)幾乎都使用 NAND 閃存 作為核心存儲介質。以下是幾種常見的 NAND 類型:

類型每個單元存幾位特點
SLC(Single Level Cell)1位/單元最快、最耐用、最貴(用于緩存)
MLC(Multi Level Cell)2位/單元較好,企業級常用(已被TLC取代)
TLC(Triple Level Cell)3位/單元目前主流消費級 SSD 使用
QLC(Quad Level Cell)4位/單元更便宜但耐用性更差(適合冷數據)

此外,還有:

  • 3D NAND:把 NAND 堆疊在垂直方向,提升密度、降低成本。
  • V-NAND(Vertical NAND):Samsung 的 3D NAND 名稱。

? 四、小結

解答
為什么 SSD 要將主機的邏輯地址映射到 NAND 的物理地址?因為 NAND 的物理寫入限制多,不能直接更新原位置,FTL 需要找空頁寫入并建立映射。
這樣做是不是因為 SSD 都是用 NAND 存儲數據?是的,現在的 SSD 幾乎都使用 NAND 閃存作為存儲介質。
NAND 是什么?一種非易失性存儲器,是 SSD 的核心存儲芯片。具有頁寫入、塊擦除、壽命限制等特性。

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

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

相關文章

【seismic unix生成可執行文件-sh文件】

Shell腳本文件(.sh文件)簡介 Shell腳本文件(通常以.sh為擴展名)是一種包含Shell命令的文本文件,用于在Unix/Linux系統中自動化執行任務。它由Shell解釋器(如Bash、Zsh等)逐行執行,常…

Debezium日常分享系列之:在 Kubernetes 上部署 Debezium

Debezium日常分享系列之:在 Kubernetes 上部署 Debezium 先決條件步驟部署數據源 (MySQL)登錄 MySQL db將數據插入其中部署 Kafka部署 kafdrop部署 Debezium 連接器創建 Debezium 連接器 Debezium 可以無縫部署在 Kubernetes(一個用于容器編排的開源平臺…

利潤才是機器視覺企業的的“穩定器”,機器視覺企業的利潤 = (規模經濟 + 技術差異化 × 場景價值) - 競爭強度

影響機器視覺企業盈利能力的關鍵因素。這個公式本質上反映了行業的核心動態:利潤來自成本控制(規模化效應)和差異化優勢(技術壁壘與場景稀缺性的協同),但被市場競爭(內卷程度)所侵蝕。下面我將一步步拆解這個公式,結合機器視覺行業的特點(如工業自動化、質檢、安防、…

EPLAN 中定制 自己的- A3 圖框的詳細指南(一)

EPLAN 中定制 BIEM - A3 圖框的詳細指南 在智能電氣設計領域,圖框作為圖紙的重要組成部分,其定制的規范性和準確性至關重要。本文將以北京經濟管理職業學院人工智能學院的相關任務為例,詳細介紹在 EPLAN 軟件中定制 BIEM - A3 圖框的全過程…

macbook開發環境的配置記錄

前言:好多東西不記錄就會忘記 git ssh配置 當我們的沒有配置git ssh的時候,使用ssh下載的時候會顯示報錯“make sure you have the correct access rights and respository exits" 如何解決,我們先在命令行檢查檢查一下用戶名和郵箱是…

GitLab 18.1 高級 SAST 已支持 PHP,可升級體驗!

GitLab 是一個全球知名的一體化 DevOps 平臺,很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版,專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料: 極狐GitLab 官網極狐…

[學習]M-QAM的數學原理與調制解調原理詳解(仿真示例)

M-QAM的數學原理與調制解調原理詳解 QAM(正交幅度調制)作為現代數字通信的核心技術,其數學原理和實現方法值得深入探討。本文將分為數學原理、調制解調原理和實現要點三個部分進行系統闡述。 文章目錄 M-QAM的數學原理與調制解調原理詳解一、…

圖書管理系統練習項目源碼-前后端分離-使用node.js來做后端開發

前端學習了這么久了,node.js 也有了一定的了解,知道使用node也可以來開發后端,今天給大家分享 使用node 來做后端,vue來寫前端,做一個簡單的圖書管理系統。我們在剛開始學習編程的時候,需要自己寫大量的項目…

【甲方安全視角】企業建設下的安全運營

文章目錄 一、安全運營的概念與起源二、安全運營的職責與定位三、安全運營工程師的核心能力要求四、安全運營的典型場景與應對技巧1. 明確責任劃分,避免“醫生做保姆”2. 推動機制:自下而上 vs. 自上而下3. 宣傳與內部影響力建設五、安全運營的戰略意義六、為何需要安全原因在…

03認證原理自定義認證添加認證驗證碼

目錄 大綱 一、自定義資源權限規則 二、自定義登錄界面 三、自定義登錄成功處理 四、顯示登錄失敗信息 五、自定義登錄失敗處理 六、注銷登錄 七、登錄用戶數據獲取 1. SecurityContextHolder 2. SecurityContextHolderStrategy 3. 代碼中獲取認證之后用戶數據 4. 多…

IPLOOK 2025上半年足跡回顧:連接全球,步履不停

2025年上半年,IPLOOK積極活躍于全球通信舞臺,足跡橫跨亞洲、歐洲、非洲與北美洲,我們圍繞5G核心網、私有網絡、云化架構等方向,向來自不同地區的客戶與合作伙伴展示了領先的端到端解決方案,深入了解各地市場需求與技術…

【Kafka】docker 中配置帶 Kerberos 認證的 Kafka 環境(全過程)

1. 準備 docker 下載鏡像 docker pull centos/systemd,該鏡像是基于 centos7 增加了 systemd 的功能,可以更方便啟動后臺服務 啟動鏡像 使用 systemd 功能需要權限,如果是模擬 gitlab services 就不要使用 systemd 的方式啟動 如果不使用 s…

用Python構建一個可擴展的多網盤聚合管理工具 (以阿里云盤為例)

摘要 本文旨在從開發者視角,探討并實踐如何構建一個命令行界面的、支持多網盤聚合管理的工具。我們將以阿里云盤為例,深入解析其API認證與核心操作,并用Python從零開始實現文件列表、重命名、分享等功能。更重要的是,本文將重點討…

筑牢網絡安全屏障

在數字化浪潮席卷全球的今天,網絡空間已成為繼陸、海、空、天之后的 “第五疆域”,深刻影響著國家政治、經濟、軍事等各個領域。“沒有網絡安全就沒有國家安全”,這句論斷精準道出了網絡安全與國家安全之間密不可分的關系。? 網絡安全關乎國…

計算機網絡(一)層

一、分層 分層的意義:簡化復雜性、提高靈活性、促進標準化 (1)法律上國際標準——OSI體系結構 (2)事實上的網絡標準——TCP/IP體系結構 TCP:運輸層的協議 IP:網際層的一個協議 網絡接口層&…

STM32 rs485實現中斷DMA模式收發不定長數據

在STM32F103上使用TD301D485H模塊通過USB轉485/422串口線與電腦通信 TXD (TD301D485H) -> PA2 (STM32F103)RXD (TD301D485H) -> PA3 (STM32F103)CON (TD301D485H) -> PA1 (STM32F103) 由于485是半雙工通信,需要在發送和接收時控制方向引腳(CO…

DDL-8-小結

DDL 小結 DDL 小結 DDL 小結DDL - 數據庫操作DDL - 表操作 DDL - 數據庫操作 查看當前有哪些數據庫 SHOW DATABASES;新建數據庫 CREATE DATABASE 數據庫名;使用數據庫 USE 數據庫名;查詢當前數據庫 SELECT DATABASE();刪除數據庫 DROP DATABASE 數據庫名;DDL - 表操作 查看當前…

Redis 安裝使用教程

一、Redis 簡介 Redis 是一個開源(BSD 許可)、內存數據結構存儲系統,可以用作數據庫、緩存和消息中間件。支持字符串、哈希、列表、集合、有序集合等數據類型,廣泛應用于分布式緩存、排行榜、實時數據分析等場景。 二、下載安裝…

Go語言測試與調試:單元測試與基準測試

以下是《Go語言實戰指南》中關于 測試與調試:單元測試與基準測試 的詳細內容,涵蓋測試編寫、運行、覆蓋率分析與性能測試,適用于實際項目開發與性能優化階段。 一、Go 的測試體系概覽 Go 提供原生的測試工具包 testing,無需第三方…

數字FIR-I型濾波器設計(窗函數法)

目錄 一、實驗目的 二、實驗原理 2.1 概念辨析 2.2 代碼實現邏輯與工具函數 三、實驗內容 3.1 設計帶通濾波器(電平組合法,(理想寬帶低通-理想窄帶低通)x窗函數) 3.2 高通濾波器(…