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