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