亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        嵌入式平臺NVMe驅(qū)動設計與應用

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

        馮軍波

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

        0 引言

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

        1 系統(tǒng)組成

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

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

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

        2 NVMe驅(qū)動設計

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

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

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

        ■ 2.1 控制器初始化

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

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

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

        2.1.2 NVMe隊列創(chuàng)建

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

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

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

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

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

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

        當數(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命令主要負責管理NVMe控制器,IO命令負責操作固態(tài)硬盤,常用的Admin命令包括identify、創(chuàng)建SQCQ、刪除SQCQ。常用的IO命令包括Read 、Write、Flush。

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

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

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

        3 NVMe驅(qū)動應用

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

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

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

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

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

        4 結(jié)束語

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

        猜你喜歡
        寄存器隊列命令
        只聽主人的命令
        Lite寄存器模型的設計與實現(xiàn)
        計算機應用(2020年5期)2020-06-07 07:06:44
        隊列里的小秘密
        基于多隊列切換的SDN擁塞控制*
        軟件(2020年3期)2020-04-20 00:58:44
        在隊列里
        移防命令下達后
        豐田加速駛?cè)胱詣玉{駛隊列
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        這是人民的命令
        藍色命令
        男人深夜影院无码观看| 女女女女女裸体处开bbb| 国产美女久久精品香蕉69| 无套内谢老熟女| 欧美人牲交| 拍摄av现场失控高潮数次| 91精品91| 精品国模人妻视频网站| 77777亚洲午夜久久多喷| 久久中文精品无码中文字幕下载| 狼人国产精品亚洲| 亚洲国产精品亚洲高清| 中文国产乱码在线人妻一区二区| 射精专区一区二区朝鲜| 无遮无挡三级动态图| 亚洲夫妻性生活视频网站| 亚洲av一区二区三区网站| 扒开美女内裤舔出白水| 中文亚洲av片在线观看| 成人免费毛片内射美女-百度| 亚洲熟妇大图综合色区| 久久精品国产精品亚洲艾| 国产午夜免费高清久久影院| 欧美亚洲国产一区二区三区| 欧美高大丰满freesex| 国产精品国产三级国产av主| 亚洲成年国产一区二区| 韩国三级中文字幕hd| 国产日韩亚洲欧洲一区二区三区| 日本一区二区高清视频在线播放| 精品少妇一区二区av免费观看| 卡一卡二卡三无人区| 久久久久亚洲AV无码专| 国产在线a免费观看不卡| 狠狠摸狠狠澡| 中文亚洲av片在线观看不卡| 亚洲区精品久久一区二区三区女同 | 高清不卡一区二区三区| 亚洲av成人精品日韩一区| 国产伦精品一区二区三区四区| 日产精品毛片av一区二区三区|