RTOS的發(fā)展之MCU
使用過4 bit,8 bit(尋址能力256)MCU的前輩,應(yīng)該早已忘了當(dāng)年所使用的匯編語言(Mnemonics),在那個(gè)批注比程序代碼還多的時(shí)代,別說是RTOS,就連用C編譯程序都是奢侈品。時(shí)至今日,32 bit已經(jīng)是主流了,性能上更是今非昔比。
本文引用地址:http://m.butianyuan.cn/article/202210/439159.htm效能的持續(xù)性提升
觀察市場(chǎng)的MCU走向,目前跟SOC的明顯分野之一,就在于是否支持MMU,以ARM v7m(Cortex M3/M4)為例,CPU僅支持PA(Physical Address),在鎖定嵌入式市場(chǎng)的策略下,因市面上的RTOS仍以PA為大宗,未來走向VA(Virtual Address)的機(jī)率很低。
MCU的效能持續(xù)提升,可視為科技領(lǐng)域的常規(guī),除了架構(gòu)因素外(例如ARMv6->ARMv7->ARMv8),制程的進(jìn)步同樣功不可沒,以40奈米轉(zhuǎn)換為28奈米為例,就算芯片的設(shè)計(jì)沒變,仍可享受因制程所帶來的優(yōu)勢(shì),不但可因更高的頻率、獲得實(shí)質(zhì)的效能提升外,還能降低耗電。
持續(xù)提升的效能,其實(shí)也帶來另一層的隱憂,例如部分效能不彰的RTOS,可受益于硬件的進(jìn)步,來彌補(bǔ)其本身的不足,使消費(fèi)者更容易忽略、因RTOS所損失掉的效能。舉例來說,A廠商使用60MHz的硬件,完成了任務(wù)T,但B廠商使用同樣平臺(tái),搭配RTOS,卻需120MHz才能達(dá)成,以科學(xué)的角度分析,A的成效明顯優(yōu)于B,但因任務(wù)已達(dá)成,B廠商不會(huì)花功夫去檢討軟件上的細(xì)節(jié)。但事實(shí)就是,RTOS本身需占用運(yùn)算能力,Context Switch、Critical Section Protection、Scheduling等花費(fèi),可全部歸類為Overhead(無關(guān)真正的工作需求、只為了實(shí)現(xiàn)多任務(wù)),至于完整效能被RTOS占用了多少比例,只有很少的廠商會(huì)認(rèn)真看待。
當(dāng)MCU前進(jìn)到明顯的效能過剩階段后,理論上已不用在乎RTOS的Overhead損耗,但就算核心再快,延遲的關(guān)鍵仍舊沒變,就算拉到1GHz仍難以掩飾。
影響延遲反應(yīng)的因素
中斷延遲(Interrupt Latency)的嚴(yán)格定義,應(yīng)該從事件觸發(fā)起算(標(biāo)記為tA),直到處理程序接手(標(biāo)記為tB),這段時(shí)間(Latency=tB-tA)自然是越短越好。
如果更仔細(xì)的分析,Latency是硬件跟軟件的貢獻(xiàn)總和。先談?dòng)布牟糠?,某個(gè)Event觸發(fā)(標(biāo)記為0ns),CPU雖然收到了訊號(hào),但因執(zhí)行中的指令、或內(nèi)部因素,直到100ns后(這段時(shí)間歸算給硬件),才著手處理這個(gè)中斷,并執(zhí)行其內(nèi)定的硬件程序:諸如Push緩存器、更改執(zhí)行模式、切換特權(quán)、設(shè)定狀態(tài)、加載中斷向量等,當(dāng)CPU執(zhí)行PC(=Vector)所指向的第一行指令的當(dāng)下,時(shí)間已推進(jìn)到500ns(使用400ns切換),以這個(gè)例子來說,因硬件造成的Latency為0.5us。
大多數(shù)CPU的硬件Latency是固定的,以Cortex-M4為例,官方文件提到,在Zero wait state memory的前提下,CPU從中斷發(fā)生、到執(zhí)行第一行ISR指令,至多(Maximum)為12 cycle(=120ns 100MHz)。這是個(gè)非常優(yōu)秀的數(shù)字,除了展現(xiàn)了芯片廠商的努力成果,也預(yù)告了造成延遲的主因。
接著來分析一般RTOS處理中斷的流程。為了讓ISR能呼叫RTOS的服務(wù),有一部分的作法,是將ISR分成兩段(Top Half+Bottom Half),只有Bottom段可以使用API;另有一作法則是提供Interrupt Safe API;最極端的則是Hooking所有的ISR。無論如何,ISR內(nèi)呼叫API所隱含的意義,就是希望能由對(duì)應(yīng)的Task接手、來處理原本應(yīng)在ISR里執(zhí)行的任務(wù),換言之,在多數(shù)RTOS的運(yùn)作下,Latency應(yīng)計(jì)算到該Task的第一行指令才對(duì),因?yàn)檫@才是真實(shí)的延遲,至于這個(gè)數(shù)字會(huì)是多少,是否終于引起你的關(guān)注呢?在實(shí)務(wù)上,工程師也可選擇在ISR里直接處理,但這顯然會(huì)跟RTOS脫勾,也無意間說明了,刻意繞過RTOS,只是為了Real Time。
幾乎所有的CPU都支持中斷。當(dāng)中斷發(fā)生時(shí),CPU進(jìn)入中斷模式、并執(zhí)行ISR,當(dāng)ISR結(jié)束、CPU重回正常模式。這個(gè)中斷的規(guī)則,幾乎可以套用在過去數(shù)十年間、所有出現(xiàn)過的MCU/CPU身上,雖然大方向一致,但各有各的處理細(xì)節(jié)與特色。也許是長(zhǎng)久以來的歷史包袱,多數(shù)CPU的中斷是共享(或有限制)的,所以當(dāng)中斷發(fā)生后,如果ISR執(zhí)行太久,就會(huì)影響下一個(gè)(也可說是所有的)中斷事件。在這樣的前提下,RTOS要求使用者縮短ISR的運(yùn)行時(shí)間,并使用其API,將工作轉(zhuǎn)給Task來執(zhí)行,又因?yàn)門ask的優(yōu)先權(quán)機(jī)制,RTOS保證,重要的工作會(huì)被優(yōu)先執(zhí)行,且不影響下一個(gè)ISR的觸發(fā)。這段的描述,其實(shí)可用來平反前一段、對(duì)于RTOS處理不力的質(zhì)疑。顯然,RTOS采用這樣的作法是有原因的,其較長(zhǎng)的延遲、是用來換取中斷暢通的代價(jià)。
時(shí)至今日,對(duì)于ISR不應(yīng)該占用太長(zhǎng)時(shí)間的說法,其實(shí)是飽受挑戰(zhàn)的。以Cortex-M為例,在整合NVIC后,ISR本身已具備優(yōu)先權(quán),而這只是新一代架構(gòu)的其中一項(xiàng)特色而已。軟件業(yè)應(yīng)以新的思維,來因應(yīng)這些新的硬件技術(shù)。
Hard Real Time的挑戰(zhàn)
多數(shù)RTOS對(duì)于Real Time的定義為:「當(dāng)事件發(fā)生后,保證在可預(yù)期的時(shí)間內(nèi)處理之」,至于可預(yù)期的具體時(shí)間,則是一個(gè)復(fù)雜的問題。以RTOS廠商來說,其內(nèi)部應(yīng)有明確的數(shù)據(jù),但礙于客戶使用的MCU種類、時(shí)眽、編譯程序、參數(shù)、甚至程序的寫法等差異,確實(shí)很難給出明確的數(shù)據(jù),但只要廠商有心,愿意提出基于某個(gè)平臺(tái)的數(shù)據(jù),就會(huì)很有參考價(jià)值。
Hard Real Time的一般定義,就是當(dāng)系統(tǒng)的反應(yīng)、超出了上述的「可預(yù)期時(shí)間」,就判定為錯(cuò)誤。多數(shù)標(biāo)榜Hard Real Time OS的產(chǎn)品,在體質(zhì)上必定符合Constant Overhead的要求,至于因中斷屏蔽,所造成的Interrupt Latency浮動(dòng)問題,若對(duì)比數(shù)十倍以上的Overhead、則可完全忽略。綜合后的結(jié)果,就是一個(gè)保證能達(dá)成的「寬松時(shí)間」。
Cortex-M4所保證的硬件延遲是12 cycle,如果工程師直接在ISR內(nèi)處理任務(wù),依照RTOS的前述定義,則:可預(yù)期的時(shí)間=12 cycle。再回前述討論,標(biāo)榜Hard Real Time的「可預(yù)期時(shí)間」會(huì)是多少呢?這個(gè)數(shù)值估計(jì)將超過1000+cycle,不過,無論最終算出來的是1500、或是3000,其實(shí)都不打緊,只要將這個(gè)數(shù)值、填入「可預(yù)期時(shí)間」字段即可,系統(tǒng)「保證」在這個(gè)時(shí)間內(nèi)有所反應(yīng)。平心而論,以100MHz為基準(zhǔn),3000 cycle約為30us,這個(gè)數(shù)值就算寬松(對(duì)比12 cycle),但多數(shù)應(yīng)用已夠用,足已。
IEEE組織,在多年前成立了Time-Sensitive Networking(TSN)Task Group,希望藉由標(biāo)準(zhǔn)的制定,來帶動(dòng)產(chǎn)業(yè)的發(fā)展。這些(802.1x)標(biāo)準(zhǔn)所設(shè)定的時(shí)間單位是ns(=10∧-9秒),這個(gè)極小的數(shù)值,凸顯了產(chǎn)學(xué)界對(duì)于「Time-Sensitive」的期待及想象。簡(jiǎn)單來說,TSN就是一個(gè)要求Real Time的規(guī)范,而且精度是以奈秒來計(jì)算的,當(dāng)廠商使用MCU來制作TSN的設(shè)備時(shí),RTOS是否能勝任,這將是標(biāo)榜Real Time的嚴(yán)苛考驗(yàn)。
作者:科技下午茶啃泥https://www.bilibili.com/read/cv15838523
評(píng)論