異想天開!沒有CPU的操作系統(tǒng)
CPU的設(shè)計(jì)目的很單一,對(duì)存儲(chǔ)的內(nèi)存執(zhí)行邏輯操作。協(xié)處理器(如IO通道處理器、中斷控制器、定位點(diǎn)處理器)被添加到系統(tǒng)中,以提供CPU沒有的功能,因?yàn)樗鼈兛梢愿?、更有效地?zhí)行某些特定的任務(wù)。它們通過允許CPU專注于應(yīng)用程序邏輯和一般的系統(tǒng)功能來提高系統(tǒng)性能,而更簡單的協(xié)同處理器則負(fù)責(zé)處理普通的任務(wù)。
1. 操作系統(tǒng)可以沒有CPU嗎?
對(duì)于高性能的應(yīng)用程序而言,情況是完全相反的??删幊淘O(shè)備負(fù)責(zé)應(yīng)用程序邏輯,而CPU只需要在這些任務(wù)中支持它們。眾所周知,比起在通用CPU上運(yùn)行的軟件,應(yīng)用程序?qū)S玫挠布梢詧?zhí)行更多的任務(wù)。加速器為許多應(yīng)用程序,如圖像識(shí)別、計(jì)算機(jī)視覺,關(guān)鍵值存儲(chǔ),數(shù)據(jù)倉庫,大數(shù)據(jù),深度學(xué)習(xí),神經(jīng)網(wǎng)絡(luò)等,通常用于降低整體系統(tǒng)成本并提高性能超出通用指令集的能力。
在過去,只有程序中計(jì)算最密集的部分被添加到加速器上。最近,添加整個(gè)應(yīng)用程序變得越來越普遍,比如SSD、GPU和FPGA等加速器,而CPU只需要用于初始設(shè)置和錯(cuò)誤處理。我們相信系統(tǒng)已經(jīng)發(fā)展到CPU是一個(gè)可以完全刪除的附件
額外的加速器功能似乎是一個(gè)可行的替代方案。為了提高性能,已經(jīng)對(duì)基本指令集進(jìn)行了擴(kuò)展,以對(duì)通用CPU提供類似加速器的能力,如矢量指令和加密。芯片現(xiàn)在正被用于進(jìn)一步提高CPU的密度和降低制造成本。這些額外的功能使已經(jīng)很復(fù)雜的CPU驗(yàn)證更加復(fù)雜化,需要更多的硅面積,這增加了CPU的基本成本和能源消耗,而這些功能可能從未使用過。此外,發(fā)布CPU的開發(fā)周期可能需要很多年時(shí)間,這意味著現(xiàn)有的系統(tǒng)不會(huì)容易升級(jí)或更改。CPU設(shè)計(jì)的通用方法已經(jīng)開始達(dá)到一些困難的限制。
設(shè)計(jì)用于解決特殊問題的硬件組件正在變得普遍,它們可以做更多的任務(wù),而且通常比通用CPU要快得多。從有效性來看,系統(tǒng)管理類似:一旦關(guān)鍵的處理任務(wù)被加載到其他硬件上,許多cpu就過于強(qiáng)大和昂貴。
以加速器為中心的集中控制系統(tǒng),CPU只處理初始化、協(xié)調(diào)和錯(cuò)誤處理等普通任務(wù)。分散的控制打破了對(duì)昂貴的通用CPU依賴,并可以提高性能??刂迫蝿?wù)可以歸結(jié)為簡單的操作,可以處理在其他硬件上,與加速器和可編程設(shè)備的合作。
操作系統(tǒng)提供了三個(gè)關(guān)鍵功能:虛擬化,其中包括多路復(fù)用和地址轉(zhuǎn)換、隔離和資源管理。這些功能從集中式操作系統(tǒng)內(nèi)核轉(zhuǎn)移到一個(gè)減少由自管理的硬件組成的傳統(tǒng)模型。缺少的組件是設(shè)備相互協(xié)作所需的系統(tǒng)管理總線。正是這個(gè)總線來執(zhí)行對(duì)安全敏感的配置,并負(fù)責(zé)任務(wù)生命周期管理(初始化、設(shè)置、拆卸)。引入系統(tǒng)管理總線作為一個(gè)專門的控制平面,結(jié)合自管理設(shè)備為一個(gè)更簡單的數(shù)據(jù)平面,使從系統(tǒng)中完全刪除CPU。操作系統(tǒng)仍然是控制平面,但不再運(yùn)行在CPU上。
2. 打破對(duì)CPU的依賴
如果沒有了CPU,計(jì)算機(jī)系統(tǒng)中的設(shè)備應(yīng)該具有什么特性呢?
(1)設(shè)備必須是自管理的,設(shè)備必須管理它自己的內(nèi)部狀態(tài)。它必須公開它所提供的服務(wù),并為服務(wù)的每個(gè)實(shí)例提供一個(gè)單獨(dú)的上下文(多路復(fù)用),以確保應(yīng)用程序之間的隔離。
(2)設(shè)備必須自主通信,設(shè)備必須能夠發(fā)現(xiàn)它所需要的服務(wù)并請(qǐng)求它們,而不依賴于外部實(shí)體來控制它。
每個(gè)操作系統(tǒng)的功能——虛擬化(包括多路復(fù)用和地址轉(zhuǎn)換)、隔離和資源管理,都是創(chuàng)建一個(gè)安全和可擴(kuò)展的系統(tǒng)所必不可少的。打破對(duì)這些功能的責(zé)任,并將它們分配到設(shè)備和總線之間。因此,該系統(tǒng)由系統(tǒng)總線協(xié)調(diào)的自管理設(shè)備組成。下面的說明解釋了如何在硬件組件之間劃分操作系統(tǒng)的職責(zé)。
2.1 設(shè)備的自我管理
一個(gè)設(shè)備負(fù)責(zé)運(yùn)行應(yīng)用程序邏輯,并使用其他設(shè)備可能使用的一個(gè)或多個(gè)資源。一個(gè)設(shè)備可以使用任何資源類型的組合(物理內(nèi)存、FPGA塊、GPU核心、存儲(chǔ)空間等),將每個(gè)服務(wù)都作為一個(gè)服務(wù)來公開。設(shè)備還可以提供系統(tǒng)維護(hù)的管理服務(wù)。例如,在內(nèi)部存儲(chǔ)其應(yīng)用程序的設(shè)備必須公開一個(gè)可用于上傳新的二進(jìn)制鏡像的加載服務(wù)。自我管理,意味著設(shè)備必須能夠代表系統(tǒng)中的設(shè)備管理其資源的分配,并以標(biāo)準(zhǔn)化的方式公開它們。要做到這一點(diǎn),每個(gè)設(shè)備必須實(shí)現(xiàn)邏輯來將其資源復(fù)用到多個(gè)實(shí)例中,提供實(shí)例之間的隔離并處理錯(cuò)誤條件。
設(shè)備很可能會(huì)支持多個(gè)客戶端或與任何特定服務(wù)的連接。例如,公開一個(gè)系統(tǒng)的智能SSD可以允許多個(gè)i由多個(gè)應(yīng)用程序同時(shí)打開。在這種情況下,設(shè)備必須實(shí)現(xiàn)一種隔離機(jī)制,以防止實(shí)例之間的數(shù)據(jù)泄漏。設(shè)備可以在硬件或軟件中實(shí)現(xiàn)對(duì)其資源的隔離。硬件中的細(xì)粒度資源分配已經(jīng)在RDMA控制器及網(wǎng)卡等設(shè)備中實(shí)現(xiàn),在這些設(shè)備中,硬件被劃分為多個(gè)獨(dú)立公開和控制的實(shí)例。
軟件共享的方式在設(shè)備包含一個(gè)嵌入式CPU中很常見。無論實(shí)現(xiàn)方式如何,該設(shè)備都必須能夠以一種系統(tǒng)和標(biāo)準(zhǔn)的方式公開其功能,以便希望使用該功能的其他設(shè)備易于使用。
VIRTIO是用于從虛擬機(jī)管理虛擬設(shè)備的標(biāo)準(zhǔn)化協(xié)議。VIRTIO可以為從自我管理的設(shè)備中公開資源提供一個(gè)理想的接口。與其他協(xié)議類似,它是基于一組內(nèi)存描述符的單向隊(duì)列的。硬件供應(yīng)商已經(jīng)開始生產(chǎn)符合VIRTIO標(biāo)準(zhǔn)的真正設(shè)備了,其主要優(yōu)點(diǎn)是,許多與VIRTIO兼容的設(shè)備都可以使用一個(gè)驅(qū)動(dòng)程序進(jìn)行操作。以標(biāo)準(zhǔn)和一致的方式暴露所有資源和服務(wù),簡化了使用這些設(shè)備所需的邏輯。VIRTIO協(xié)議能夠跨不同級(jí)別的抽象(nic、磁盤、控制臺(tái)、套接字等)描述廣泛的設(shè)備。所有這些都以一種一致的方式運(yùn)作。
2.2 系統(tǒng)總線
系統(tǒng)總線專門用于設(shè)備間的通信,系統(tǒng)總線(如圖1所示)作為控制平面,使設(shè)備能夠相互控制,但不攜帶數(shù)據(jù)。系統(tǒng)總線只提供了一種用于設(shè)備通信的機(jī)制,并且不包含任何策略,沒有實(shí)體看到整個(gè)系統(tǒng),也沒有全局狀態(tài)復(fù)制。該總線使設(shè)備能夠以一種標(biāo)準(zhǔn)的方式通信其資源需求,并使設(shè)備能夠廣播它們的能力,以便其他設(shè)備可以發(fā)現(xiàn)它們。這是通過設(shè)備在總線上發(fā)送消息以請(qǐng)求諸如內(nèi)存分配或打開文件之類的服務(wù)來實(shí)現(xiàn)的,作為一個(gè)特權(quán)設(shè)備運(yùn)行,是維護(hù)虛擬化的機(jī)制。
2.2.1 系統(tǒng)初始化
當(dāng)系統(tǒng)啟動(dòng)時(shí),系統(tǒng)中的所有硬件設(shè)備都會(huì)經(jīng)歷一段初始化期間,在此期間它們可以執(zhí)行自檢。當(dāng)設(shè)備確定它運(yùn)行正常時(shí),它將向系統(tǒng)總線發(fā)送一條消息,系統(tǒng)總線將記錄它是活動(dòng)的。之后,該設(shè)備將加載其應(yīng)用程序,其中可能有很多。應(yīng)用程序可以需要由其他設(shè)備提供的一個(gè)或多個(gè)服務(wù)。例如,網(wǎng)卡可能需要讀取存儲(chǔ)在SSD上的文件中的數(shù)據(jù)。在設(shè)備可以使用一個(gè)資源之前,它必須首先發(fā)現(xiàn)系統(tǒng)中哪些設(shè)備可以提供對(duì)該資源的訪問。設(shè)備發(fā)現(xiàn)機(jī)制類似于即插即用套件或USB設(shè)備附件消息中的簡單服務(wù)發(fā)現(xiàn)協(xié)議。
2.2.2 地址翻譯
一個(gè)應(yīng)用程序可以分布在許多設(shè)備上,但唯一標(biāo)識(shí)它的是它的虛擬地址空間。與在當(dāng)前部署的系統(tǒng)中一樣,地址轉(zhuǎn)換仍然是共享內(nèi)存中數(shù)據(jù)隔離的基石。從安全的角度來看,設(shè)備負(fù)責(zé)自己的映射不是一個(gè)好主意,因?yàn)槭軗p的設(shè)備可能會(huì)獲得它未被授權(quán)的資源。因此,特權(quán)系統(tǒng)總線有責(zé)任通過更新頁表來創(chuàng)建虛擬-物理映射。同樣,也不能允許資源控制器直接訪問其他設(shè)備的IO MMU,因?yàn)檫@將導(dǎo)致安全漏洞。相反,系統(tǒng)總線只有在特定資源的控制器指示設(shè)備時(shí),系統(tǒng)總線更新設(shè)備的頁表。
2.2.3 內(nèi)存管理
虛擬內(nèi)存管理對(duì)于在同一應(yīng)用程序的不同組件之間共享內(nèi)存是必要的,同時(shí)保護(hù)該內(nèi)存免受其他應(yīng)用程序的影響。這在很大程度上是通過IOMMU來完成的,它可以從每個(gè)設(shè)備中訪問物理內(nèi)存,就像今天通常要做的那樣。在分配內(nèi)存時(shí),系統(tǒng)總線提供了更新虛擬到物理映射的機(jī)制,但不提供策略。映射由內(nèi)存控制器設(shè)置,內(nèi)存控制器在內(nèi)部為每個(gè)應(yīng)用程序管理自己的分配表。這些映射被發(fā)送到系統(tǒng)總線,系統(tǒng)總線為請(qǐng)求設(shè)備的IO MMU編寫適當(dāng)?shù)捻摫怼?/p>
2.2.4 協(xié)議支持
通過系統(tǒng)總線進(jìn)行協(xié)調(diào)的設(shè)備將被要求遵守總線協(xié)議。這與遵守現(xiàn)有的總線協(xié)議沒什么不同,例如PCIe。每個(gè)設(shè)備都需要符合最低限度的行為來與其他設(shè)備進(jìn)行互操作和共享服務(wù)。操作系統(tǒng)通過控制器特殊的接口與設(shè)備進(jìn)行通信,如USB控制器。設(shè)備和故障控制器已經(jīng)通過設(shè)備上的硬件和軟硬件參與了這些控制協(xié)議。這種通信將被更高層次的協(xié)議所取代,以直接從一個(gè)設(shè)備請(qǐng)求服務(wù)。系統(tǒng)總線協(xié)議不會(huì)比前面提到的許多現(xiàn)有控制協(xié)議有更復(fù)雜的計(jì)算量或者更復(fù)雜的邏輯。因此,目前存在的大多數(shù)設(shè)備和控制器將不需要對(duì)其硬件需求進(jìn)行重大更改,以支持系統(tǒng)總線。
3. 數(shù)據(jù)平面
接下來,可能需要互連的兩個(gè)不同的功能:內(nèi)存訪問數(shù)據(jù)平面和設(shè)備連接控制平面。從系統(tǒng)設(shè)計(jì)和性能的角度來看,這些功能應(yīng)該是分開的。在傳統(tǒng)的系統(tǒng)中,CPU負(fù)責(zé)在初始化過程中設(shè)置地址空間。由于我們不能依賴于CPU,所以在設(shè)置虛擬地址空間之前,必須有一個(gè)獨(dú)立的尋址設(shè)備的方法。PCIe通過通過物理地址(總線、設(shè)備、功能)尋址設(shè)備,通過標(biāo)準(zhǔn)的節(jié)點(diǎn)空間和BAR區(qū)域提供內(nèi)存訪問和一定程度的設(shè)備協(xié)調(diào),部分地實(shí)現(xiàn)了這兩個(gè)功能。如果大多數(shù)設(shè)備將支持多個(gè)虛擬地址空間(每個(gè)應(yīng)用程序一個(gè)),那么他們必須能夠選擇每個(gè)內(nèi)存操作所使用的虛擬地址空間。內(nèi)存總線必須具有高吞吐量和低延遲,而系統(tǒng)管理總線則不需要。
另一方面,系統(tǒng)管理總線必須能夠處理消息,這樣它才能代表應(yīng)用程序更新管理表。雖然設(shè)計(jì)一個(gè)包含這兩種功能(高速內(nèi)存訪問和消息解碼)的總線并不是不可能的,但我們沒有看到一個(gè)令人信服的理由來組合它們。有許多現(xiàn)有的系統(tǒng)互連似乎是很好的候選者,如PCIe、CCIX、openCAPI 和CXL。
3.1 通知
通知是一種讓設(shè)備表示需要注意的方法。這可能是由正常操作引起的,例如通知一些請(qǐng)求的數(shù)據(jù)已經(jīng)準(zhǔn)備好了。它也可以用來表示一個(gè)錯(cuò)誤的條件,例如作為由于無效的虛擬地址而導(dǎo)致的DMA事務(wù)失敗。對(duì)CPU的通知通常使用中斷發(fā)送,但也可以通過互連作為內(nèi)存寫入到一個(gè)特殊地址的方式發(fā)送。這類似于用于實(shí)現(xiàn)PCI的MSI(消息信號(hào)中斷)的方法。
3.2 緩存一致性
在沒有CPU的系統(tǒng)中,緩存一致性具有不同的意義。高速緩存的目的是通過避免對(duì)主存的昂貴訪問來提高CPU的性能。將緩存視為屬于內(nèi)存層次結(jié)構(gòu)是很方便的,這掩蓋了大多數(shù)緩存駐留在同一個(gè)物理包中的事實(shí)。因此,對(duì)于沒有CPU的系統(tǒng),必須仔細(xì)考慮緩存和緩存一致性的位置和目的。由于緩存是設(shè)備的私有的,如果設(shè)備只使用內(nèi)存與其他設(shè)備共享數(shù)據(jù),緩存將不會(huì)提供太多好處。設(shè)備和應(yīng)用程序肯定會(huì)繼續(xù)使用大量的RAM,并將大量利用設(shè)備中的緩存層次結(jié)構(gòu)(例如GPU)。然而,緩存一致性只在依賴于不同處理單元之間的隱式內(nèi)存共享的編程模型中。許多分布式系統(tǒng)都依賴于顯式的消息傳遞,并完全丟棄一致性。第2節(jié)中提到的大多數(shù)互連都支持緩存一致性消息,但不需要它們。簡而言之,每個(gè)設(shè)備都可以根據(jù)其硬件能力和應(yīng)用程序的需要來選擇是否參與系統(tǒng)的高速緩存一致性。
4. 無CPU 操作系統(tǒng)的暢想
某些智能網(wǎng)卡和智能ssd可以相對(duì)容易地通過監(jiān)控軟件進(jìn)行增強(qiáng),沒有的硬件組件是系統(tǒng)總線。為了完成這個(gè)無CPU 操作系統(tǒng),需要一個(gè)獨(dú)立的內(nèi)存控制器和互連控制器,類似于英特爾的內(nèi)存控制器Hub。
暢想一下,可以在CPU上運(yùn)行的軟件中模擬系統(tǒng)總線的操作。每個(gè)自我管理的設(shè)備都會(huì)像往常一樣,從系統(tǒng)總線發(fā)送和接收消息,但這些消息將通過共享內(nèi)存通過隧道傳輸?shù)杰浖M器。該模擬器會(huì)攔截任何內(nèi)存分配消息,并相應(yīng)地重新編程IO MMU。模擬器還需要扮演任何還無法嵌入到設(shè)備中的資源監(jiān)視器的角色:例如,內(nèi)存控制器。
構(gòu)建一個(gè)模擬的無CPU系統(tǒng),將允許回答關(guān)于這類系統(tǒng)的可行性、安全性和性能問題。
為了嘗試描述系統(tǒng)如何工作,描述了一個(gè)假設(shè)的鍵值存儲(chǔ)應(yīng)用程序?qū)⑷绾卧跊]有CPU的系統(tǒng)上工作。數(shù)據(jù)(鍵和值)存儲(chǔ)在一個(gè)由智能SSD托管的文件中,而操作(獲取、插入、更新等),在智能網(wǎng)卡中進(jìn)行處理。網(wǎng)卡通過監(jiān)聽套接字或RDMA,通過網(wǎng)絡(luò)向其他機(jī)器公開一個(gè)接口連接。
圖2顯示了初始化序列,在NIC中運(yùn)行的KVS應(yīng)用程序連接到SSD以訪問其數(shù)據(jù)文件。網(wǎng)卡通過系統(tǒng)總線發(fā)送一條廣播消息(包含文件名),以發(fā)現(xiàn)是哪個(gè)存儲(chǔ)服務(wù)擁有該文件。SSD響應(yīng)說它可以為該文件訪問服務(wù)。網(wǎng)卡發(fā)送請(qǐng)求以打開服務(wù)(包括授權(quán)令牌)以訪問該文件。SSD響應(yīng)了連接詳細(xì)信息和所需的共享內(nèi)存量。網(wǎng)卡向內(nèi)存控制器(包括虛擬地址)發(fā)送一個(gè)請(qǐng)求,要求其分配共享內(nèi)存。在收到來自內(nèi)存的響應(yīng)后,系統(tǒng)總線對(duì)屬于網(wǎng)卡的IO MMU進(jìn)行編程,允許其訪問指定的虛擬地址的共享內(nèi)存。網(wǎng)卡向系統(tǒng)總線發(fā)送另一條消息,以授予SSD對(duì)共享內(nèi)存的訪問權(quán)限。然后,網(wǎng)卡可以通過使用虛擬地址編程SSD中的VIRTIO隊(duì)列來建立連接。
IO MMU通過將設(shè)備訪問的所有內(nèi)存訪問轉(zhuǎn)換為虛擬內(nèi)存空間來保護(hù)內(nèi)存。要?jiǎng)?chuàng)建共享內(nèi)存區(qū)域,必須為IO MMU進(jìn)行編程,以便將兩個(gè)設(shè)備使用的虛擬地址映射到相同的物理地址。在帶有CPU的系統(tǒng)中,操作系統(tǒng)內(nèi)核負(fù)責(zé)內(nèi)存管理,因?yàn)樗總€(gè)進(jìn)程的地址空間的映射,并且能夠執(zhí)行特權(quán)任務(wù)。一個(gè)應(yīng)用程序?qū)⒄{(diào)用一個(gè)系統(tǒng)調(diào)用上為內(nèi)核創(chuàng)建一個(gè)共享的內(nèi)存映射。
在沒有CPU的情況下,內(nèi)存控制器負(fù)責(zé)跟蹤每個(gè)設(shè)備的物理內(nèi)存分配,可以更新映射的系統(tǒng)總線。設(shè)備發(fā)送一條控制消息,而不是系統(tǒng)調(diào)用。一旦該操作被內(nèi)存控制器授權(quán),系統(tǒng)總線就會(huì)執(zhí)行該操作。對(duì)內(nèi)存區(qū)域的訪問可以由擁有該區(qū)域的設(shè)備授予給另一個(gè)設(shè)備,但必須首先由內(nèi)存控制器授權(quán)。
5. 暢想中的問題與挑戰(zhàn)
操作系統(tǒng)是非常復(fù)雜的系統(tǒng),無CPU 的操作系統(tǒng)也不例外。
5.1 訪問控制
如果需要細(xì)粒度的訪問控制,則訪問控制服務(wù)可以由智能存儲(chǔ)控制器提供,例如智能SSD。這將大致相當(dāng)于在Linux上的“登錄”程序和“密碼”文件。對(duì)單個(gè)文件的訪問控制由系統(tǒng)服務(wù)在提供該服務(wù)的設(shè)備上實(shí)現(xiàn)。希望打開文件的用戶將通過控制臺(tái)應(yīng)用程序輸入命令,該應(yīng)用程序?qū)⒃趶奈募到y(tǒng)服務(wù)請(qǐng)求文件時(shí)使用該用戶的標(biāo)識(shí)符。類似地,加載服務(wù)(將微代碼、加密軟件或應(yīng)用程序代碼加載到設(shè)備)也可以在替換敏感數(shù)據(jù)之前使用相同的身份驗(yàn)證服務(wù)。
5.2 錯(cuò)誤處理
將應(yīng)用程序加載到各種加速器之后,如何解決處理編程中的錯(cuò)誤呢?
現(xiàn)有系統(tǒng)依賴于CPU和操作系統(tǒng)來處理各種不指定的錯(cuò)誤。對(duì)于無CPU 的操作系統(tǒng),必須更精確地確定將發(fā)生的錯(cuò)誤類型,以及如何處理它們??苫謴?fù)的錯(cuò)誤是指那些不需要重置設(shè)備的錯(cuò)誤。當(dāng)轉(zhuǎn)換硬件無法綁定映射時(shí),或者當(dāng)試圖訪問沒有正確權(quán)限的內(nèi)存時(shí),就會(huì)導(dǎo)致頁錯(cuò)誤。在一個(gè)沒有CPU的操作系統(tǒng)中,IO MMU會(huì)將任何故障發(fā)送到其附加的設(shè)備上。每個(gè)設(shè)備都將負(fù)責(zé)適當(dāng)?shù)靥幚碜约旱墓收?,重置服?wù)或停止應(yīng)用程序。故障模型并不比在具有集中式CPU的系統(tǒng)中更糟糕。主要的不同是錯(cuò)誤處理的責(zé)任已經(jīng)轉(zhuǎn)移到設(shè)備本身,而不是一個(gè)外部實(shí)體。
類似地,如果資源出現(xiàn)致命錯(cuò)誤,則該設(shè)備將負(fù)責(zé)處理該錯(cuò)誤本身。它必須向使用該資源的任何使用者發(fā)送消息,然后重置該資源,應(yīng)用程序的邏輯要負(fù)責(zé)從這個(gè)場景中恢復(fù)。如果整個(gè)設(shè)備發(fā)生故障,則資源總線必須向系統(tǒng)中可能正在使用該故障設(shè)備的資源的所有其他設(shè)備發(fā)送消息??偩€還可以向故障設(shè)備發(fā)送重置信號(hào),試圖重新啟動(dòng)它。
5.3 系統(tǒng)維護(hù)
應(yīng)用程序可以在正常操作期間寫入日志文件。系統(tǒng)操作員可能希望定期查看這些日志,以收集統(tǒng)計(jì)數(shù)據(jù)或調(diào)整一些參數(shù)。這樣的機(jī)器很可能會(huì)被部署為數(shù)據(jù)中心中的服務(wù)器,而不會(huì)有一個(gè)本地控制臺(tái)。如果將許多這樣的系統(tǒng)部署在一個(gè)數(shù)據(jù)中心中,那么遠(yuǎn)程操作將是一個(gè)不錯(cuò)的選擇,因?yàn)橐粋€(gè)遠(yuǎn)程控制臺(tái)可以用于管理許多無CPU的系統(tǒng),可以通過網(wǎng)絡(luò)由另一臺(tái)機(jī)器通過遠(yuǎn)程訪問服務(wù)查看這些日志。用戶身份驗(yàn)證可以通過運(yùn)行在任何設(shè)備上的身份驗(yàn)證服務(wù)來執(zhí)行。
5.4 可編程性
對(duì)于一個(gè)不尋常的操作系統(tǒng)來說,最大的問題可能是如何對(duì)它進(jìn)行編程。需要注意的是,編寫一個(gè)應(yīng)用程序,以在可編程設(shè)備上運(yùn)行,該設(shè)備可以使用來自一個(gè)或多個(gè)其他設(shè)備的服務(wù)。這些應(yīng)用程序是在具有開發(fā)環(huán)境的機(jī)器上開發(fā)的。由于每個(gè)設(shè)備都可以有一個(gè)不同指令集或?qū)崿F(xiàn)語言,因此將需要多個(gè)工具鏈。
然而,在許多情況下,開發(fā)過程將只針對(duì)一個(gè)設(shè)備。以上面的KV-store應(yīng)用程序?yàn)槔?,所有?yīng)用程序邏輯都將被編譯為在smartNIC上運(yùn)行。smartNIC的開發(fā)環(huán)境將包括一個(gè)庫,它封裝了系統(tǒng)總線的功能,并提供服務(wù)發(fā)現(xiàn)、資源分配等功能。這取決于系統(tǒng)中的其他設(shè)備(SSD、內(nèi)存控制器等)能夠以適當(dāng)?shù)姆绞焦_所需的資源。
保護(hù)措施依賴于虛擬內(nèi)存來防止對(duì)另一個(gè)應(yīng)用程序的內(nèi)存做未經(jīng)授權(quán)的訪問。設(shè)備的自身來提供在運(yùn)行在同一設(shè)備上的應(yīng)用程序之間的隔離。在設(shè)計(jì)諸如文件系統(tǒng)等常用服務(wù)時(shí),肯定還會(huì)出現(xiàn)其他安全問題。這與為NFS服務(wù)設(shè)計(jì)安全模型沒什么不同,向遠(yuǎn)程設(shè)備公開了文件的抽象。
6. 小結(jié)
對(duì)更高性能的需求正在推動(dòng)系統(tǒng)設(shè)計(jì)向?qū)iT的硬件方向發(fā)展。單個(gè)設(shè)備正在快速發(fā)展以進(jìn)行自我管理,放松了對(duì)CPU和傳統(tǒng)操作系統(tǒng)的依賴。
無CPU的操作系統(tǒng)僅僅是一個(gè)思想實(shí)驗(yàn),一個(gè)系統(tǒng)中完全刪除CPU。如此劇烈的變化迫使我們以一種新的方式考慮系統(tǒng)設(shè)計(jì),并就如何管理這樣的一個(gè)系統(tǒng)產(chǎn)生影響。然而,如果CPU不再是現(xiàn)有操作系統(tǒng)的中心組件,會(huì)從根本上改變軟件在CPU上的編寫方式嗎?當(dāng)然,實(shí)際上有些問題在CPU上更容易解決。