李 存
QNX Neutrino 實時操作系統(tǒng)性能分析
李 存
操作系統(tǒng)是實時嵌入式系統(tǒng)的核心,其性能是決定系統(tǒng)實時性的關鍵因素之一。介紹了微內核實時操作系統(tǒng)–QNX Neutrino, 并以標準檢查程序對內核進行性能測試和分析。
實時操作系統(tǒng);微內核;搶占式調度;標準檢查程序;實時性分析
QNX Neutrino 是由 QNX 軟件系統(tǒng)公司(QSSL)發(fā)布的商用實時操作系統(tǒng)。QNX 軟件系統(tǒng)公司成立于 1980 年,總部位于加拿大渥太華; 2004 年被哈曼國際工業(yè)集團并購;2010 年被黑莓手機制造商 RIM (Research In Motion Limited)并購。QNX 被 RIM 并購后,才讓這個在中國認知度并不高的操作系統(tǒng)廠商被大家所熟知。
如今QNX軟件系統(tǒng)公司以其先進的中間件、開發(fā)工具、操作系統(tǒng)軟件和專業(yè)服務成為嵌入式技術市場領跑者之一。其合作客戶包括通用電氣、思科、戴姆勒、洛克希德·馬丁和西門子等公司,涉及產(chǎn)品有工業(yè)控制系統(tǒng)、醫(yī)療器械、車用遠程信息處理裝置、網(wǎng)絡路由器、安全與國防系統(tǒng),及其他任務或生命關鍵性的應用。
QNX Neutrino 操作系統(tǒng)是一種遵從 POSIX(可移植操作系統(tǒng)接口)規(guī)范的、內存受保護的、微內核架構的類 Unix實時操作系統(tǒng),目標市場主要是面向對于可靠性、可擴展性和實時性有很高要求的嵌入式系統(tǒng),已經(jīng)是最成功的微內核操作系統(tǒng)之一。
QNX Neutrino 操作系統(tǒng)功能全面、運行穩(wěn)健,它的模塊能靈活增減以滿足實時嵌入式系統(tǒng)資源有限的要求。QNX Neutrino 操作系統(tǒng)的微內核設計和模塊化架構可幫助客戶以極低的成本創(chuàng)建高度優(yōu)化和可靠的系統(tǒng),并且完美的支持了從單核到多核的系統(tǒng)移植。QNX Neutrino 操作系統(tǒng)的具體架構如圖1所示:
圖1 QNX Neutrino 實時操作系統(tǒng)架構
QNX Neutrino 操作系統(tǒng)由微內核、進程管理器和擴展部分(包括服務、應用、驅動程序等)三部分組成。微內核僅實現(xiàn)最基本的功能,如消息傳遞、線程調度、計時器、同步和信號;進程管理器是QNX操作系統(tǒng)中第一個和唯一一個必須的資源管理器,其在微內核的基礎上實現(xiàn)進程創(chuàng)建、進程記賬、內存管理、進程環(huán)境繼承和路徑名空間管理;擴展部分是可選的,用戶根據(jù)具體應用要求進行靈活的選擇組合。上述三大部分的關系如圖2所示:
圖2 QNX Neutrino 操作系統(tǒng)微內核、進程管理器和擴展部分的關系
本 文 中 所 有 性 能 測 試 都 是 在 ATMEL AT91SAM9G45-EK 標準開發(fā)板上完成,使用 QNX Neutrino RTOS v6.5.0 版本操作系統(tǒng)。開發(fā)板的主要參數(shù)如表1 所示:
表1 ATMEL AT91SAM9G45-EK 開發(fā)板主要參數(shù)
本文采用平均法計算性能,以此消除性能測試過程中一些不可控的無關隨機系統(tǒng)事件和中斷等的影響。從不同的角度對 QNX Neutrino 操作系統(tǒng)性能進行測試,并且列出測試所用的主要函數(shù)調用。
3.1 內核調用
用戶空間的程序通過調用內核原語接口函數(shù)進入內核,相關測試及性能如表2所示:
表2 內核調用測試及性能
在上述測試中,ClockID 函數(shù)返回當前線程的時鐘標識,getppid 函數(shù)返回當前線程的父線程標識。
3.2 上下文切換
在多任務實時操作系統(tǒng)中,上下文切換是一件非常頻繁的事件,諸如硬件中斷、信號、消息傳遞、同步都會導致線程重新調度和上下文切換,所以上下文切換的有效性直接影響實時系統(tǒng)的性能。相關測試及性能如表3所示:
表3 上下文切換測試及性能
在上述測試中,sched_yield 函數(shù)調用使得當前線程主動釋放處理器,進而操作系統(tǒng)選擇并運行其他同優(yōu)先級的線程。在虛切換中,當前線程是系統(tǒng)中運行的唯一線程,所以此時 sched_yield 函數(shù)調用實際上并不會引起上下文切換,而是繼續(xù)運行當前線程。進程間的切換包含地址空間的切換,所以開銷會比線程間切換大。
3.3 消息、脈沖
消息傳遞是QNX微內核提供的核心功能之一。每個系統(tǒng)應用程序,比如文件系統(tǒng)、協(xié)議棧、設備驅動,都會使用消息傳遞接口。消息傳遞分為阻塞式(同步)和非阻塞式(異步),阻塞式(又名消息)用于不定數(shù)據(jù)長度的傳遞,通過MsgSend、MsgReceive、MsgReply 接口實現(xiàn);非阻塞式(又名脈沖)用于簡短的通知傳遞,只包含4個字節(jié)的數(shù)據(jù),通過 MsgSendPulse、MsgReceivePulse 接口實現(xiàn)。相關測試及性能如表4所示:
表4 消息傳遞測試及性能
在上述測試中,一次完整的阻塞式消息傳遞測試包含2次進程間上下文切換,對于不同長度的數(shù)據(jù)載荷所消耗的時間是不一樣的;線程內脈沖傳遞,不會引起上下文切換;線程間和進程間脈沖傳遞都會引起1次上下文切換。
3.4 同步(互斥量、信號燈)
互斥量是一種簡單的同步機制,在QNX中有很多系統(tǒng)服務,比如文件系統(tǒng)、網(wǎng)絡協(xié)議和驅動程序依賴互斥量實現(xiàn)。信號燈是一種靈活的同步機制,它綁定一個非負整數(shù)計數(shù)器的屬性,其值為零時認為信號燈被鎖住。相關測試及性能如表5所示:
表5 互斥量、信號燈測試及性能
非阻塞式遞減已鎖無名信號燈線程內無名信號燈遞增、遞減線程間無名信號燈遞增、遞減進程間無名信號燈遞增、遞減非阻塞式遞減已鎖有名信號燈線程內有名信號燈遞增、遞減線程間有名信號燈遞增、遞減進程間有名信號燈遞增、遞減pthread_mutex_unlock(&mutex2); pthread_mutex_unlock(&mutex3);線程2:pthread_mutex_lock(&mutex3); pthread_mutex_lock(&mutex2); pthread_mutex_unlock(&mutex3); pthread_mutex_unlock(&mutex1); pthread_mutex_lock(&mutex4); pthread_mutex_lock(&mutex1); pthread_mutex_unlock(&mutex4); pthread_mutex_unlock(&mutex2); sem_trywait()8.623μs sem_post();sem_wait()14.236μs高優(yōu)先級線程、進程:sem_wait()低優(yōu)先級線程、進程:sem_post()19.682μs 34.168μs sem_trywait()40.264μs sem_post();sem_wait()83.327μs高優(yōu)先級線程、進程:sem_wait()低優(yōu)先級線程、進程:sem_post()81.350μs 92.427μs
在上述測試中,非阻塞式加鎖已被鎖的互斥量和無競爭的互斥量加鎖、解鎖并不會引起上下文切換,也不用進入內核空間,直接由處理器支持。為了強制通過內核執(zhí)行互斥量加鎖、解鎖操作,使用 pthread_mutexattr_setprotocol()函數(shù)設置互斥量的調度協(xié)議為保護模式(PTHREAD_PRIO_PROTECT)。在競爭的互斥量加鎖、解鎖中,需要進入內核執(zhí)行上下文切換,在執(zhí)行主循環(huán)前線程1 對 mutex4 進行加鎖,線程 2 對 mutex1 進行加鎖。
信號燈的相關操作都會調用內核函數(shù)完成。其中無名信號燈不需要指定名字,但是只能用于父子進程等有關聯(lián)的進程間或者同一進程中的線程間;有名信號燈需要指定名字,可以用于任何線程間。
3.5 定時器
定時器相關接口在QNX中是由微內核直接提供的,用戶可以很高效的使用。相關測試及性能如表6所示:
表6 定時器測試及性能
定時器創(chuàng)建、刪除 timer_create(); timer_delete() 31.818μs定時器設置 timer_settime()7.800μs
3.6 信號
信號在操作系統(tǒng)中被用于報告需同步的異常和處理異步的事件通知。相關測試及性能如表7所示:
表7 信號測試及性能
接收信號的相關線程都會預先調用 sigaction()函數(shù)關聯(lián)一個處理函數(shù)(這里為一個空函數(shù))到一種特定的信號,線程內信號傳遞,不會引起上下文切換;線程間和進程間信號傳遞會引起1次上下文切換。
3.7 線程
線程是進程內的一個控制流,一個進程包含一個或者多個線程。QNX 微內核直接將線程做為一個可調度的最小實體。相關測試及性能如表8所示:
表8 線程操作的測試及性能
在上述測試中,默認方式的線程棧空間為一個虛擬存儲頁;非懶惰方式的線程??臻g為系統(tǒng)最前面的可用物理存儲空間;自定義方式的線程??臻g由用戶指定。這里線程的執(zhí)行體為一個空函數(shù),當執(zhí)行體返回時,系統(tǒng)隱式調用函數(shù)pthead_exit()。
QNX Neutrino 操作系統(tǒng)是微秒級硬實時系統(tǒng)的理想基礎平臺,它提供了硬實時系統(tǒng)所需的一切基本要素(多任務、搶占式調度、微秒級上下文切換......),其微內核架構最大程度的保證了實時系統(tǒng)的穩(wěn)定性和靈活性。
[1]QNX Neutrino 實時操作系統(tǒng),www.qnx.com
[2]QNX Neutrino Realtime OS: Kernel Benchmark Methodology, www.qnx.com
[3]侯業(yè)勤,張菁,分布式嵌入式實時操作系統(tǒng) QNX,[M]宇航出版社,1999
QNX Neutrino Performance Analysis
Li Cun
(GE (China)Research and Development Center Co., Ltd., Shanghai 201203, China)
Operation system is the core of real-time embedded system.Its performance is one of the key factors to affect the system real-time capability. This paper introduces the real-time microkernel operation system – QNX Neutrino, assessed its tests performance through benchmark tests and analysis.
Real-Time Operation System; Microkernel; Preemptive Scheduling; Benchmark; Real-Time Capability Analysis
TP311
A
1007-757X(2014)02-0035-03
2014.02.25)
李存(1981-),男,通用電氣(上海)研究開發(fā)中心有限公司,碩士,研究方向:工業(yè)嵌入式系統(tǒng)和工業(yè)自動化控制系統(tǒng)的研究開發(fā),上海,201203