作者 | Vincent,Gary,Jerald
01 QNX介紹及歷史
QNX成立于1980年,是全世界第一個(gè)類(lèi)UNIX的符合POSIX標準的微內核的硬實(shí)時(shí)操作系統,在過(guò)去的幾十年中廣泛的應用在汽車(chē)、工業(yè)自動(dòng)化、國防、航空航天、醫療、核電和通信等領(lǐng)域,提供以嵌入式操作系統為核心的中間件和基礎軟件解決方案。在上世紀七十年代末,QNX的兩位創(chuàng )始人Gordon Bell和Dan Dodge根據大學(xué)時(shí)代的一些設想寫(xiě)出了一個(gè)能在IBM PC上運行的名叫Quick UNIX的系統,后來(lái)改名為QNX并于1980年正式發(fā)布,歷經(jīng)幾十年的演進(jìn),QNX公司于2004年10月被哈曼集團以1.38億美元收購,作為哈曼的一個(gè)事業(yè)部經(jīng)營(yíng)了六年。2010年04月,黑莓以2億美元從哈曼處收購了QNX,一同被打包收購的還有哈曼下屬的一個(gè)位于溫哥華的叫Wavemaker的音效部門(mén),也就是現在QNX acoustic方案的前身。QNX這個(gè)成立于加拿大渥太華的公司,在被美國哈曼買(mǎi)走6年后又重返加拿大,作為黑莓核心部門(mén)IOT技術(shù)方案事業(yè)部的最重要組成部分,承擔黑莓業(yè)務(wù)中操作系統汽車(chē)基礎平臺軟件、數據安全、物聯(lián)網(wǎng)IOT及云計算和專(zhuān)利部門(mén)等重要業(yè)務(wù)內容。在汽車(chē)領(lǐng)域的高性能處理和功能安全的交叉子域中,QNX是全球最大的商用操作系統提供商。自1999年進(jìn)入汽車(chē)領(lǐng)域至今,QNX緊隨并引領(lǐng)了汽車(chē)電子嵌入式軟件領(lǐng)域的發(fā)展潮流和趨勢熱點(diǎn),在多類(lèi)重要的軟件平臺上均布局了前瞻性戰略產(chǎn)品,為全球一線(xiàn)汽車(chē)供應商和制造商提供先進(jìn)的基礎軟件和網(wǎng)絡(luò )安全技術(shù),被廣泛應用于高級駕駛輔助系統、基于虛擬化技術(shù)的智能數字座艙系統,智能網(wǎng)聯(lián)模塊、智能網(wǎng)關(guān)、高性能計算平臺及信息娛樂(lè )系統等汽車(chē)電子的子系統中。據知名獨立調研公司Strategy Analytics在2022年初的統計,全球已有超過(guò)2.15億輛汽車(chē)搭載BlackBerry QNX軟件,平均每年新增2000萬(wàn)臺搭載黑莓QNX的基礎軟件的智能汽車(chē)進(jìn)入全球市場(chǎng)。
到目前為止,世界上幾乎所有的主機廠(chǎng)都采用了基于QNX操作系統的軟件技術(shù)。全球top 25家電動(dòng)汽車(chē)廠(chǎng)家,其中24家在使用QNX的軟件操作系統,例如,中國的小鵬汽車(chē)自動(dòng)輔助駕駛系統Xpilot3.0和Xpilot3.5基于QNX通過(guò)TUV萊茵ISO26262 ASIL D功能安全的硬實(shí)操作系統,合眾新能源汽車(chē)的哪吒S采用QNX Hypervisor打造其全新科技感智能座艙,并在其全棧自研的TA PILOT 3.0智能駕駛系統中搭載QNX OS for Safety操作系統,實(shí)現多種場(chǎng)景下的智能輔助駕駛,又如零跑汽車(chē)在其量產(chǎn)的第三代高端純電SUV—零跑C11和智能純電橋車(chē)C01中均采用了QNX Neutrino實(shí)時(shí)操作系統和QNX Hypervisor,旨在為中國消費者帶來(lái)更個(gè)性化與舒適的駕駛體驗。除此之外,高合即將發(fā)布的豪華純電超跑HiPhi Z的自動(dòng)輔助駕駛平臺使用的是英偉達Orin-X芯片和 QNX 嵌入式硬實(shí)時(shí)操作系統。
時(shí)代周刊曾在2016年對QNX評價(jià)為“QNX對于汽車(chē)來(lái)說(shuō)就像微軟對于電腦一樣”,詮釋了QNX在汽車(chē)領(lǐng)域的基礎軟件操作系統地位以及深度的覆蓋率。
02 QNX特點(diǎn)
-
QNX是嵌入式硬實(shí)時(shí)的微內核操作系統
有硬實(shí)時(shí)、微內核、模塊化、弱耦合、分布式的特點(diǎn),從1980年誕生之初就是基于SOA架構設計,基于Client-Server的模型,具體表現為:
-
硬實(shí)時(shí):任何切換時(shí)間和中斷時(shí)延速度快,所有的任務(wù)響應均為確定性deterministic行為。
-
微內核:除調度、進(jìn)程管理、中斷及操作系統核心的功能外,其余部分都處于用戶(hù)態(tài),包括驅動(dòng)、協(xié)議棧、文件系統及功能模塊等。
-
模塊化:操作系統的各個(gè)功能單元都模塊化設計,內存保護,并且相互隔離,可按照需要動(dòng)態(tài)加載或卸載,基于消息機制通信,按照Client-Server的架構設計。
-
弱耦合:模塊與模塊之間互不影響,都在獨立的虛擬地址空間運行。
-
分布式:局域網(wǎng)內的QNX系統對于用戶(hù)角度可以認為是一臺QNX系統,資源可以復用。
-
QNX是類(lèi)UNIX操作系統
遵循POSIX的最高級別PSE54標準(注:POSIX標準有四個(gè)等級PSE51, PSE52, PSE53和 PSE54, 在RTOS實(shí)時(shí)操作系統的世界里,只有QNX操作系統是PSE54標準的,因為QNX誕生之初就是類(lèi)UNIX系統按照POSIX標準編寫(xiě)),因此基于開(kāi)源的應用程序以及一些開(kāi)源的中間件都可以無(wú)縫的移植到QNX系統之上。QNX Microkernel和Process Manager組成QNX最小系統Procnto,其他如驅動(dòng)程序、協(xié)議棧、文件系統、應用程序都作為一個(gè)獨立的模塊運行在QNX系統之上。
-
QNX是功能安全和信息安全的操作系統
QNX通過(guò)功能安全TUV萊茵ISO 26262 ASIL D最高等級道路車(chē)輛最高功能等級安全認證,包括QNX 操作系統、QNX Hypervisor虛擬化和Graphic Monitor圖形監控子系統以及QNX IPC通訊機制black channel,同時(shí)黑莓是網(wǎng)絡(luò )信息安全標準ISO/SAE 21434 委員會(huì )基礎軟件組唯一成員。
-
QNX其他特性
1. QNX調度算法及策略
QNX調度算法有很多種,本質(zhì)上基于優(yōu)先級搶占式。QNX的線(xiàn)程優(yōu)先級是一個(gè)0-255的數字,數字越大優(yōu)先級越高。在QNX上有三種基本調度策略,可以單獨使用也可以組合使用,包括基于時(shí)間片輪詢(xún)Round Robin、優(yōu)先級搶占式FIFO和基于時(shí)間Budget的Sporadic算法。同時(shí)QNX還提供APS自適應分區調度算法,在CPU滿(mǎn)負荷的場(chǎng)景下保證低優(yōu)先級的任務(wù)有調度的機會(huì ),不被“餓死”。
2. QNX IPC通訊機制
QNX除了支持Native的IPC機制如Massage passing、Signal等,同時(shí)還提供POSIX標準的IPC例如MessageQ、Piple、Shared Memory等IPC通訊方式,多種IPC方式供用戶(hù)在不同的應用場(chǎng)景下進(jìn)行選擇。
3. QNX 的IDE集成開(kāi)發(fā)環(huán)境
QNX提供基于Eclipse的Momentics IDE集成開(kāi)發(fā)環(huán)境,供用戶(hù)進(jìn)行基于以太網(wǎng)Software GDB的代碼級的編譯調試或系統性能分析,可實(shí)時(shí)以圖形化的方式,查看進(jìn)程資源、系統日志、CPU占用情況,內存使用情況,進(jìn)程間通信以及Coredump等。
03 QNX在自動(dòng)輔助駕駛領(lǐng)域的應用
由于QNX實(shí)時(shí)性、確定性行為和功能安全的特性,契合自動(dòng)輔助駕駛對功能安全ISO26262 ASIL D的安全等級要求,因此由于國內外主機廠(chǎng)項目的需求,QNX被廣泛的應用于自動(dòng)輔助駕駛領(lǐng)域,作為基礎軟件承載上層的各種實(shí)時(shí)和高可靠性應用。由于在自動(dòng)輔助駕駛領(lǐng)域,芯片和基礎軟件越來(lái)越成為一個(gè)整體方案,因此QNX也被包含在主流的高性能自動(dòng)輔助駕駛芯片的整體基礎軟件平臺方案中,作為關(guān)鍵的一部分提供給最終用戶(hù)。
-
英偉達與黑莓QNX的合作
英偉達的一系列高性能芯片廣泛的應用在自動(dòng)輔助駕駛領(lǐng)域,例如Xavier、Orin和Thor等。英偉達作為頂尖的自動(dòng)輔助駕駛芯片平臺整體解決方案商,在平臺軟件層面上提供以DriveOS為核心的基礎軟件平臺,早在五年前,英偉達就選定QNX,雙方深入合作,QNX作為英偉達DriveOS功能安全ISO26262 ASIL D版本唯一的RTOS合作伙伴,由英偉達提供基于QNX的功能安全版本的DriveOS的一站式方案,例如在Xavier平臺上,因為整體平臺軟件要達到ASIL D級別,DriveOS只提供QNX SafetyOS安全內核版本。英偉達極其重視功能安全,黑莓QNX作為英偉達平臺中唯一RTOS操作系統合作伙伴,包含在Driver OS的整體方案,由英偉達提供一站式的方案和服務(wù)支持,即服務(wù)工程支持由英偉達統一接口。
-
高通與黑莓QNX的合作
高通作為IOT和手機領(lǐng)域芯片方案的翹首,在車(chē)載汽車(chē)電子的中高端智能座艙領(lǐng)域占了絕大多數的份額,黑莓QNX作為高通Snapdragon座艙芯片整體解決方案的一部分,也是唯一的Hypervisor合作伙伴和高通一起支持了全世界近百個(gè)汽車(chē)電子的客戶(hù),同樣在自動(dòng)輔助駕駛領(lǐng)域,高通Snapdragon Ride也定點(diǎn)了許多全球領(lǐng)先的主機廠(chǎng)項目,例如官宣的大眾、寶馬、通用以及長(cháng)城汽車(chē)等,黑莓QNX作為高通自動(dòng)輔助駕駛芯片平臺的基礎軟件底座部分,由高通提供一站式的ISO 26262 ASIL D功能安全等級的整體軟件平臺方案。
-
國內自動(dòng)輔助駕駛芯片公司與黑莓QNX的合作
近年來(lái)高性能的國產(chǎn)芯片層出不窮,在自動(dòng)輔助駕駛領(lǐng)域,也有越來(lái)越多有潛力的國產(chǎn)公司展露頭角,黑莓QNX目前已經(jīng)完成適配黑芝麻A1000和地平線(xiàn)J5等芯片,由芯片公司提供一站式的整體解決方案。值得一提的是,后續還有多家重視功能安全的頂級國產(chǎn)大算力高性能自動(dòng)輔助駕駛芯片合作,將于明年正式發(fā)布。
04 中國自動(dòng)輔助駕駛領(lǐng)域基礎平臺軟件所遇到的問(wèn)題
近年來(lái)自動(dòng)輔助駕駛領(lǐng)域非?;鸨?,許多國內外的主機廠(chǎng)都逐步在量產(chǎn)項目中開(kāi)發(fā)以及發(fā)布L2+的功能,當我們回顧這幾年來(lái)快速發(fā)展會(huì )發(fā)現,大多數的自動(dòng)輔助駕駛的人才都來(lái)自于Robotaxi,自動(dòng)駕駛算法初創(chuàng )公司或大學(xué)研究機構,特別是算法人才。這就有個(gè)顯著(zhù)的特點(diǎn),在這些公司里面的大多數項目,最初都是基于工控機+英偉達顯卡(大多數用英偉達的GPU,少數用AMD的)+開(kāi)源的操作系統+來(lái)自于開(kāi)源的算法,其實(shí)和汽車(chē)電子的安全性本身毫無(wú)關(guān)系,唯一的好處就是快,容易盡早演示,盡快融資。
這些算法人才加入主機廠(chǎng)之后,更傾向于用以前最熟悉的開(kāi)發(fā)方式,這樣好盡快的出演示成果,也就是英偉達的SOC+開(kāi)源的操作系統+來(lái)自于開(kāi)源的算法。另一方面,在自動(dòng)輔助駕駛項目中,一般主機廠(chǎng)會(huì )把控制器平臺即硬件和平臺軟件外包給外部的Tier1來(lái)做,類(lèi)似于一臺PC電腦,而自己開(kāi)發(fā)應用和算法。
一般主機廠(chǎng)也有平臺組,負責部分的驅動(dòng)及驅動(dòng)以上的中間件的整合,系統組負責系統設計統籌,功能安全團隊負責整體的功能安全,而算法團隊負責算法應用的開(kāi)發(fā)和實(shí)現,那么問(wèn)題就來(lái)了,除純算法團隊外,一般國外的主機廠(chǎng)都會(huì )有一個(gè)成建制的叫算法嵌入式工程實(shí)現的團隊,負責算法在非工控機的嵌入式環(huán)境和實(shí)時(shí)操作系統的優(yōu)化實(shí)現落地,這樣的團隊即要懂一點(diǎn)算法架構,又要懂嵌入式軟件的開(kāi)發(fā)和硬件特性,又要對操作系統有足夠的理解。
而在中國的許多主機廠(chǎng),沒(méi)有看到有這樣一個(gè)團隊,甚至這樣的人才存在。因此不少項目由于開(kāi)發(fā)周期緊,人員不具備嵌入式系統開(kāi)發(fā)的經(jīng)驗,會(huì )采用更接近于robotaxi的方式開(kāi)發(fā),即英偉達SOC中的處理器(類(lèi)似工控機),SOC中的GPU(類(lèi)似顯卡)和開(kāi)源操作系統+未經(jīng)優(yōu)化的各種開(kāi)源算法,在滿(mǎn)足基本功能和有限性能的前提下,功能安全團隊的建議通常會(huì )被直接忽略,因為要滿(mǎn)足極短的量產(chǎn)時(shí)間,在國內主機廠(chǎng)軍備競賽中領(lǐng)先才是最重要的,這在歐美的主機廠(chǎng)是不可想象的。在這一點(diǎn)上,中國也有許多人才儲備充足并且付責任的主機廠(chǎng)做的非常好,特別是有專(zhuān)門(mén)的經(jīng)驗豐富的算法工程實(shí)現的團隊負責優(yōu)化落地。期待在不久的將來(lái),能夠有更多的主機廠(chǎng)重視起這個(gè)問(wèn)題,在中國有更多的行業(yè)人才能夠填補這一空白。
05 QNX算法移植以及性能優(yōu)化舉例
QNX提供ADAS reference平臺產(chǎn)品,里面涵蓋了Sensor Framework,networking,open source modules,第三方的SDK以及一些參考設計,其中sensor Framework提供了ADAS的一些基本庫。
-
算法移植
自動(dòng)輔助駕駛以開(kāi)源的算法居多,由于QNX符合POSIX PSE54標準,API兼容基本一致,因此各類(lèi)開(kāi)源算法可以很方便的移植到QNX的平臺上,使用QNX的工具鏈進(jìn)行編譯并運行,但是雖然API是一致的,但由于實(shí)時(shí)操作系統的特性,表現的行為會(huì )有所差異,需要對系統進(jìn)行優(yōu)化調整。
QNX有專(zhuān)門(mén)的team來(lái)根據roadmap以及客戶(hù)需求移植一些開(kāi)源軟件,比如ROS/ROS2,比如OpenCV和vSomeIP,我們也會(huì )負責后期的維護。
-
分享常見(jiàn)的QNX性能優(yōu)化項
1. IPC優(yōu)化
QNX支持絕大部分主流POSIX系統常見(jiàn)的IPC方式,同時(shí)也有其獨特的原生IPC方式,Message-passing。在自動(dòng)輔助駕駛方案設計中,常有公司會(huì )將UDS、DDS做為軟件通信總線(xiàn)的架構方案原封不動(dòng)地從Linux照搬到QNX上。從功能上看,這樣的跨平臺方案可以使得代碼重用并且功能沒(méi)有區別。但從性能角度考慮,由于QNX獨特內核架構,這并不是高效的解決方案。不同于Linux的宏內核架構,QNX為了安全性和實(shí)時(shí)性采用了微內核架構,絕大部分的系統服務(wù),比如網(wǎng)絡(luò )協(xié)議棧,它是完全運行在內核之外以服務(wù)(Resource Manager)的方式運行。如果采用UDS(Unix Domain Socket)這用基于網(wǎng)絡(luò )服務(wù)(嚴格意義上講,UDS并不需要經(jīng)過(guò)網(wǎng)絡(luò )協(xié)議棧,但也是需要經(jīng)過(guò)QNX的網(wǎng)絡(luò )服務(wù)io-pkt支持)的通訊方式,那么所有的數據報都需要經(jīng)過(guò)網(wǎng)絡(luò )服務(wù)中轉,相比直接通訊多了一次IPC,這就帶來(lái)了系統資源的浪費。建議的優(yōu)化方案是采用更高效的IPC方式,一般情況下,中小量的數據量傳輸建議使用message-passing,特別大的數量使用shared memory方式。另外,一些開(kāi)源軟件也會(huì )大量使用FIFO,PIPE等IPC,盡管QNX支持這類(lèi)使用,但是我們也建議改成更高效的message passing方式,以減少單次IPC的開(kāi)銷(xiāo)。
2. 編譯選項優(yōu)化
QNX采用GCC的框架,出于安全性的考慮,QNX的編譯器版本更新相比沒(méi)有開(kāi)源社區激進(jìn),相比會(huì )慢一些。比如SDP 7.0采用的是GCC 5.4.0,SPD 7.1采用的GCC 8.3.0,即將推出的SDP Moun會(huì )采用GCC 11.X。有時(shí)候會(huì )發(fā)現,運行同樣一個(gè)算法庫,QNX性能會(huì )比開(kāi)源低,那很有可能是由于編譯版本或編譯優(yōu)化選項差異的原因。因為在Linux系統上默認的ARMv8的編譯優(yōu)化選項是滿(mǎn)級的,而QNX默認不打開(kāi)ARMv8的優(yōu)化選項,因此程序編譯時(shí)候需要打開(kāi)相關(guān)編譯選項才能獲得最佳性能,因為QNX基于安全性考慮某些編譯選項在默認編譯的時(shí)候并沒(méi)有打開(kāi)會(huì )導致性能問(wèn)題。
3. 驅動(dòng)級別優(yōu)化
如網(wǎng)絡(luò )/存儲設備驅動(dòng),根據以往的經(jīng)驗,大部分的性能問(wèn)題的瓶頸在設備驅動(dòng)這層。特別是新的硬件、新的驅動(dòng),要注意根據QNX系統服務(wù)層做好適配,驅動(dòng)的好壞,往往是除硬件本身之外最主要的性能影響因素。我們遇到非常多的來(lái)自驅動(dòng)層面的空等,忙等,最終導致系統機能的冗余浪費。
4. 網(wǎng)絡(luò )協(xié)議棧優(yōu)化
除了網(wǎng)絡(luò )驅動(dòng)的優(yōu)化,QNX的網(wǎng)絡(luò )協(xié)議棧io-pkt本身也提供了豐富的參數,可以根據具體使用的應用場(chǎng)景來(lái)達到性能的最優(yōu)化。另外,使用QNX SDP 7.1及后續版本的用戶(hù),可以使用最新的版本網(wǎng)絡(luò )協(xié)議棧io-sock,它對多核CPU的利用和大并發(fā)小包數據的處理能力有顯著(zhù)地提升。兩個(gè)協(xié)議棧各有千秋,實(shí)際上大量的案例證明,用戶(hù)并沒(méi)有達到io-pkt的性能瓶頸,socket buffer 不足導致丟包,typed memory pool分配的不夠導致收發(fā)阻塞等等,這些都可以通過(guò)配置以及API層面的優(yōu)化達到性能提升。
5. 系統API優(yōu)化
如memory allocation,memory copy等,QNX提供jemalloc根據實(shí)際應用場(chǎng)景提供額外內存泄漏手段,提供更多的功能,jemalloc比default的malloc效率更高,特別是對于大量線(xiàn)程高并發(fā)調用的場(chǎng)景。
6. 用戶(hù)接口優(yōu)化
QNX 提供的底層接口,尤其是一些自有API,是有不少細微差別的,比如sendmsg()和sendmmsg(), 用戶(hù)往往會(huì )比較熟悉前者,用于socket的發(fā)包,但是后者提供了message 隊列來(lái)實(shí)現不增加IPC的基礎上提高了整體的吞吐率。又比如mmap(),我們提供了一些QNX獨有的flag來(lái)應對不同的memory mapping 場(chǎng)景,如MAP_ANON與MAP_PHYS的配合,才代表申請物理連續memory region而MAP_LAZY 更會(huì )延遲內存的申請分配。了解并熟悉每個(gè)接口的參數配置以及相近命名接口的應用場(chǎng)景會(huì )對開(kāi)發(fā)幫助很大。我們的在線(xiàn)文檔有專(zhuān)門(mén)的章節完整并詳細的介紹了每一個(gè)接口的參數以及相關(guān)使用。
7. QNX提供Momentics IDE環(huán)境對算法進(jìn)行性能分析
如memory leak,application profile等,同時(shí)提供kernel trace進(jìn)行分析,在抓取的時(shí)間段中可以獲得每個(gè)時(shí)間點(diǎn)的事件、中斷響應,給出優(yōu)化建議。我們也支持自定義的kernel 事件,來(lái)讓用戶(hù)可以精確的了解代碼片段的運行情況。
8. QNX提供了onboard debug也支持應用程序調用棧的實(shí)時(shí)保存及相應的GDB,在調查一些忙等的現場(chǎng)會(huì )有很大的幫助。
最后總結一下,即便作為ISO26262 ASIL-D安全認證的硬實(shí)時(shí)性操作系統,QNX在系統性能上也并沒(méi)有落后宏內核系統。只要合理地使用和優(yōu)化,它的性能表現同樣非常優(yōu)秀,同時(shí)占用更低系統資源。QNX有著(zhù)豐富的算法移植和優(yōu)化經(jīng)驗能給到用戶(hù),同時(shí)QNX提供一系列的手段和工具去定位算法性能的瓶頸。
以上是一些經(jīng)驗分享,更多關(guān)于黑莓QNX的使用技巧和優(yōu)化方法將會(huì )陸續更新,敬請期待。
轉自汽車(chē)電子與軟件