国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

嵌入式平臺NVMe驅(qū)動設(shè)計與應(yīng)用

2022-06-24 07:38馮軍波
電子制作 2022年10期
關(guān)鍵詞:寄存器隊列命令

馮軍波

(中航工業(yè)西安航空計算技術(shù)研究所,陜西西安,710068)

0 引言

NVMe(Non-Volatile Memory express,非易失存儲器協(xié)議)是一種面向PCIe固態(tài)硬盤(SDD)的接口協(xié)議。最早于在2011年3月推出,由NVMe規(guī)范組織成員公司(如Intel、戴爾、三星、鎂光等)合作開發(fā),用于主控軟件通過PCIe 鏈路與SSD進(jìn)行高速數(shù)據(jù)傳輸。在最新的1.3版本中又增加了設(shè)備自檢、引導(dǎo)分區(qū)、虛擬化、主機(jī)操控散熱管理等新特點,改進(jìn)了SSD的性能。在NVMe推出之前,傳統(tǒng)的SATA硬盤大都使用AHCI協(xié)議,讀寫速度在500M/s以下。AHCI協(xié)議具有較強的兼容性,可支持SATA總線與PCIe總線,但是當(dāng)硬盤通過PCIe總線與處理器連接時,AHCI協(xié)議無法為PCIe SDD提供最佳的性能。而NVMe的規(guī)劃充分利用了PCIe SSD的低延遲與并行性,兼顧處理器平臺架構(gòu),最大程度的發(fā)揮了SDD的高性能,讀寫速度可超過1GB/s。本文描述了一種嵌入式飛騰4核CPU平臺下的NVMe固態(tài)硬盤驅(qū)動設(shè)計和固態(tài)硬盤硬件實現(xiàn)。實驗表明,該設(shè)計相較于之前的SATA固態(tài)硬盤極大的提高了數(shù)據(jù)的讀寫速度,增強了存儲系統(tǒng)的性能。

1 系統(tǒng)組成

本系統(tǒng)的硬件環(huán)境主要包含兩部分,一個處理器模塊加一塊SSD,硬件設(shè)計的示意如圖1所示。其中的處理器模塊采用飛騰公司的FT2000-4,該處理器集成4個64位高性能核,最高主頻3.0GHz,設(shè)計中的工作主頻為1.0GHz,處理能力為16GIPS/Core@1GHz。

圖1 存儲系統(tǒng)邏輯結(jié)構(gòu)示意圖

該系統(tǒng)中的SSD是一種典型的SOC(System on Chip)單機(jī)系統(tǒng),模塊之間通過AXI高速和APB低速總線互聯(lián)互通,完成信息和數(shù)據(jù)的通信。SSD中還有固件(Firmware),用于調(diào)度各個硬件模塊,完成SSD產(chǎn)品所需要的功能,也包括數(shù)據(jù)從主機(jī)端到閃存端的寫入和讀取。SSD內(nèi)部由PCIe GS9203主控制器芯片和Nand Flash陣列組成。PCIe主控芯片為28nm工藝,主控CPU具有兩個 ARM Cortex R4 CP內(nèi)核,支持PCIe Gen3 x4和NVMe 1.3c協(xié)議標(biāo)準(zhǔn),有8個Flash通道, Flash芯片采用國產(chǎn)長江存儲科技有限責(zé)任公司的TLC X1-9050 NAND FLASH,是中國首款64層3D NAND閃存。

2 NVMe驅(qū)動設(shè)計

NVMe驅(qū)動依據(jù)功能的不同,可劃分為驅(qū)動接口模塊,初始化模塊和命令執(zhí)行模塊。其中命令執(zhí)行模塊為核心,設(shè)備初始化模塊涉及控制器初始化、數(shù)據(jù)存儲鏈表創(chuàng)建、命令隊列的設(shè)置,驅(qū)動接口模塊用于處理上層文件系統(tǒng)對設(shè)備的訪問。驅(qū)動的架構(gòu)如圖2所示。

圖2 NVMe驅(qū)動架構(gòu)圖

本系統(tǒng)中,主機(jī)端在上電后首先運行天脈3嵌入式實時操作系統(tǒng),運行過程中調(diào)用NVMe驅(qū)動的初始化模塊,完成硬件和軟件的準(zhǔn)備工作。隨后在啟動文件系統(tǒng)時將驅(qū)動接口注冊到文件系統(tǒng)的IO函數(shù)中,最后應(yīng)用軟件調(diào)用文件操作函數(shù)時會調(diào)用到驅(qū)動讀寫接口。

■ 2.1 控制器初始化

NVMe控制器初始化的主要內(nèi)容是找到控制器,通過配置其內(nèi)部的寄存器使其就緒,并在主機(jī)端的內(nèi)存上創(chuàng)建命令隊列,創(chuàng)建數(shù)據(jù)緩沖鏈表,并完成MSI中斷的初始化和注冊。

2.1.1 NVMe寄存器配置

NVMe作為一種寄存器級別的接口連接到PCIe接口上,其寄存器配置包括PCIe寄存器配置和NVMe控制器寄存器配置。

PCIe寄存器配置主要是PCI header、和PCI Capabilities的配置。PCI header類型分為兩種,type0表示設(shè)備,type1表示橋。NVMe控制器屬于設(shè)備則定義為type0類型。當(dāng)系統(tǒng)完成PCIe的初始化且設(shè)備被掛到總線上時,PCI header中的設(shè)備ID與廠商ID會有固定的值,該值是設(shè)備的唯一標(biāo)識。基地址寄存器會寫有地址值,該值作為訪問設(shè)備其他寄存器的基址。設(shè)備各項功能的設(shè)置是通過功能指針寄存器來完成的。功能指針寄存器所指向的是位置是配置寄存器組鏈表的第一個條目[1]。常用的能力設(shè)置包括對NVMe控制器的電源管理、中斷管理(包括MSI、MSI-X)的設(shè)置,設(shè)置完之后再配置命令寄存器使能設(shè)備。

NVMe控制器寄存器的設(shè)置主要是對表1中所列舉的寄存器進(jìn)行賦值,寄存器描述見表1。

表1 NVMe控制器寄存器功能描述表

2.1.2 NVMe隊列創(chuàng)建

NVMe命令隊列按照類型可以分為Admin命令隊列與I/O命令隊列,讀寫電子盤通常使用IO隊列。NVMe協(xié)議針支持多達(dá)65535個IO命令隊列,每一個隊列可容納64K 條命令。IO命令隊列按照用途不同可分為命令提交隊列SQ和命令完成隊列CQ。SQ隊列中一條命令的內(nèi)容包括操作碼、ID、要操作盤的起始塊號、塊數(shù)量、數(shù)據(jù)所在的緩沖等。CQ隊列中的一條命令包括下一條命令位置、下一條命令I(lǐng)D當(dāng)前命令I(lǐng)D、當(dāng)前命令狀態(tài)等。一個隊列即是主機(jī)端內(nèi)存上的一段連續(xù)的環(huán)形緩沖,在初始化NVMe時向系統(tǒng)申請內(nèi)存空間,然后將空間的基地址控制器的ASQ寄存器與ACQ寄存器。每一個隊列都有對應(yīng)QID、虛擬地址、物理地址、長度、頭指針、尾指針和相應(yīng)的門鈴寄存器。本驅(qū)動定義了隊列信息結(jié)構(gòu)如下:

命令隊列在多核處理器上可采用兩種設(shè)計方法,一種是一個核上安排一個SQ與一個CQ。另一種為一個核上安排一個CQ多個SQ。本驅(qū)動運行在一個核上,采用第一種方式。隊列通過對應(yīng)的門鈴寄存器,在host與控制器間傳遞消息。

2.1.3 創(chuàng)建數(shù)據(jù)緩沖表

NVMe的數(shù)據(jù)尋址方式包括物理頁表(PRP)和分散聚合表(SGL),本驅(qū)動設(shè)計采用PRP方式。PRP表中的每一項是一個64位指針,格式為頁地址+頁內(nèi)偏移,每一項指向一個內(nèi)存頁,頁的大小在CC寄存器中定義,通常一頁的大小為4KB,因此在進(jìn)行數(shù)據(jù)傳輸時,有時會要求數(shù)據(jù)緩沖的起始地址須4KB對齊。

命令的Dword6~Dword9定義了PRP1、PRP2兩個指針,通過PRP2可以指向PRP List。PRP算法根據(jù)數(shù)據(jù)的長度有三種模式,如圖3所示。

圖3 數(shù)據(jù)緩沖PRP示意圖

當(dāng)數(shù)據(jù)小于等于4KB時只需將PRP1指向數(shù)據(jù)所在的地址即可;若數(shù)據(jù)大于4KB小于等于8KB則須將PRP1指向數(shù)據(jù)所在的地址,PRP2指向數(shù)據(jù)所在地址加上4K位置;若數(shù)據(jù)大于8K,則需將PRP1指向數(shù)據(jù)所在地址,PRP2指向PRP List。

■ 2.2 命令執(zhí)行過程

NVMe命令按照類型可以分為Admin命令與I/O命令。Admin命令主要負(fù)責(zé)管理NVMe控制器,IO命令負(fù)責(zé)操作固態(tài)硬盤,常用的Admin命令包括identify、創(chuàng)建SQCQ、刪除SQCQ。常用的IO命令包括Read 、Write、Flush。

圖4為NVMe 命令執(zhí)行過程。主機(jī)寫命令道SQ隊列,通過TailDoorbell通知NVMe控制器,控制器獲得命令并執(zhí)行,將命令寫入CQ隊列(無論命令是否執(zhí)行成功),產(chǎn)生中斷提醒主機(jī)命令已完成。主機(jī)處理CQ中的命令信息,最后更新HeadDoorbell告知控制器命令已處理。

圖4 NVMe命令執(zhí)行過程示意圖[3]

為解決多任務(wù)對共享資源的互斥訪問,在寫命令到SQ后,提交命令的任務(wù)應(yīng)先等待資源可用的信號量,待控制器執(zhí)行完一條命令后會向主機(jī)發(fā)出MSI中斷,主機(jī)在MSI中斷服務(wù)函數(shù)中處理完成隊列,最終釋放資源信號量。

3 NVMe驅(qū)動應(yīng)用

本驅(qū)動應(yīng)用于某軍用飛機(jī)的數(shù)據(jù)共享系統(tǒng),為其中的數(shù)據(jù)庫管理軟件提供存儲服務(wù)。操作系統(tǒng)為國產(chǎn)自主可控的天脈3多分區(qū)RTOS,使用場景如圖5所示。

圖5 NVMe驅(qū)動應(yīng)用場景示意圖

在天脈3核心OS啟動過程中完成NVMe控制器的初始化、命令隊列以及數(shù)據(jù)緩沖PRP表的創(chuàng)建工作,隨后將驅(qū)動接口注冊到文件系統(tǒng)中。當(dāng)分區(qū)應(yīng)用數(shù)據(jù)庫管理軟件中的任務(wù)使用標(biāo)準(zhǔn)IO進(jìn)行文件操作時,由文件系統(tǒng)調(diào)用驅(qū)動的接口模塊實現(xiàn)對NVMe電子盤的讀寫訪問。本設(shè)計中NVMe驅(qū)動最大支持單次DMA傳輸512KB數(shù)據(jù),當(dāng)數(shù)據(jù)大于512KB時,驅(qū)動會將數(shù)據(jù)以512KB為單位分割,進(jìn)行多次傳輸。在PCIe3.0接口4x下進(jìn)行讀寫速度測試,測量數(shù)據(jù)如圖6所示。

圖6 NVMe驅(qū)動讀寫電子速度圖

從實驗結(jié)果可知,當(dāng)數(shù)據(jù)量很小時,讀寫速度也較慢,在數(shù)據(jù)量接近或大于設(shè)備支持的單次最大處理的字節(jié)數(shù)512KB時,讀寫速度穩(wěn)定在1000MB/s上下,驅(qū)動表現(xiàn)出良好的性能。

4 結(jié)束語

NVMe協(xié)議定義了基于PCIe的SSD的寄存器接口、命令集合與功能集合,通過PCIe接口將I/O命令和響應(yīng)映射到主機(jī)中的共享內(nèi)存。相較于SATA或AHCI協(xié)議,NVMe接口支持與多核處理器的并行I/O,實現(xiàn)高吞吐量,緩解了CPU瓶頸。NVMe電子盤帶來高速的讀寫能力時,相比SAS和SATA電子盤在價格上就更昂貴一些,而且消耗的功率可能也會增加,同時在容量方面不及普通硬盤最大只有4TB,不過在很多高性能領(lǐng)成為好的選擇。本文實現(xiàn)的國產(chǎn)嵌入式實時操作系統(tǒng)天脈3下的NVMe驅(qū)動,提升了航空裝備在存儲系統(tǒng)中的性能,對于嵌入式機(jī)載領(lǐng)域的數(shù)據(jù)存儲有著很高的應(yīng)用價值。

猜你喜歡
寄存器隊列命令
智能網(wǎng)聯(lián)車輛隊列緊急工況控制策略設(shè)計*
管理Windows10的PowerShell命令行使用記錄
隊列隊形體育教案
疫情就是命令 防控就是責(zé)任
飛思卡爾單片機(jī)脈寬調(diào)制模塊用法研究
移位寄存器及算術(shù)運算應(yīng)用
數(shù)字電路環(huán)境下汽車控制電路信號設(shè)計
青春的頭屑
解析Windows10的內(nèi)部命令
寶箱4
桓台县| 香港 | 蒙城县| 西宁市| 大英县| 房山区| 于都县| 乌兰察布市| 庆阳市| 资中县| 客服| 鹤壁市| 潜山县| 巴青县| 黄陵县| 南开区| 呼玛县| 赣州市| 淮北市| 内乡县| 凌云县| 通许县| 静乐县| 安泽县| 综艺| 化隆| 汉寿县| 英德市| 南康市| 西藏| 简阳市| 呼伦贝尔市| 兴海县| 阿拉善盟| 泸溪县| 台北县| 逊克县| 淮北市| 三门县| 通辽市| 乐东|