一、 引言
支持 FAST 開源架構(gòu)的 OpenBox-S4 平臺(tái)的核心器件采用的是 Xilinx 公司的 ZYNQ 系列芯片的產(chǎn)品,該平臺(tái)目前是 FAST 開源社區(qū)的主要適配平臺(tái),支持所有的 FAST 開源項(xiàng)目,如 SDN、TSN 等。時(shí)間敏感網(wǎng)絡(luò)(TSN:Time Sensitive Networking)是以以太網(wǎng)
為基礎(chǔ)的新一代網(wǎng)絡(luò)標(biāo)準(zhǔn),具有時(shí)間同步、延時(shí)保證等確保實(shí)時(shí)性的功能。
FAST 開源社區(qū)目前已經(jīng)完善了在真實(shí)物理網(wǎng)絡(luò)傳輸環(huán)境下的 TSN 功能適配,湖南新實(shí)也推出了一體化的 TSN 綜合演示方案。隨著我們對(duì) TSN 技術(shù)的不斷深耕,支持 TSN功能、適配 TSN 業(yè)務(wù)軟件的綜合系統(tǒng)應(yīng)用環(huán)境也將逐步推出。
ZYNQ RTOS 顧名思義就是在 ZYNQ 平臺(tái)上運(yùn)行 RTOS(Real Time Operating System,簡稱 RTOS),更準(zhǔn)確的說就是在 OpenBox-S4 上運(yùn)行實(shí)時(shí)操作系統(tǒng),更好的支持 TSN技術(shù)。
二、 RTOS 背景
How fast is fast enough? 實(shí)時(shí)是一種相對(duì)概念。根據(jù)應(yīng)用場(chǎng)景與用戶需求不同,實(shí)時(shí)的響應(yīng)時(shí)間要求不同,其實(shí)現(xiàn)方法也各有差異。支持 ZYNQ 的實(shí)時(shí)解決方案分為如下幾種:
1. SMP 的親和
SMP(對(duì)應(yīng)多處理器)的親和是指將業(yè)務(wù)處理邏輯親近在某些或某個(gè)特定的 CPU核上進(jìn)行處理,減少 CACHE 失效帶來不確定的查表延時(shí)。CPU 的親和包括軟件邏輯的親和與中斷的親和。中斷的親和其實(shí)也是為了讓軟件邏輯親和在指定的核上工作。通過親和的方式可以對(duì)邏輯的性能帶來一定的提升,處理延時(shí)也會(huì)得到一些改善。但親和改善的主要關(guān)鍵在于 CACHE 的失效,故只對(duì)一些數(shù)據(jù) IO 密集形業(yè)務(wù)有改善,延時(shí)的穩(wěn)定性也與數(shù)據(jù)分布相關(guān)。
2. PREEMPT_RT
PREEMPT_RT 是 Linux 內(nèi)核的一個(gè)實(shí)時(shí)補(bǔ)丁。主要目的是為了提高 Linux 的延時(shí)響應(yīng)時(shí)間。補(bǔ)丁代碼需要替換內(nèi)核中成千上萬行的代碼,需要適配不同的支持設(shè)備,而且為了保證實(shí)時(shí),也犧牲了系統(tǒng)整體的吞吐量。由于這些不盡理想的代價(jià)權(quán)衡,至今為止,該補(bǔ)丁仍未融入到 Linux 內(nèi)核的主線版本中來。
3. Enea LWRT
Enea LWRT 是一種商業(yè)解決方案,主要是在用戶空間提供無中斷(上下文切換)的代碼執(zhí)行環(huán)境。整個(gè)系統(tǒng)分為兩部分,一部分為實(shí)時(shí)分區(qū),另一部分為非實(shí)時(shí)分區(qū)。其中實(shí)時(shí)部分既可以使用部分系統(tǒng)屏蔽的的 CPU 核來運(yùn)行,也可以在內(nèi)核中嵌入實(shí)時(shí)模塊來支持。實(shí)時(shí)的用戶空間提供了一些輕量級(jí)的線程 API 和管理模塊。
4. 裸機(jī) AMP
AMP(非對(duì)稱多處理器)的最直接方案就是 Xilinx 提供的裸機(jī) APP 應(yīng)用。Linux 系統(tǒng)運(yùn)行在一個(gè)專門的 CPU 核上,通常是 CPU0,然后通過 FSBL 將裸機(jī) APP 或可執(zhí)行代碼加載到 CPU1 上運(yùn)行。由于操作系統(tǒng)運(yùn)行在 CPU0 上,在 CPU1 上僅運(yùn)行業(yè)務(wù)邏輯代碼,不存在上下文切換,調(diào)度等任何其他帶來的延時(shí)開銷,故該方法可以較好的保證業(yè)務(wù)邏輯處理的實(shí)時(shí)性
5. FreeRTOS
FreeRTOS 主要由 Amazon 開發(fā)與維護(hù),屬于 AMP 架構(gòu)。Linux 系統(tǒng)運(yùn)行在 CPU0上,在 CPU1 上運(yùn)行支持整個(gè)實(shí)時(shí)應(yīng)用環(huán)境的操作系統(tǒng)。實(shí)時(shí)任務(wù)與非實(shí)時(shí)任務(wù)均只在自己的核上運(yùn)行,但兩者之間可以相互訪問。實(shí)時(shí)訪問非實(shí)時(shí)要根據(jù) MMU 的地址定義來決定,而非實(shí)時(shí)訪問實(shí)時(shí)可以像訪問其他設(shè)備存儲(chǔ)一樣讀寫。
6. Xenomai
Xenomai 是一種采用雙內(nèi)核機(jī)制的 Linux 內(nèi)核的強(qiáng)實(shí)時(shí)擴(kuò)展。他與 Linux 共享硬件資源,優(yōu)先級(jí)高于 Linux 內(nèi)核,負(fù)責(zé)處理系統(tǒng)的實(shí)時(shí)任務(wù)。其運(yùn)行方式更像一個(gè)勾子系統(tǒng),系統(tǒng)支持的內(nèi)部或外部中斷觸發(fā)后,先由 Xenomai 執(zhí)行,屬于實(shí)時(shí)操作的任務(wù)在 Xenomai 環(huán)境下全部執(zhí)行完成,由于該環(huán)境的最高優(yōu)先級(jí),處理過程不會(huì)被 Linux 中斷。只有非實(shí)時(shí)處理任務(wù)會(huì)被分派到 Linux 系統(tǒng)執(zhí)行。這樣就可以完全保證 Xenomai 環(huán)境任務(wù)的實(shí)時(shí)要求不受 Linux 的影響,提供系統(tǒng)的實(shí)時(shí)可確定性。
三、 我們的選擇
FAST 開源架構(gòu)主要面向網(wǎng)絡(luò)通信領(lǐng)域,TSN 技術(shù)更是為了支持確定性的網(wǎng)絡(luò)通信傳輸。通過上述的幾種對(duì)實(shí)時(shí)處理的解決方案對(duì)比,裸機(jī) AMP、FreeRTOS 和 Xenomai 各有優(yōu)勢(shì)與不足。結(jié)合目前我們?cè)?FAST 架構(gòu)上的應(yīng)用與開發(fā),我們傾向選擇 Xenomai。一方面由于該方案更適合網(wǎng)絡(luò)應(yīng)用環(huán)境,包含了從驅(qū)動(dòng)、協(xié)議棧到用戶應(yīng)用的完整的網(wǎng)絡(luò)應(yīng)用開發(fā)示例。另一方面該方案仍然支持并使用 SMP 架構(gòu)的通用 Linux 系統(tǒng),對(duì)用戶原有系統(tǒng)架構(gòu)和 FAST 原有支持系統(tǒng)與架構(gòu)均不會(huì)帶來任何影響。
四、 測(cè)試與驗(yàn)證
目前系統(tǒng)正在測(cè)試過程中
關(guān)于 RTOS 上的實(shí)時(shí)應(yīng)用開發(fā),敬請(qǐng)關(guān)注 FAST 開源社區(qū)的推出的技術(shù)文章