日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

固态硬盘架构

發(fā)布時(shí)間:2023/12/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 固态硬盘架构 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SSD系統(tǒng)架構(gòu)

SSD作為數(shù)據(jù)存儲(chǔ)設(shè)備,其實(shí)是一種典型的(System on Chip)單機(jī)系統(tǒng):有主控CPU、RAM、操作加速器、總線、數(shù)據(jù)編碼譯碼等模塊,操作對(duì)象為協(xié)議、數(shù)據(jù)命令、介質(zhì),操作目的是寫入和讀取用戶數(shù)據(jù)。

圖2-1 SSD主控模塊硬件圖

圖2-1是一個(gè)SSD系統(tǒng)架構(gòu)的概略圖,這款主控采用ARM CPU,主要分為前端和后端兩大部。前端(Host Interface Controller,主機(jī)接口控制器)跟主機(jī)打交道,接口可以是SATA、PCIe、SAS等接口。后端(Flash Controller,閃存控制器)跟閃存打交道并完成數(shù)據(jù)編解碼和ECC。除此之外還有緩沖(Buffer),DRAM。模塊之間通過(guò)AXI高速和APB低速總線互聯(lián)互通,完成信息和數(shù)據(jù)的通訊。在此基礎(chǔ)之上,由SSD 固件開(kāi)發(fā)者構(gòu)筑固件(Firmware)統(tǒng)一完成SSD產(chǎn)品所需要的功能,調(diào)度各個(gè)硬件模塊,完成數(shù)據(jù)從主機(jī)端到閃存端的寫入和讀取。

前端

主機(jī)接口:與主機(jī)進(jìn)行通訊(數(shù)據(jù)交互)的標(biāo)準(zhǔn)協(xié)議接口,當(dāng)前主要代表為SATA、SAS和PCIe等。表2-1是三者的接口速率:

表2-1 SATA/SAS/PCIe接口速率

接口

速率(@2017,Gb/s)

SATA

6/3/1.5

SAS

12/6

PCIe

通道數(shù) * 8(PCIe 3.0)

SATA的全稱是Serial Advanced Technology Attachment(串行高級(jí)技術(shù)附件),一種基于行業(yè)標(biāo)準(zhǔn)的串行硬件驅(qū)動(dòng)器接口,是由Intel、IBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盤接口規(guī)范。2001年,由Intel、APT、Dell、IBM、希捷、邁拓這幾大廠商組成的SATA委員會(huì)正式確立了SATA 1.0規(guī)范,在當(dāng)年的IDF Fall 大會(huì)上,Seagate宣布了SATA 1.0標(biāo)準(zhǔn),正式宣告了SATA規(guī)范的確立。

圖2-2 SATA接口

SAS(Serial Attached SCSI)即串行連接SCSI,是新一代的SCSI技術(shù),和現(xiàn)在流行的Serial ATA(SATA)硬盤相同,都是采用串行技術(shù)以獲得更高的傳輸速度,并通過(guò)縮短連接線改善內(nèi)部空間等。SAS是并行SCSI接口之后開(kāi)發(fā)出的全新接口,此接口的設(shè)計(jì)是為了改善存儲(chǔ)系統(tǒng)的效能、可用性和擴(kuò)充性,并且提供與SATA硬盤的兼容性。SAS的接口技術(shù)可以向下兼容SATA。具體來(lái)說(shuō),二者的兼容性主要體現(xiàn)在物理層和協(xié)議層的兼容。在物理層,SAS接口和SATA接口完全兼容,SATA硬盤可以直接使用在SAS的環(huán)境中;從接口標(biāo)準(zhǔn)上而言,SATA是SAS的一個(gè)子標(biāo)準(zhǔn),因此SAS控制器可以直接操控SATA硬盤,但是SAS卻不能直接使用在SATA的環(huán)境中,因?yàn)镾ATA控制器并不能對(duì)SAS硬盤進(jìn)行控制。在協(xié)議層,SAS由3種類型協(xié)議組成,根據(jù)連接的不同設(shè)備使用相應(yīng)的協(xié)議進(jìn)行數(shù)據(jù)傳輸。其中串行SCSI協(xié)議(SSP)用于傳輸SCSI命令;SCSI管理協(xié)議(SMP)用于對(duì)連接設(shè)備的維護(hù)和管理;SATA通道協(xié)議(STP)用于SAS和SATA之間數(shù)據(jù)的傳輸。因此在這3種協(xié)議的配合下,SAS可以和SATA以及部分SCSI設(shè)備無(wú)縫結(jié)合。

圖2-3 SAS接口

PCIe(Peripheral Component Interconnect Express)是一種高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn),它原來(lái)的名稱為“3GIO”,是由英特爾在2001年提出的,旨在替代舊的PCI、PCI-X和AGP總線標(biāo)準(zhǔn)。PCIe屬于高速串行點(diǎn)對(duì)點(diǎn)多通道高帶寬傳輸,所連接的設(shè)備分配獨(dú)享通道帶寬,不共享總線帶寬,主要支持主動(dòng)電源管理、錯(cuò)誤報(bào)告、端對(duì)端的可靠性傳輸、熱插拔以及服務(wù)質(zhì)量(QoS,Quality of Service)等功能。它的主要優(yōu)勢(shì)就是數(shù)據(jù)傳輸速率高,目前最高的4.0版本可達(dá)到2GB/s(單向單通道速率),而且還有相當(dāng)大的發(fā)展?jié)摿ΑCI Express也有多種規(guī)格,從PCI Express 1X到PCI Express 32X,意思就是1個(gè)通道到32個(gè)通道,能滿足將來(lái)一定時(shí)間內(nèi)出現(xiàn)的低速設(shè)備和高速設(shè)備的需求。PCI-Express最新的接口是PCIe 4.0接口。

圖2-4展示的是PCIe接口,包括卡式和U.2:

圖2-4 PCIe接口式插卡(AIC)

圖2-5 U.2接口

前端是負(fù)責(zé)主機(jī)和SSD設(shè)備通訊的接口,命令和數(shù)據(jù)傳輸通過(guò)前端總線流向或流出SSD設(shè)備。

從硬件模塊上來(lái)看,前端有SATA/SAS/PCIe PHY層,俗稱物理層,接收串行比特?cái)?shù)據(jù)流,轉(zhuǎn)化成數(shù)字信號(hào)給前端后續(xù)模塊處理。這些模塊處理NVMe/SATA/SAS命令,它接收并處理一條條命令和數(shù)據(jù)信息,涉及到數(shù)據(jù)搬移會(huì)使用到DMA。一般命令信息會(huì)排隊(duì)放到隊(duì)列中,數(shù)據(jù)會(huì)放到SRAM快速介質(zhì)中。如果涉及到加密和壓縮功能,前端會(huì)有相應(yīng)的硬件模塊做處理,軟件無(wú)法應(yīng)對(duì)壓縮和加密的快速的需求,會(huì)成為性能的瓶頸。

從協(xié)議角度,以一條SATA Write FPDMA命令為例,從主機(jī)端文件系統(tǒng)出發(fā)發(fā)出一條寫命令請(qǐng)求,到主板南橋AHCI寄存器級(jí)別的寫命令操作,忽略文件系統(tǒng)到AHCI路徑的操作細(xì)節(jié),從SSD前端總線上看會(huì)發(fā)出如下的寫交互操作:

Step 1: 主機(jī)在總線上發(fā)出Write FPDMA命令FIS(Frame Information Structure,幀信息結(jié)構(gòu),是SATA為了實(shí)現(xiàn)異步傳輸數(shù)據(jù)塊而使用的封包);

Step 2: SSD收到命令后,判斷自己內(nèi)部寫緩存(Write Buffer)是否有空間去接收新的數(shù)據(jù):如果有,則發(fā)出DMA Setup FIS到主機(jī)端,否則什么也不發(fā),主機(jī)端處于等待狀態(tài)。(這叫流控:數(shù)據(jù)流量控制);

Step 3: 主機(jī)端收到DMA Setup FIS后,發(fā)送不大于8KB數(shù)據(jù)的Data FIS給設(shè)備;

Step 4: 重復(fù)Step 2和Step 3直到數(shù)據(jù)全部發(fā)送完畢;

Step 5: 最后步驟設(shè)備(SSD)發(fā)送一個(gè)狀態(tài)Status FIS給主機(jī),表示從協(xié)議層面這條寫命令完成全部操作。當(dāng)然Status可以是一個(gè)good status或者一個(gè)bad/error status,表示這條Write FPDMA命令操作正常或者異常完成。

圖1-6 SATA Write FPDMA命令協(xié)議處理步驟

SSD把命令和數(shù)據(jù)接收到SSD內(nèi)部緩沖區(qū)之后還需要做些什么呢?任務(wù)還沒(méi)完成,前端固件模塊還需要對(duì)命令進(jìn)行解析,并分派任務(wù)給中端FTL。命令解析(Command Decoder)將命令FIS解析成固件和FTL(Flash Translation Layer)能理解的元素:

· 這是一條什么命令,命令屬性是讀還是寫類型;

· 如果是讀寫類型命令,命令的起始 LBA和數(shù)據(jù)長(zhǎng)度;

· 命令的其他屬性,如是否是FUA命令,和前一條命令LBA是否連續(xù)(即是連續(xù)還是隨機(jī)命令)。

當(dāng)命令解析完成后,放入命令隊(duì)列里等待中端FTL排隊(duì)去處理,由于已經(jīng)有了起始LBA和數(shù)據(jù)長(zhǎng)度兩大主要信息元素,FTL可以準(zhǔn)確地映射LBA空間到閃存的物理空間。至此,前端硬件和固件模塊完成了它應(yīng)該完成的任務(wù)。

主控CPU

SSD控制器SoC模塊和其他嵌入式系統(tǒng)SoC模塊并沒(méi)有什么本質(zhì)的不同,一般是一顆或多顆CPU核組成,同時(shí)片上有I-RAM、D-RAM、PLL、IO、UART、高低速總線等外圍電路模塊。CPU負(fù)責(zé)運(yùn)算,系統(tǒng)調(diào)度,IO完成必要的輸入輸出,總線連接前后端模塊。

通常我們所說(shuō)的固件就運(yùn)行在CPU核上,分別有代碼存儲(chǔ)區(qū)I-RAM和數(shù)據(jù)存儲(chǔ)區(qū)D-RAM。如果多核CPU,需要注意的是軟件可以是對(duì)稱多處理(SMP)和非對(duì)稱多處理(AMP)。對(duì)稱多處理多核共享OS和同一份執(zhí)行代碼,非對(duì)稱多處理是多核分別執(zhí)行不同代碼。前者多核共享一份I-RAM和D-RAM,后者每核對(duì)應(yīng)一份I-RAM和D-RAM;前者資源共享,后者多核每核獨(dú)立運(yùn)行,沒(méi)有內(nèi)存搶占導(dǎo)致代碼速度執(zhí)行變慢的問(wèn)題。當(dāng)SSD的CPU要求計(jì)算能力更高時(shí),除增加核數(shù)和增加單核CPU頻率,AMP的方式設(shè)計(jì)更加適應(yīng)計(jì)算和任務(wù)獨(dú)立的要求,消除了代碼和數(shù)據(jù)資源搶占的導(dǎo)致執(zhí)行速度過(guò)慢的問(wèn)題。

固件的設(shè)計(jì)根據(jù)CPU核數(shù)的設(shè)計(jì),充分發(fā)揮多核CPU的計(jì)算能力是固件設(shè)計(jì)考慮的一方面,另外固件考慮任務(wù)劃分,分別加載到不同CPU上執(zhí)行,達(dá)到并行處理的同時(shí)也能讓所有CPU有著合理均衡的負(fù)載,不至于有的CPU忙死有的CPU閑死,這是固件架構(gòu)設(shè)計(jì)要考慮到的重要內(nèi)容,目標(biāo)是讓SSD輸出最大的讀寫性能。

SSD CPU的外圍模塊包括像UART/GPIO/JTAG是程序必不可少的調(diào)試端口,定時(shí)器模塊Timer,還有其他的內(nèi)部模塊像DMA、溫度傳感器、Power regulator模塊等等。

后端

在前文中關(guān)于后端和閃存有過(guò)一些描述,這里從SSD主控角度來(lái)分析一下后端硬件模塊。

后端兩大模塊:ECC模塊和閃存控制器。

圖2-7 SSD中的閃存控制器和ECC模塊

ECC模塊是數(shù)據(jù)編解碼單元,由于閃存存儲(chǔ)天生存在誤碼率,為了數(shù)據(jù)的正確性,在數(shù)據(jù)寫入操作時(shí)給原數(shù)據(jù)加入ECC 校驗(yàn)保護(hù),這是編碼過(guò)程。讀取數(shù)據(jù)時(shí),同樣需要解碼來(lái)檢錯(cuò)和糾錯(cuò),如果錯(cuò)誤的比特?cái)?shù)超過(guò)ECC糾錯(cuò)能力,數(shù)據(jù)會(huì)以不可糾錯(cuò)誤上傳給主機(jī)。這里的ECC 編碼和解碼的過(guò)程就是ECC模塊單元來(lái)完成的。SSD內(nèi)的ECC算法主要有BCH和LDPC,并且LDPC正成為主流。

閃存控制器,使用包括符合閃存ONFI、Toggle標(biāo)準(zhǔn)的閃存命令,負(fù)責(zé)管理數(shù)據(jù)從緩存到閃存的讀取和寫入。

閃存控制器如何和閃存連接和通訊的,從單個(gè)閃存角度,連接的引腳如下,一個(gè)Die/LUN是一個(gè)閃存命令執(zhí)行的基本單元,所以閃存控制器和閃存連接按照如下引腳連接:

l 外部接口:8個(gè)I/O口,5個(gè)使能信號(hào)(ALE、CLE、WE#、RE#、CE#),1個(gè)狀態(tài)引腳(R/B#),1個(gè)寫保護(hù)引腳(WE#);

l 命令、地址、數(shù)據(jù)都通過(guò)8個(gè)I/O口輸入輸出;

l 寫入命令、地址、數(shù)據(jù)時(shí),都需要將WE#、CE#信號(hào)同時(shí)拉低;數(shù)據(jù)在WE#上升沿被鎖存;

l CLE、ALE用來(lái)區(qū)分I/O引腳上傳輸?shù)氖菙?shù)據(jù)還是地址;

圖1-8 閃存芯片接口

從閃存控制器角度,為了性能需求需要并發(fā)多個(gè)閃存Die/LUN,通常配置有多個(gè)通道 (channel)。一個(gè)通道掛多少個(gè)閃存Die/LUN,其一取決于SSD容量,其二取決于性能需求,Die/LUN個(gè)數(shù)越多,并發(fā)的個(gè)數(shù)越多,性能越好。

Die/LUN是閃存通訊的最小基本管理單元,配有上述的一套總線包括:8個(gè)I/O口,5個(gè)使能信號(hào)(ALE、CLE、WE#、RE#、CE#),1個(gè)狀態(tài)引腳(R/B#),1個(gè)寫保護(hù)引腳(WE#)…

如果一個(gè)通道上掛了多個(gè)閃存Die/LUN,每個(gè)Die共用每個(gè)通道上一套總線,那閃存控制器如何識(shí)別和哪個(gè)Die通訊呢?答案是選通信號(hào)CE#,在閃存控制給特定地址的閃存Die發(fā)讀寫命令和數(shù)據(jù)前,先選通對(duì)應(yīng)Die的CE#信號(hào),然后進(jìn)行讀寫命令和數(shù)據(jù)的發(fā)送。一個(gè)通道上可以有多個(gè)CE,SSD主控一般設(shè)計(jì)為4-8個(gè),對(duì)于容量而言選擇有一定的靈活度。

總結(jié)

以上是生活随笔為你收集整理的固态硬盘架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。