01
前言
隨著汽車電子的高速發展,電控單元的復雜性越來越高,對芯片的算力要求也迅速提高,于是,例如ARM架構這樣的異構處理器的應用也更為普遍。對于多核異構處理器而言,核間通訊是一項至關重要的特性。核間通訊的性能往往能對整個處理器的性能釋放起到決定性的作用。
本文將以NXP的IPCF為例,并簡單對比一些其他方案,淺析核間通訊的設計與實現。
02
軟件架構
IPCF架構框圖
根據IPCF架構框圖,它基于硬件(NXP硬件平臺),服務于應用(客戶應用程序),由硬件驅動(ipc-hw)、操作系統接口(ipc-os)與功能實現(ipc-shm)這三個子模塊構成。通過這一設計,核間通訊方案可以將算法實現與下層的軟、硬件系統解耦,實現高度的模塊化和可移植性。
03
硬件驅動(ipc-hw)
硬件驅動是架構中的最底層。它與硬件直接相關,負責實現對硬件的操作,例如通知(中斷)和數據(內存)的操作。
在IPCF的架構設計中,硬件驅動全權掌管對硬件的交互,向上則面向操作系統接口與功能實現這兩個子模塊。
代碼實例
在NXP公開的源碼中可以看到,對于不同的硬件平臺,它分別提供了對應的C語言實現,而頭文件保持一致,確保接口的一致性。
粗略閱讀頭文件可以看到,這一模塊主要提供的是對芯片中斷的支持,可以完成注冊、啟用、禁用和觸發中斷等一系列操作。
核間通訊中斷的硬件設計也是一門學問。NXP的S32系列芯片設計了若干個專用的核間通訊中斷(具體數量由芯片型號決定),每個中斷都有自己的一組寄存器以實現導向觸發(Steering),用戶可以通過寄存器配置,靈活設置每一個中斷的發送核與接收核。這樣可以利用有限的資源,實現業務所需的具體核心之間的通訊需求。
04
操作系統接口(ipc-os)
操作系統接口是架構中的中間層,但從整個系統而言,它也可以說是軟件方面的最底層。它負責與操作系統交互,例如掌控程序的執行流程(中斷和任務的調用)。
在IPCF的架構設計中,操作系統接口向下依賴于硬件驅動,向上服務于功能實現。
代碼實例
在NXP公開的源碼中可以看到,對于不同的操作系統,它也分別提供了對應的C語言實現。在A核側可以看到有對uio的支持,而如果拿到M核側的源碼,則可以看到對AUTOSAR、FreeRTOS等多個操作系統的支持。
相比硬件驅動,操作系統的接口明顯更多樣(畢竟硬件都是NXP自家的),但無一例外地都應當實現軟件模塊的各種例程在操作系統中的適當調用。
雖然操作系統林林總總,但這一子模塊需要解決的問題無非是各類例程的調用(初始化、周期任務、中斷任務)和對軟件底層資源的使用(文件讀寫)。
05
功能實現(ipc-shm)
功能實現是架構中的最上層,負責提供對應用程序的軟件接口,并依賴于硬件驅動和操作系統接口來實現通訊的邏輯。相比起更為直白和穩定的軟硬件基礎件,功能實現的自由度更大,可供發揮的空間也更多。針對具體業務設計更高效的功能實現將起到事半功倍的效果。
代碼實例
? ?
在NXP公開的源碼中,這一子模塊以其傳輸介質的形式(shared memory)被命名為shm。它實現了幾種通用的通訊算法,以共享內存與中斷通知的組合,完成消息和數據的傳遞。
和幾乎所有的消息系統一樣,它將消息的訪問方式分為回調與輪詢兩種,以滿足不同時效性要求的場景。
而在數據算法方面,它又設計了兩種形式,其中unmanaged類型是以一段連續的內存區域為消息的內容,發送方可以直接覆蓋數據,因此在例如接收方處理速度較慢的情況下,可能出現丟失數據的結果,但其優點在于發送的消息不會被阻塞,保證信息的實時性。正如其官方建議的那樣,此類數據處理形式適用于例如視頻流傳輸等整塊訪問數據的、新數據優先的場景中。
而managed類型則是一種先入先出式的隊列系統。首先它會將內存區域劃分成固定大小的緩存塊,并根據一張讀寫的索引表,按順序將數據存入緩存塊中,再按順序取出使用。這一層可以當作對存儲器的基本數據隊列處理。為了更好地利用內存空間,它還設計了另一層消息隊列,支持分布不同長度的緩存塊,可以理解為將多個緩存隊列并列起來,但其代價是為了保證所有隊列中消息的有序性,需要另建一張總的索引表來記錄所有消息的讀寫索引。這種方式能夠嚴格保證消息的有序和有效,但可能出現阻塞。
當然,這些現成的通訊算法并不一定能完全滿足業務的需求,也存在許多明顯的局限性,例如自身沒有數據完整性校驗、輪詢方式不支持單條消息的讀取等等,這些都是筆者在實際應用中所發現的,旨在拋磚引玉。到了這些時候,就需要軟件開發者各顯神通,或是加以改進,或是另辟蹊徑,只為不斷提高核間通訊的可用性,以滿足日益繁雜的業務需求。
06
其它方案
Linux RPMsg framework for STM32MP15x
Rpmsg是Linux內核提供的一種通用的通訊方案,在當前的汽車電子領域有相當廣泛的應用。下面是STM32MP15x系列芯片的RPMsg方案的概覽:
從中可以看到,作為一種示范性的通用方案,它與NXP的IPCF也有許多異曲同工之妙。
我們自下而上來看,首先是SoC的硬件層。IPCC是inter-processor communication controller的縮寫,負責的是核間通訊的通知(中斷)收發,向上的mailbox和remote proc則相當于對硬件中斷封裝的驅動,這與NXP IPCF中的ipc-hw是大致對應的。MCUSRAM負責存儲器的管理,其中的收發Vring及對應的緩存實現了消息隊列,向上則聯通Linux內核中的Virtio虛擬輸入輸出總線,最后是rpmsg模塊,這樣的結構也大致與ipc-os和ipc-shm對應。
TI Jacinto的IPC
在TI的Jacinto上也有類似的基于rpmsg的核間通訊方案IPC。從設計上與上述方案都大同小異:Mailbox管理中斷,VRing管理數據,向上通過rpmsg模塊實現消息的收發接口。
07
結語
本文通過實例分析和對比,介紹了核間通訊的總體軟件架構設計與各個子模塊的實現。作為影響多核系統性能的重要一環,核間通訊在如今的汽車電子模塊中對實時性和吞吐量都提出了越來越高的要求,在一些具體業務中,還會對安全性等方面提出額外的需求。這一切也給核間通訊開辟了更多的發展空間,同時為廣大汽車人提供了更廣闊的舞臺。
審核編輯:劉清
-
NXP
+關注
關注
60文章
1283瀏覽量
184627 -
寄存器
+關注
關注
31文章
5357瀏覽量
120682 -
AUTOSAR
+關注
關注
10文章
363瀏覽量
21625 -
多核處理器
+關注
關注
0文章
109瀏覽量
19931 -
FreeRTOS
+關注
關注
12文章
484瀏覽量
62229 -
觸發中斷
+關注
關注
0文章
11瀏覽量
6574
原文標題:淺析核間通訊 —— 以NXP IPCF為例
文章出處:【微信號:阿寶1990,微信公眾號:阿寶1990】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論