付志鵬,馮 丹,陳 紅,張曉梨
(鵬城實(shí)驗(yàn)室,廣東 深圳 518055)
隨著國內(nèi)外環(huán)境的變化,建設(shè)自主可控的國產(chǎn)計(jì)算生態(tài)的必要性和緊迫性日益凸顯。作為計(jì)算生態(tài)核心的處理器和操作系統(tǒng),除了Wintel(Windows+Intel)體系和Intel+IOS體系,AL(ARM[1]+Linux)體系由于其在移動(dòng)端(手機(jī)、平板等)的優(yōu)勢(shì)地位而成為在服務(wù)器和PC端具有全球發(fā)展?jié)摿Φ牧硪环N體系。隨著多年的發(fā)展,國內(nèi)在AL體系已逐漸形成了以飛騰[2]+麒麟[3-6]為代表的PK(Phytium+Kylin)體系和以華為鯤鵬+歐拉為代表的鯤鵬體系。近幾年,飛騰服務(wù)器和鯤鵬服務(wù)器在國內(nèi)市場(chǎng)飛速增長(zhǎng),基于國產(chǎn)飛騰服務(wù)器和鯤鵬服務(wù)器的生態(tài)適配顯得日益迫切,這為在關(guān)鍵領(lǐng)域加速完成國產(chǎn)化替代奠定基礎(chǔ),具有廣闊的市場(chǎng)前景。
國產(chǎn)計(jì)算平臺(tái)的核心部件,主要包括處理器、整機(jī)、操作系統(tǒng)、中間件等。將這些核心部件有效集成起來,形成能夠支撐當(dāng)前互聯(lián)網(wǎng)信息時(shí)代的基礎(chǔ)設(shè)施,進(jìn)而建設(shè)國產(chǎn)計(jì)算生態(tài),實(shí)現(xiàn)對(duì)國外生態(tài)的全面替代尤為重要。生態(tài)適配首先需要解決國產(chǎn)操作系統(tǒng)對(duì)國產(chǎn)服務(wù)器的適配。由于Intel服務(wù)器長(zhǎng)期在國際國內(nèi)的壟斷地位,國產(chǎn)操作系統(tǒng)主要基于Intel服務(wù)器開發(fā)和運(yùn)行,無需進(jìn)行適配。在AL生態(tài)蓬勃發(fā)展的當(dāng)下,國產(chǎn)操作系統(tǒng)需要首先完成對(duì)飛騰服務(wù)器和華為鯤鵬服務(wù)器的適配,才能以此為基礎(chǔ)建設(shè)國產(chǎn)AL計(jì)算平臺(tái),并在此平臺(tái)上發(fā)展AL應(yīng)用生態(tài)。
國外關(guān)于操作系統(tǒng)對(duì)服務(wù)器適配的相關(guān)研究較少,主要原因在于Wintel體系和Intel+IOS體系在服務(wù)器和終端市場(chǎng)誕生的初期就天生結(jié)合在一起,Windows和IOS操作系統(tǒng)的開發(fā)和調(diào)試主要在Intel系列服務(wù)器或終端設(shè)備上進(jìn)行,具有天生的適配能力。
在國內(nèi),前期國產(chǎn)操作系統(tǒng)主要以在Intel系列服務(wù)器上運(yùn)行為主。國內(nèi)外環(huán)境改變后,計(jì)算平臺(tái)國產(chǎn)化問題日益突出,國產(chǎn)操作系統(tǒng)在國產(chǎn)服務(wù)器上適配需求越來越迫切。在某些特殊領(lǐng)域,國產(chǎn)操作系統(tǒng)對(duì)處理器的適配已有相關(guān)研究。雷鳴等[7]針對(duì)在龍芯平臺(tái)上適配Android操作系統(tǒng)進(jìn)行研究,通過編譯環(huán)境適配、Linux內(nèi)核適配、文件系統(tǒng)適配等一系列改進(jìn),測(cè)試結(jié)果表明Android操作系統(tǒng)能夠適配龍芯處理器。任占廣等[8]針對(duì)國內(nèi)高性能通信需求,采用銳華國產(chǎn)嵌入式操作系統(tǒng)在自主研制的高性能通信處理器“網(wǎng)芯一號(hào)”上進(jìn)行適配,突破了操作系統(tǒng)在實(shí)時(shí)通信方面的不足,完成了銳華操作系統(tǒng)在“網(wǎng)芯一號(hào)”上的板級(jí)升級(jí)包和相關(guān)驅(qū)動(dòng)上的適配。測(cè)試結(jié)果表明,銳華操作系統(tǒng)完全能夠滿足國內(nèi)高性能通信需求,解決了通信領(lǐng)域大量使用國外軟硬件產(chǎn)品,存在安全隱患的矛盾。張靜等[9]針對(duì)銳華操作系統(tǒng)適配到國產(chǎn)飛騰1500A/4上的問題,給出了一個(gè)針對(duì)性的處理器支持包,該包支持銳華操作系統(tǒng)在飛騰1500A/4下的任務(wù)上下文切換、中斷處理、多核同步與互斥等功能,有力解決了飛騰1500A/4和銳華操作系統(tǒng)在國產(chǎn)通信領(lǐng)域的嵌入式應(yīng)用障礙。針對(duì)航空航天領(lǐng)域軟硬件國產(chǎn)化的特殊需求,項(xiàng)濤等[10]將國產(chǎn)自研的天脈1機(jī)載嵌入式實(shí)時(shí)操作系統(tǒng)在國產(chǎn)自研飛騰2000A處理器上進(jìn)行適配,測(cè)試結(jié)果表明天脈1嵌入式操作系統(tǒng)能在飛騰2000A上順利運(yùn)行。劉幟琦等[11]將天脈1嵌入式操作系統(tǒng)適配到T2080處理器上,以滿足機(jī)載計(jì)算平臺(tái)對(duì)實(shí)時(shí)性的需求。基于PK體系,郭長(zhǎng)國等[12]針對(duì)近幾年在國產(chǎn)辦公信息系統(tǒng)的研發(fā)、集成以及國產(chǎn)化推進(jìn)、實(shí)施等方面進(jìn)行總結(jié)梳理,提出了若干建設(shè)PK體系生態(tài)需要注意的問題及相應(yīng)的應(yīng)對(duì)策略,為下一步國產(chǎn)計(jì)算生態(tài)建設(shè)積累了經(jīng)驗(yàn)。針對(duì)5G時(shí)代下的物聯(lián)網(wǎng)對(duì)新型移動(dòng)操作系統(tǒng)“低延時(shí)、高帶寬、大連接”需求,宋佳明等[13]提出分別從硬件適配能力、軟件兼容能力以及服務(wù)生態(tài)兼容性三個(gè)方面來構(gòu)建新型操作系統(tǒng)適配驗(yàn)證體系的思路。
通過這幾項(xiàng)相關(guān)研究,可以發(fā)現(xiàn)如下幾個(gè)特點(diǎn):
(1)針對(duì)某些關(guān)鍵領(lǐng)域的國產(chǎn)化替代來進(jìn)行,具有很強(qiáng)的針對(duì)性。
(2)操作系統(tǒng)對(duì)處理器的適配主要在嵌入式領(lǐng)域,在服務(wù)器和PC領(lǐng)域沒有涉及。
(3)適配的對(duì)象主要是處理器,而不涉及到整機(jī)、外設(shè)等。
(4)中國逐漸意識(shí)到生態(tài)建設(shè)的重要性并加大國產(chǎn)計(jì)算生態(tài)的建設(shè)力度。
針對(duì)國內(nèi)通用ARM服務(wù)器領(lǐng)域的國產(chǎn)化替代來進(jìn)行,適配內(nèi)容除了處理器外,還包括固件、主板、外設(shè)等。其適配思路和方法,同樣可以推廣到國產(chǎn)ARM PC領(lǐng)域,具有一定的可推廣性。
操作系統(tǒng)的選型是國產(chǎn)計(jì)算平臺(tái)建設(shè)的基礎(chǔ),是進(jìn)行國產(chǎn)ARM服務(wù)器適配的第一步。目前主流的國產(chǎn)操作系統(tǒng)主要有銀河麒麟系列、歐拉系列以及統(tǒng)信操作系統(tǒng)。鑒于PK體系和鯤鵬歐拉體系在AL體系中的主流地位,采用銀河麒麟操作系統(tǒng)來進(jìn)行適配。該適配思路和方法可以同樣擴(kuò)展到歐拉或統(tǒng)信等其他操作系統(tǒng)上。
國產(chǎn)操作系統(tǒng)對(duì)國產(chǎn)ARM服務(wù)器的適配需要經(jīng)過一系列流程。由于服務(wù)器主要由固件、CPU、主板、外設(shè)等幾個(gè)大模塊組成,因此相應(yīng)的適配過程也主要分為如下四個(gè)步驟來進(jìn)行:固件適配、處理器適配、主板適配、外設(shè)適配,其中每個(gè)步驟又可以細(xì)分為多個(gè)子步驟,適配整體方案如圖1所示。
圖1 國產(chǎn)操作系統(tǒng)對(duì)ARM服務(wù)器適配的整體方案
國產(chǎn)固件適配主要解決服務(wù)器加載并啟動(dòng)操作系統(tǒng)的問題,國產(chǎn)處理器適配主要針對(duì)國產(chǎn)處理器內(nèi)置SOC控制器,包括GPIO(General-Purpose Input/Output)、GIC(Generic Interrupt Controller)、內(nèi)存地址隨機(jī)化部件等進(jìn)行適配。外設(shè)適配主要針對(duì)網(wǎng)卡、顯卡、外部存儲(chǔ)和RTC(Real-Time Clock)等模塊,需要基于整體硬件平臺(tái)構(gòu)建操作系統(tǒng)的驅(qū)動(dòng)模塊,實(shí)現(xiàn)系統(tǒng)對(duì)硬件的無縫兼容。主板適配主要是指操作系統(tǒng)在主板上運(yùn)行時(shí)可能會(huì)遇到各種各樣的問題,并針對(duì)這些問題進(jìn)行排查、分析和解決。隨著操作系統(tǒng)和國產(chǎn)主板幾十年的發(fā)展,在主板適配上遇到的問題較少,因此這里主要闡述固件適配、處理器適配和外設(shè)適配。
固件是在啟動(dòng)操作系統(tǒng)之前首先在計(jì)算機(jī)上運(yùn)行的一種軟件,它的作用有兩個(gè),一個(gè)是檢測(cè)并進(jìn)行基本的硬件初始化,另外一個(gè)是加載操作系統(tǒng),然后把控制權(quán)交給操作系統(tǒng)。
國產(chǎn)固件適配是指讓國產(chǎn)固件能夠成功啟動(dòng)操作系統(tǒng),目前主要支持兩種啟動(dòng)方式:直接啟動(dòng)(固件直接加載操作系統(tǒng)內(nèi)核并啟動(dòng)內(nèi)核)和間接啟動(dòng)(固件先加載grub等bootloader,然后通過bootloader啟動(dòng)操作系統(tǒng)),啟動(dòng)方式不同,其要做的工作也有所區(qū)別。固件適配要做的工作主要包括:
(1)約定好啟動(dòng)操作系統(tǒng)要加載的內(nèi)容。直接啟動(dòng),則要加載內(nèi)核二進(jìn)制文件、initrd文件及設(shè)備樹文件。間接啟動(dòng),則還要加載啟動(dòng)加載器grub。
(2)約定好所加載內(nèi)容的加載地址,包括內(nèi)核二進(jìn)制文件加載地址、initrd文件加載地址、設(shè)備樹文件加載地址等。
(3)約定好固件傳遞給內(nèi)核的啟動(dòng)參數(shù)。
當(dāng)固件做完其硬件檢查和配置工作,需要啟動(dòng)操作系統(tǒng)時(shí),根據(jù)其啟動(dòng)方式不同,分別做相應(yīng)的操作。當(dāng)為直接啟動(dòng)時(shí),使用約定的內(nèi)核參數(shù)啟動(dòng)內(nèi)核,內(nèi)核在啟動(dòng)過程中需要解析設(shè)備樹,解壓并掛載initrd文件和文件系統(tǒng)進(jìn)行內(nèi)核和系統(tǒng)啟動(dòng)工作。當(dāng)為間接啟動(dòng)時(shí),通過已加載的grub參數(shù)加載指定的內(nèi)核和設(shè)備樹,然后使用約定的內(nèi)核參數(shù)啟動(dòng)內(nèi)核,內(nèi)核在啟動(dòng)過程中需要解析設(shè)備樹,解壓并掛載initrd文件和文件系統(tǒng)進(jìn)行內(nèi)核和系統(tǒng)啟動(dòng)工作。
國產(chǎn)處理器適配主要從GPIO驅(qū)動(dòng)模塊、GIC中斷驅(qū)動(dòng)模塊以及內(nèi)存地址隨機(jī)化模塊三個(gè)方面進(jìn)行。
國產(chǎn)處理器集成了GPIO模塊[14],主要用來實(shí)現(xiàn)IO數(shù)據(jù)的傳輸。GPIO驅(qū)動(dòng)模塊適配需要根據(jù)約定的硬件采樣機(jī)制,實(shí)現(xiàn)GPIO的接口操作封裝,同時(shí)對(duì)系統(tǒng)內(nèi)核通用關(guān)機(jī)和重啟接口進(jìn)行改造,實(shí)現(xiàn)系統(tǒng)下軟關(guān)機(jī)和軟重啟功能。
GPIO驅(qū)動(dòng)模塊適配流程分為五個(gè)過程:(1)探測(cè)設(shè)備并對(duì)片內(nèi)GPIO控制器寄存器進(jìn)行初始化;(2)獲取設(shè)備樹定義的GPIO屬性配置信息進(jìn)行GPIO設(shè)置;(3)構(gòu)建GPIO控制器方法,包括定義GPIO方向輸入方法、GPIO值獲取方法、GPIO值設(shè)置方法并進(jìn)行GPIO池的注冊(cè);(4)為了方便GPIO驅(qū)動(dòng)和應(yīng)用接口的良好交互,構(gòu)建sysfs文件系統(tǒng)框架,將GPIO的方向輸入接口、GPIO值設(shè)置和獲取接口提供給應(yīng)用接口;(5)通過改造poweroff/reboot系統(tǒng)接口,按照約定的采樣機(jī)制構(gòu)建GPIO設(shè)置執(zhí)行流程,實(shí)現(xiàn)系統(tǒng)下通過GPIO接口的軟關(guān)機(jī)和軟重啟功能。
GIC中斷驅(qū)動(dòng)模塊[15]適配,需要建立一個(gè)中斷和中斷源的映射關(guān)系,即一個(gè)設(shè)備發(fā)起一個(gè)中斷,能夠被系統(tǒng)及時(shí)察覺到并做相應(yīng)的處理。如PCIe設(shè)備的MSI和MSI-X類型的中斷,系統(tǒng)需要在內(nèi)存中建立相應(yīng)的結(jié)構(gòu),用于存儲(chǔ)這種對(duì)應(yīng)關(guān)系,從而確保這些中斷能夠及時(shí)被處理。適配完成后,所有外設(shè)觸發(fā)的中斷都能夠在系統(tǒng)下正常被處理器響應(yīng)和執(zhí)行。系統(tǒng)下打開/proc/interrupts可以查看系統(tǒng)中各設(shè)備對(duì)應(yīng)的中斷關(guān)系,并查看這些中斷的數(shù)目的變化,變化的幅度在正常范圍內(nèi)。
為了提供更安全的地址空間分配隨機(jī)化功能(地址分配隨機(jī)化增強(qiáng)功能),需要在32位系統(tǒng)達(dá)到28-30位時(shí)隨機(jī)化,即G bytes級(jí)別;在64位系統(tǒng)要達(dá)到≥40位時(shí)隨機(jī)化,即T bytes級(jí)別。飛騰FT1500A芯片是ARM64架構(gòu),要滿足40位以上的地址空間隨機(jī)化,需要通過mmap基地址(mmap_base)映射代碼段、數(shù)據(jù)段、堆段、棧段、mmap段和匿名mmap段、vdso段。內(nèi)核在初始化mmap基地址的時(shí)候會(huì)判斷當(dāng)前內(nèi)核是否支持地址空間隨機(jī)化,若支持則會(huì)基于mmap_base 加上經(jīng)過一定處理的隨機(jī)數(shù)rnd來保證后續(xù)每次訪存得到的地址空間都隨機(jī)變化,以達(dá)到提高系統(tǒng)安全性的目的。
適配完成的地址隨機(jī)化功能,通過終端命令“cat /proc/self/maps”,就可以查看系統(tǒng)下代碼段、數(shù)據(jù)段、堆段、棧段、mmap段和匿名mmap段、vdso段等地址空間信息。重復(fù)輸入該命令,對(duì)比可以發(fā)現(xiàn)同一地址空間(例如棧段)變動(dòng)的位數(shù),即當(dāng)前系統(tǒng)實(shí)現(xiàn)的地址空間隨機(jī)化位數(shù)。
國產(chǎn)整機(jī)一般除了CPU上SOC集成的外設(shè)外,還會(huì)通過擴(kuò)展總線(比如PCIe總線、USB總線)擴(kuò)展其他外設(shè),這些外設(shè)主要包括網(wǎng)卡、顯卡、存儲(chǔ)設(shè)備等。
網(wǎng)卡適配主要是適配對(duì)應(yīng)網(wǎng)卡型號(hào)的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng),以及結(jié)合處理器和網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn)發(fā)送和接收環(huán)的定制操作。網(wǎng)卡驅(qū)動(dòng)位于操作系統(tǒng)網(wǎng)絡(luò)協(xié)議棧的數(shù)據(jù)鏈路層,上層接收網(wǎng)絡(luò)協(xié)議中發(fā)出的數(shù)據(jù),并傳遞給網(wǎng)卡硬件,下層從網(wǎng)卡接收數(shù)據(jù),并傳遞給網(wǎng)絡(luò)協(xié)議棧。
網(wǎng)卡適配分為四個(gè)部分,注冊(cè)網(wǎng)卡驅(qū)動(dòng)、網(wǎng)卡初始化、構(gòu)建網(wǎng)卡基本操作接口和初始化發(fā)送/接收操作接口,如圖2所示。
圖2 網(wǎng)卡適配流程
首先調(diào)用PCIe設(shè)備驅(qū)動(dòng)注冊(cè)函數(shù)注冊(cè)網(wǎng)卡驅(qū)動(dòng),在匹配設(shè)備ID后,調(diào)用驅(qū)動(dòng)探針函數(shù)對(duì)網(wǎng)卡進(jìn)行初始化,包括寄存器、DMA以及獲取EEPROM (Electrically Erasable Programmable Read Only Memory)等信息,接著構(gòu)建網(wǎng)卡基本操作接口,接口包括open(命令ifup對(duì)應(yīng)的內(nèi)核接口),close(命令ifdown對(duì)應(yīng)的內(nèi)核接口)等;初始化發(fā)送/接收操作,包括發(fā)送接口函數(shù)的初始化以及napi的初始化(82574網(wǎng)卡接收采用的是napi機(jī)制)以及發(fā)送接收中斷等函數(shù)接口。
網(wǎng)卡驅(qū)動(dòng)的發(fā)送和接收流程是網(wǎng)卡適配難點(diǎn),需要結(jié)合處理器以及網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn)發(fā)送和接收環(huán)的定制操作。以接收流程為例,每個(gè)接收描述符環(huán)含有256(size)個(gè)描述符,一個(gè)頭指針Head,一個(gè)尾指針Tail,如圖3所示。
圖3 接受描述符環(huán)軟件結(jié)構(gòu)
驅(qū)動(dòng)初始化的時(shí)候Head和Tail指針都是指向Base,軟件控制Tail指針,初始化一個(gè)描述符,Tail指針往后移動(dòng)一個(gè)單位,當(dāng)Tail指針移動(dòng)到Base+Size的時(shí)候重置為Base,當(dāng)軟件發(fā)現(xiàn)Tail等于Head的時(shí)候,表示當(dāng)前已經(jīng)沒有數(shù)據(jù)可供處理,需要等待網(wǎng)卡接收新的數(shù)據(jù)報(bào)文。硬件控制Head指針,網(wǎng)卡設(shè)備接收到數(shù)據(jù)包的時(shí)候,硬件移動(dòng)Head指針,當(dāng)Head指針移動(dòng)到Base+Size的時(shí)候重置為Base,當(dāng)網(wǎng)卡設(shè)備發(fā)現(xiàn)Head等于Tail的時(shí)候,表示當(dāng)前環(huán)的所有描述符都已經(jīng)被填充,說明網(wǎng)卡接收速度快于驅(qū)動(dòng)處理數(shù)據(jù)的速度,需要等待驅(qū)動(dòng)處理數(shù)據(jù)并提供新的描述符。適配需要結(jié)合處理器以及網(wǎng)卡驅(qū)動(dòng)實(shí)現(xiàn)發(fā)送和接收環(huán)的定制操作。
顯卡是顯示設(shè)備,為計(jì)算機(jī)提供圖形渲染與圖形顯示的功能。顯卡一般由GPU、顯示控制器和顯示接口等幾部分組成。目前主流的顯卡主要有兩家廠商,ATI的A系列顯卡和英偉達(dá)的N系列顯卡,而國產(chǎn)化的顯卡在圖形加速處理能力以及產(chǎn)品成熟度上跟主流商用顯卡存在一定差距,急需解決國產(chǎn)化顯卡在圖形加速處理方面不足的問題。
早期的3D加速處理,渲染緩沖模塊由一個(gè)屏幕前緩沖和一個(gè)屏幕后緩沖組成,所有的客戶端和服務(wù)器必須共享這個(gè)單一的緩沖區(qū),應(yīng)用程序?qū)⒅苯愉秩镜竭@個(gè)屏幕后緩沖里,然后通過等待垂直同步信號(hào)的到來再交換到屏幕前緩沖中,這種機(jī)制下在下一次渲染時(shí)需要等待當(dāng)前渲染緩沖的釋放,會(huì)帶來阻塞開銷,同時(shí)往返等待服務(wù)器發(fā)送渲染緩沖區(qū)的過程也會(huì)帶來性能損失。
隨著單位幀內(nèi)渲染場(chǎng)景的復(fù)雜度增加,對(duì)渲染緩沖區(qū)的需求加大,現(xiàn)階段3D處理提出了一種稱為動(dòng)態(tài)多緩沖區(qū)的機(jī)制,這種機(jī)制使得每一個(gè)客戶端都使用自己私有的后緩沖,而不是使用單個(gè)共享的后緩沖??蛻舳送ㄟ^這個(gè)私有的后緩沖關(guān)聯(lián)自己的深度緩沖、模板緩沖、顏色緩沖,最后將渲染內(nèi)容拷貝到屏幕。
該機(jī)制重新定義了一個(gè)與當(dāng)前應(yīng)用客戶端關(guān)聯(lián)的緩沖區(qū)池,當(dāng)前應(yīng)用需要緩沖區(qū)進(jìn)行渲染時(shí)就會(huì)在該緩沖區(qū)池中獲取一個(gè)新的緩存,通過輪詢?cè)摼彌_區(qū)池中的每一個(gè)緩存,找到一個(gè)空閑的緩沖區(qū)。
動(dòng)態(tài)多緩沖區(qū)機(jī)制的實(shí)現(xiàn)由原來一個(gè)緩沖增加到現(xiàn)在的一個(gè)緩沖池。一個(gè)渲染客戶端可以擁有一個(gè)或多個(gè)緩沖區(qū),這些緩沖區(qū)的生命周期就是當(dāng)前渲染上下文的生命周期。一旦當(dāng)前渲染上下文銷毀后,該緩沖池中的每一個(gè)緩存將被釋放。
合理分配緩沖區(qū)池中緩存的數(shù)量,盡量避免3D引擎主動(dòng)向服務(wù)器端輪詢消息事件,有效控制往返等待消息事件的時(shí)間,使得渲染過程不會(huì)因?yàn)樯暾?qǐng)緩存的時(shí)間開銷而增大渲染周期,給圖形渲染帶來性能損失。經(jīng)過不同場(chǎng)景下對(duì)圖形性能的測(cè)試發(fā)現(xiàn),緩沖池中的緩存數(shù)量保持在2~3個(gè)為最佳。
存儲(chǔ)設(shè)備是指存儲(chǔ)控制器,為計(jì)算機(jī)提供訪問外存的控制設(shè)備。存儲(chǔ)包括許多不同的種類,SATA(Serial Advanced Technology Attachment)控制器用于擴(kuò)展SATA磁盤,RAID(Redundant Array of Independent Disk)控制器用來搭建RAID,光纖控制器用來擴(kuò)展ISCSI(Internet Small Computer System Interface)磁盤陣列等。存儲(chǔ)設(shè)備驅(qū)動(dòng)位于IO棧的底層,其上層是通用塊設(shè)備層,下層就是具體的存儲(chǔ)設(shè)備。存儲(chǔ)設(shè)備驅(qū)動(dòng)接收來自通用塊設(shè)備層的IO請(qǐng)求,根據(jù)IO請(qǐng)求的內(nèi)容和方向,發(fā)送數(shù)據(jù)給磁盤或從磁盤讀取數(shù)據(jù)傳遞給上層。
SCSI實(shí)現(xiàn)了一種客戶機(jī)/服務(wù)器風(fēng)格的通信架構(gòu)。發(fā)起者向目標(biāo)設(shè)備發(fā)送命令請(qǐng)求,該目標(biāo)處理此請(qǐng)求并向發(fā)起者返回響應(yīng)。發(fā)起者可以是托管計(jì)算機(jī)中的一個(gè)SCSI設(shè)備,而SCSI目標(biāo)則可以是一個(gè)磁盤、光盤和磁帶設(shè)備或特殊設(shè)備(比如箱體設(shè)備)。
目前,國產(chǎn)平臺(tái)選用的SATA控制器對(duì)命令的支持程度是有局限性的,有一些SCSI命令無法被硬件所識(shí)別并響應(yīng),特別是針對(duì)光驅(qū)的一些命令,如讀取光盤信息等,這就導(dǎo)致了刻錄光盤時(shí)無法得到空光盤的信息,進(jìn)而無法刻錄等一系列問題。因此,存儲(chǔ)設(shè)備適配重點(diǎn)解決SATA控制器對(duì)SCSI命令無法被硬件識(shí)別的問題。為此,首先找到無法被識(shí)別的SCSI命令,并根據(jù)SCSI命令手冊(cè)找到這些命令的作用。然后,把無法識(shí)別的命令在驅(qū)動(dòng)命令服務(wù)層中進(jìn)行截流改造,如圖4所示,讓硬件可以正常返回。
圖4 系統(tǒng)命令服務(wù)邏輯框架
國產(chǎn)平臺(tái)主要采用DS1339型號(hào)的RTC芯片[16],掛載在I2C0總線下,其作用是為操作系統(tǒng)提供可靠的時(shí)間,當(dāng)系統(tǒng)處于關(guān)機(jī)的情況下,RTC記錄操作系統(tǒng)時(shí)間,并可在電池供電情況下繼續(xù)正常工作,當(dāng)系統(tǒng)正常啟動(dòng)后,系統(tǒng)可從RTC讀取時(shí)間信息,來確保關(guān)機(jī)到開機(jī)后時(shí)間運(yùn)行連續(xù)性。
為了實(shí)現(xiàn)系統(tǒng)對(duì)RTC時(shí)間的讀寫操作,需要構(gòu)建基于DS1339芯片的RTC驅(qū)動(dòng)模型,并且實(shí)現(xiàn)對(duì)RTC接口的封裝以及文件系統(tǒng)下設(shè)備節(jié)點(diǎn)的創(chuàng)建。用戶可以通過操作系統(tǒng)中的設(shè)備節(jié)點(diǎn)來實(shí)現(xiàn)讀寫RTC時(shí)間,具體驅(qū)動(dòng)設(shè)計(jì)框架如圖5所示。
圖5 RTC驅(qū)動(dòng)設(shè)計(jì)框架
主要工作針對(duì)圖5中的內(nèi)核空間部分展開。首先,進(jìn)行設(shè)備驅(qū)動(dòng)的注冊(cè)和初始化工作,包括根據(jù)數(shù)據(jù)手冊(cè)對(duì)DS1339芯片寄存器的初始化;其次,創(chuàng)建設(shè)備文件節(jié)點(diǎn),通過class封裝函數(shù)分別在文件系統(tǒng)下創(chuàng)建sys文件節(jié)點(diǎn),proc文件節(jié)點(diǎn),dev設(shè)備節(jié)點(diǎn);最后,針對(duì)設(shè)備文件節(jié)點(diǎn)的操作函數(shù)接口封裝,讓用戶通過操作相應(yīng)的設(shè)備文件節(jié)點(diǎn)就可以完成對(duì)RTC的讀寫。
由于每次將時(shí)間寫入RTC芯片的過程中會(huì)產(chǎn)生一個(gè)時(shí)間延遲漂移,根據(jù)各芯片特性不同漂移系數(shù)會(huì)有差別,這是一個(gè)隱性問題,比較難以發(fā)現(xiàn)。在操作系統(tǒng)的關(guān)機(jī)過程中,會(huì)有一次將系統(tǒng)時(shí)間寫入RTC的操作,在系統(tǒng)開機(jī)加電時(shí)再將RTC時(shí)間讀出,寫入系統(tǒng)時(shí)間。故而在重啟一定次數(shù)后,系統(tǒng)時(shí)間將會(huì)產(chǎn)生比較大的誤差,原因是漂移延遲進(jìn)行了累加。解決辦法是在寫入RTC過程中加上該芯片的漂移系數(shù)。
適配完成的RTC驅(qū)動(dòng),可以通過date命令設(shè)置當(dāng)前系統(tǒng)時(shí)間,通過命令hwclock -w將系統(tǒng)時(shí)間寫入RTC芯片,通過命令hwclock -r讀取當(dāng)前RTC時(shí)間,通過命令hwclock -s將RTC時(shí)間覆蓋系統(tǒng)時(shí)間,觀察是否正確。
為了對(duì)上述適配方案進(jìn)行驗(yàn)證,采用銀河麒麟操作系統(tǒng)在鯤鵬服務(wù)器上進(jìn)行,其測(cè)試驗(yàn)證平臺(tái)的軟硬件配置如表1所示。
表1 測(cè)試驗(yàn)證環(huán)境配置
測(cè)試驗(yàn)證的內(nèi)容主要針對(duì)麒麟操作系統(tǒng)通過上面的適配方案在鯤鵬服務(wù)器上適配后,其固件、處理器、外設(shè)等是否適配成功,即相關(guān)的固件、處理器、外設(shè)是否能夠正常使用。
測(cè)試方法主要是輸入與適配部件相關(guān)的命令,如果能夠正常查看并使用相關(guān)部件,可以認(rèn)為適配成功并能正常使用,相關(guān)測(cè)試內(nèi)容及結(jié)果如表2所示。
表2 適配測(cè)試及結(jié)果
同時(shí),通過表3所示的48小時(shí)穩(wěn)定性測(cè)試,來檢驗(yàn)適配后的服務(wù)器是否能穩(wěn)定運(yùn)行。
表3 穩(wěn)定性測(cè)試結(jié)果
測(cè)試驗(yàn)證結(jié)果表明,銀河麒麟服務(wù)器操作系統(tǒng)V10在TaiShan200-2280v2服務(wù)器上適配成功,能滿足正常使用需求。
建設(shè)國產(chǎn)計(jì)算平臺(tái)是信創(chuàng)建設(shè)的基礎(chǔ),是實(shí)現(xiàn)國家關(guān)鍵領(lǐng)域國產(chǎn)化替代的關(guān)鍵環(huán)節(jié),它首先需要解決國產(chǎn)操作系統(tǒng)在國產(chǎn)服務(wù)器上的適配。針對(duì)銀河麒麟在國產(chǎn)ARM服務(wù)器上的適配問題,該文從固件、處理器、網(wǎng)卡、顯卡、外部存儲(chǔ)、時(shí)鐘等方面詳細(xì)闡述,測(cè)試驗(yàn)證結(jié)果表明,該適配方案能夠很好地滿足國產(chǎn)操作系統(tǒng)對(duì)國產(chǎn)ARM服務(wù)器的適配。
下一步將基于國產(chǎn)計(jì)算平臺(tái)建設(shè)基于AL平臺(tái)的國產(chǎn)計(jì)算生態(tài),重點(diǎn)在數(shù)據(jù)庫、中間件、關(guān)鍵行業(yè)應(yīng)用軟件等方面進(jìn)行遷移適配。針對(duì)國產(chǎn)昇騰AI芯片,下一步也將做相應(yīng)的適配,滿足國內(nèi)日益增長(zhǎng)的人工智能計(jì)算需求。通過一系列的數(shù)據(jù)庫、中間件、應(yīng)用軟件適配,希望豐富壯大國產(chǎn)計(jì)算生態(tài),有力解決當(dāng)前關(guān)鍵技術(shù)受制于人的被動(dòng)局面。