一種新的無(wú)線設(shè)計(jì)方法使設(shè)計(jì)師們能將多種基于分組的標(biāo)準(zhǔn)融合到資源受限的手機(jī)硬件中。
系統(tǒng)設(shè)計(jì)人員有時(shí)將用戶設(shè)備手機(jī)的傳統(tǒng)棧開(kāi)發(fā)方法稱為“基于豎井”的開(kāi)發(fā)方法,因?yàn)檫@種開(kāi)發(fā)方法在軟件和硬件之間是極端縱向集成的,而且缺乏與其它棧的橫向集成(圖 1)。在實(shí)現(xiàn)多種基于分組的標(biāo)準(zhǔn)時(shí),這種豎井方法就不適用了,因?yàn)樗僭O(shè)協(xié)議棧開(kāi)發(fā)人員“擁有”基本的硬件資源,因而能夠做出有關(guān)資源的假定,例如臨時(shí)的和永久的緩存器分配。這些可用性假設(shè)在多模式環(huán)境中是毫無(wú)意義的,因?yàn)樵诨緯r(shí)序上相互可能“沖突”的棧都會(huì)競(jìng)相獲得各種資源,例如存儲(chǔ)器。
豎井方法假設(shè)你可以在設(shè)計(jì)時(shí)配置最壞情況下的系統(tǒng)裝入,從而使你可以在系統(tǒng)設(shè)計(jì)期間,而不是在運(yùn)行時(shí)分配資源。但是,這種方法基本上不適用于多通道的基于分組的系統(tǒng),因?yàn)槠浞逯蒂Y源裝入與平均資源裝入相差很大。另外,豎井方法還假設(shè)一個(gè)設(shè)計(jì)小組對(duì)系統(tǒng)進(jìn)行編碼,并在開(kāi)發(fā)期間,標(biāo)準(zhǔn)不會(huì)發(fā)生重大變化。對(duì)于現(xiàn)代通信系統(tǒng)來(lái)說(shuō),兩種假設(shè)都可能是錯(cuò)誤的。
基于豎井方式的開(kāi)發(fā)常常會(huì)使各種功能實(shí)現(xiàn)方法的資源使用率、調(diào)用格式以及行為等假設(shè)泄漏到設(shè)計(jì)的其它部分中,導(dǎo)致許多不良的設(shè)計(jì)習(xí)慣打著效率的旗號(hào)而付諸實(shí)現(xiàn)。例如,由于知道各種功能要花多少時(shí)間(以周期計(jì))來(lái)執(zhí)行,又知道每種功能函數(shù)需要多大的臨時(shí)存儲(chǔ)器,系統(tǒng)設(shè)計(jì)人員就會(huì)常常編寫出靜態(tài)的臨時(shí)存儲(chǔ)器調(diào)度程序,從而使得時(shí)間上不重疊的多個(gè)例行程序使用一個(gè)公共緩存器,由此避免代價(jià)可能很高的對(duì) malloc()和 free()的不確定調(diào)用。但是,這樣的設(shè)計(jì)往往是脆弱的。如果你要重新實(shí)現(xiàn)任何引擎,造成資源分布特性、時(shí)序兩者之一或同時(shí)變更;如果基本硬件也要改變;更糟的是,如果某個(gè)棧與另一個(gè)棧一起共享基本資源(多模式問(wèn)題),則從零開(kāi)始的重新設(shè)計(jì)就不可避免了。
圖 1 傳統(tǒng)豎井方式開(kāi)發(fā)采用縱向?qū)崿F(xiàn)方法,缺乏與其它棧的橫向集成。
替代方法
與任何極為復(fù)雜的設(shè)計(jì)問(wèn)題一樣,這一問(wèn)題的最佳解決方法是將問(wèn)題劃分為可以自主處理的不太復(fù)雜的塊。這種替代方法的基本概念模型在本文中稱為虛擬機(jī)方法,它假設(shè)一個(gè)通信棧的第一層被分解為執(zhí)行件、虛擬機(jī)(運(yùn)行期內(nèi)核)和引擎(圖 2)。
圖 2 一種替代的開(kāi)發(fā)方法將第一層軟件體系結(jié)構(gòu)建立在虛擬機(jī)的基礎(chǔ)上。
對(duì)運(yùn)行中的第一層軟件的分析表明:該軟件把 80~90% 的執(zhí)行時(shí)間用于與無(wú)線設(shè)備相關(guān)的計(jì)算密集的信號(hào)處理變換。這些資源消耗大的功能包括傅里葉變換、矢量乘法、FIR 濾波器和采樣抽取器。實(shí)際上,這些變換在不同的無(wú)線設(shè)備中表現(xiàn)出高度的共通性。這些資源消耗大、基本與應(yīng)用系統(tǒng)無(wú)關(guān)的元件,要么用專用硬件來(lái)實(shí)現(xiàn),要么用平臺(tái)高度優(yōu)化的軟件來(lái)實(shí)現(xiàn)。推薦的體系結(jié)構(gòu)用一種特殊的方式處理資源消耗大的功能,即生成“引擎”。具體地說(shuō),這種體系結(jié)構(gòu)要參照與其行為上等效的產(chǎn)品,對(duì)一些引擎進(jìn)行性能試驗(yàn),剖析其性能,實(shí)現(xiàn)獨(dú)特形式的資源仿真。
剩余的 10% 處理資源(即執(zhí)行元件)本質(zhì)上是一種起控制作用的狀態(tài)機(jī),可按專門的無(wú)線標(biāo)準(zhǔn)要求進(jìn)行變換。執(zhí)行程序通常是極其復(fù)雜的,但其所需的處理資源卻較少。這些資源消耗小的、基本上專用的元件很少包含天生就接合到基本硬件襯底上的資源。實(shí)際上,無(wú)論它們用硬件還是用軟件來(lái)實(shí)現(xiàn)引擎,它們都可以移植到使用相同虛擬機(jī)運(yùn)行期內(nèi)核的任何其它設(shè)計(jì)中。執(zhí)行功能的實(shí)例在第三代設(shè)計(jì)中有:一個(gè)數(shù)據(jù)平面的總數(shù)據(jù)流表達(dá)式、采集與跟蹤邏輯以及各平面的通道生成和刪除。
替代方法建立在一個(gè)以瘦虛擬機(jī)運(yùn)行期內(nèi)核為核心的體系結(jié)構(gòu)上。這種體系結(jié)構(gòu)能將執(zhí)行元件與高 MIPS 引擎分開(kāi)。在其最簡(jiǎn)化的級(jí)別上,它為半導(dǎo)體硬件和 RTOS 提供了使用可移植基帶軟件的抽象層。這種功能并不取代 RTOS;系統(tǒng)仍然使用引擎位于處理器(通常是一個(gè) DSP)中的 RTOS 服務(wù)。虛擬機(jī)運(yùn)行期元件需要識(shí)別公共的線程、中斷、內(nèi)存和資源管理模型,然后設(shè)計(jì)師將這些模型映射到可用的原語(yǔ)中,以通過(guò)運(yùn)行期實(shí)現(xiàn)方法生成任何第三方 RTOS。虛擬機(jī)還包括復(fù)雜的資源管理功能,這些功能對(duì)于解決第一層無(wú)線開(kāi)發(fā)的瓶頸是至關(guān)重要的(圖 3)。
圖 3 虛擬機(jī)運(yùn)行期具有資源管理和調(diào)度功能,可將執(zhí)行元件與引擎分離開(kāi)來(lái)。
從資源調(diào)度的角度看,如果高層代碼要直接調(diào)用引擎的話,則所有這些努力都將是徒勞的。直接調(diào)用或多或少會(huì)影響基本的執(zhí)行順序和線程模型,而這對(duì)于高效的實(shí)現(xiàn)方法來(lái)說(shuō)又非常關(guān)鍵。更糟的是,調(diào)用者要負(fù)責(zé)為基本引擎建立適當(dāng)?shù)拇鎯?chǔ)器,這實(shí)際上導(dǎo)致顯式的資源調(diào)度。在本文所述方法中,只有一個(gè)中間件服務(wù)(即虛擬機(jī)運(yùn)行期內(nèi)核)可以調(diào)用一個(gè)引擎。具體來(lái)說(shuō),該運(yùn)行期內(nèi)核包括一個(gè)調(diào)度程序,從效果來(lái)說(shuō),這一調(diào)度程序是一個(gè)跨越所有執(zhí)行過(guò)程和邏輯線程的范例。它使用一種插入式的調(diào)度策略來(lái)決定把這些任務(wù)中的哪一個(gè)提交給基本的 RTOS 去執(zhí)行,決定它將使用多少 RTOS 線程,并決定采用哪種優(yōu)先級(jí)和邏輯時(shí)間步長(zhǎng)。
仿真是關(guān)鍵
盡管你必須保證你的系統(tǒng)是正確的,但對(duì)資源管理做出適當(dāng)判斷也是同樣必要的。當(dāng)然,最壞情況分析是不恰當(dāng)?shù),在多模式設(shè)計(jì)時(shí)會(huì)給出過(guò)于悲觀的結(jié)果,因而造成浪費(fèi)。但是,利用性能仿真可以揭示出各種棧在時(shí)間上互相“沖突”的相關(guān)性。當(dāng)執(zhí)行元件調(diào)用引擎時(shí),虛擬機(jī)資源仿真并不運(yùn)行引擎本身,而是相當(dāng)簡(jiǎn)單地更新一張“資源使用記錄表”。在周期精確的仿真期間,或者在實(shí)際硬件執(zhí)行期間,你都能通過(guò)一個(gè)性能剖析過(guò)程單獨(dú)采集到各個(gè)引擎的資源使用信息。這一剖析包含了一個(gè)相應(yīng)獨(dú)立變量(例如矢量大小或位寬度)在某一范圍的數(shù)值對(duì)各種類型資源(內(nèi)存、周期、總線帶寬等)的使用記錄。它可以隨機(jī)地表達(dá)出引擎資源的概況,例如,某個(gè)任務(wù)需要的周期數(shù)并不簡(jiǎn)單地是其輸入范圍的確定函數(shù)。(例如,一個(gè)渦輪式編碼器處理較不完整的輸入矢量就要花更多的周期。)一個(gè)參量表保存著每個(gè)引擎的資源成本,它是引擎元件化描述的一部分。仿真程序執(zhí)行“真實(shí)的”執(zhí)行代碼,但卻用引擎的執(zhí)行代替對(duì)引擎的資源使用率的粗略估算。
因?yàn)橘Y源仿真比周期精確仿真快得多,所以允許你將大量信息通過(guò)一個(gè)候選系統(tǒng)設(shè)計(jì),并檢查兩個(gè)棧之間交互作用的許多情況。這一優(yōu)點(diǎn)對(duì)復(fù)雜多模式系統(tǒng)和基于分組的系統(tǒng)的設(shè)計(jì)師有很大幫助。資源仿真可在一系列運(yùn)行條件下對(duì)系統(tǒng)行為作出有代表性的評(píng)估。一旦你計(jì)算出這種數(shù)據(jù),你就可以利用它做出兩種設(shè)計(jì)時(shí)間的決定,一種是跨硬件基礎(chǔ)的軟件分割;另一種則是作為運(yùn)行期預(yù)測(cè)(隨機(jī))調(diào)度程序的一個(gè)輸入。
多模系統(tǒng)
多模系統(tǒng)包括許多你必須通過(guò)單一物理線程進(jìn)行調(diào)度的獨(dú)立執(zhí)行元件。設(shè)計(jì)師可以假定:雖然引擎資源概況和引擎調(diào)用序列映射是可以實(shí)現(xiàn)的,或者無(wú)論如何是可以推導(dǎo)出來(lái)的,但明確的截止期信息卻是難以得到的。于是你的問(wèn)題就變成:為一個(gè)已指定裝入的系統(tǒng)導(dǎo)出一個(gè)有效的串行調(diào)度計(jì)劃,你可以把它表述為一組系統(tǒng)參數(shù),例如有源通道數(shù)或最大吞吐比特率。每種資源都有一個(gè) 100% 的限制,這就約束了任何此類調(diào)度計(jì)劃在上邊界的效率。(例如,任何用到 120% 可用存儲(chǔ)器的調(diào)度計(jì)劃在某一點(diǎn)是無(wú)效的,或者至少需要進(jìn)一步的工作來(lái)闡明其互斥等待行為。)但是,低于這一點(diǎn),某些加權(quán)會(huì)決定“適合度”。例如,設(shè)計(jì)師可能認(rèn)為存儲(chǔ)器分配保持在 50% 以下的串行調(diào)度計(jì)劃是可取的,因此可對(duì)整體度量進(jìn)行適當(dāng)加權(quán)。
與簡(jiǎn)單的調(diào)度策略(如先到先服務(wù)的策略)相比,多模式問(wèn)題的解決方案需要進(jìn)行更復(fù)雜的處理。具體地說(shuō),一種更復(fù)雜的調(diào)度策略是必不可少的。當(dāng)前的策略既不在很大程度上使用已知引擎資源成本,也不試圖進(jìn)行預(yù)測(cè)。此外,由于處理具有事件驅(qū)動(dòng)的性質(zhì),在一個(gè)實(shí)時(shí)系統(tǒng)中使用截止期常常是不現(xiàn)實(shí)的,特別是在引擎級(jí)使用。一種更復(fù)雜的資源分配策略是必要的,你必須將其當(dāng)作調(diào)度程序的一個(gè)組成部分。
隨機(jī)調(diào)度
設(shè)計(jì)師可以對(duì)在資源仿真時(shí)收集的數(shù)據(jù)進(jìn)行處理,以構(gòu)建一個(gè)引擎請(qǐng)求概率矩陣。該矩陣基于執(zhí)行元件通過(guò)虛擬機(jī)運(yùn)行期內(nèi)核對(duì)引擎的調(diào)用(圖 4)。導(dǎo)出的矩陣是稀疏的,具有許多次“0”轉(zhuǎn)換和很多次“1”轉(zhuǎn)換。但是,一個(gè)有分支的典型棧會(huì)產(chǎn)生一些介于 0 和 1 之間的概率,這是首次將隨機(jī)行為引入到系統(tǒng)中。
圖4 你可以根據(jù)仿真數(shù)據(jù)推導(dǎo)出一個(gè)引擎狀態(tài)轉(zhuǎn)換概率矩陣的概念模型。
在任意給定的時(shí)刻,控制執(zhí)行元件中的各種邏輯線程僅向運(yùn)行期調(diào)度程序提出考慮執(zhí)行的下一個(gè)決定引擎的請(qǐng)求。調(diào)度程序可以使用前述的轉(zhuǎn)換矩陣,以及通過(guò)引擎資源使用概況而獲得的引擎執(zhí)行成本,獲得一些供評(píng)估使用的可能性前瞻情況。
但是,即使 “無(wú)窮盡地”看到未來(lái)狀況是可能的,那也會(huì)在探討的狀態(tài)空間內(nèi)造成各種組合的劇增?紤]一個(gè)一致的“固定”跳距數(shù)也是不可取的,因?yàn)橛行┱{(diào)度程序可能比其它調(diào)度程序更有前途。這里的問(wèn)題與下棋軟件所面臨的問(wèn)題一樣:即必須考慮各種走法可能的未來(lái)結(jié)果。它并不考慮所有的結(jié)果(例如,即使有兩步預(yù)測(cè)的限制),而是采用一套啟發(fā)式的方法來(lái)決定進(jìn)一步發(fā)展哪一種方案。隨機(jī)調(diào)度策略面臨著同樣的難題。
有了生成方案的啟發(fā)式方法,下一個(gè)所需做的步驟就是提供一套計(jì)劃度量標(biāo)準(zhǔn)。你可以利用這些度量標(biāo)準(zhǔn)來(lái)分析由啟發(fā)式生成方法產(chǎn)生的每個(gè)候選方案的價(jià)值,最終用 一個(gè)標(biāo)量“品質(zhì)因數(shù)”值來(lái)表示每個(gè)方案。
這些計(jì)劃量度標(biāo)準(zhǔn)的整個(gè)域通常跨越下列“目標(biāo)”度量中的某些或大多數(shù)度量。這些根據(jù)每個(gè)時(shí)間片和每個(gè)組評(píng)估的度量是:總的存儲(chǔ)器使用率、總的組使用率、發(fā)現(xiàn)時(shí)與截止時(shí)間接近程度和電源使用率等。
你也可以使用很多其它啟發(fā)式度量方法。再回來(lái)看一看用象棋軟件作類比的情況,目標(biāo)度量就類似于基于各部分的價(jià)值去評(píng)估最終位置的價(jià)值,而啟發(fā)式就類似于一個(gè)規(guī)則,如“放在開(kāi)放對(duì)角線上的象的價(jià)值高于只控制較少自由方格的象”。
系統(tǒng)設(shè)計(jì)師可以設(shè)置傳遞函數(shù)曲率——實(shí)際上是決定系統(tǒng)對(duì)資源短缺作出響應(yīng)是早還晚。此外,系統(tǒng)設(shè)計(jì)師還可以確定給每個(gè)計(jì)劃度量賦予的加權(quán),其總和即為最終的一個(gè)標(biāo)量值。
這種虛擬機(jī)范例所使用的方法(隨機(jī)調(diào)度)是多模式問(wèn)題的一種解決方案。它使用了一些在仿真運(yùn)行期間構(gòu)建的預(yù)測(cè)引擎請(qǐng)求轉(zhuǎn)換可能性的表,還用到各引擎資源的使用狀況,使運(yùn)行時(shí)的調(diào)度策略能在時(shí)間上有前瞻性,并且能動(dòng)態(tài)地平衡多個(gè)并行棧的需求。
很顯然,至關(guān)重要的是:隨機(jī)調(diào)度帶來(lái)的好處要超過(guò)其實(shí)現(xiàn)時(shí)在周期和存儲(chǔ)器方面的成本。你可以采用很多專有技術(shù)來(lái)使每個(gè)時(shí)間片的重新計(jì)算需求降至最低程度。只要在運(yùn)行期內(nèi)核中利用安裝合適的插件式調(diào)度策略資源仿真程序來(lái)進(jìn)一步檢查系統(tǒng)性能,你就能確定各種推想實(shí)現(xiàn)方法的效率。
隨機(jī)調(diào)度策略具有優(yōu)于通用方法(例如“最早截止期優(yōu)先”)的效率,因?yàn)樗鼈兙哂锌捎玫念~外信息,而且比靜態(tài)RMA(速率單調(diào)性分析)技術(shù)更適合于通信系統(tǒng)。
資源互斥等待
互斥等待出現(xiàn)在必要的系統(tǒng)處理沒(méi)有及時(shí)發(fā)生時(shí),之所以會(huì)出現(xiàn)互斥等待,乃是因?yàn)闆](méi)有適當(dāng)?shù)馁Y源可用來(lái)調(diào)度這種處理。在很多情況下,一種“更聰明的”調(diào)度策略可以產(chǎn)生好得多的性能,但是,隨著負(fù)載增加,最終會(huì)到達(dá)即使最復(fù)雜的策略也無(wú)法應(yīng)付的程度。這時(shí),系統(tǒng)必須能系統(tǒng)地舍棄某些請(qǐng)求。實(shí)際上,這種舍棄可能就是預(yù)想到的并被公眾所接受的系統(tǒng)行為的一部分——這是為在突發(fā)環(huán)境中存在而必須付出的代價(jià)。重要的事情是,調(diào)度程序要采取行動(dòng),使系統(tǒng)性能逐步降低,而不是引發(fā)災(zāi)難性的故障。
虛擬機(jī)方法下的隨機(jī)調(diào)度成功地為很多類型的多模式方案(豎井方式對(duì)其無(wú)效)生成了有效的串行調(diào)度計(jì)劃。此外,它具有比“簡(jiǎn)單 RTOS”調(diào)度方法有更好的性能。具體說(shuō),隨機(jī)調(diào)度可通過(guò)使用常規(guī)方法無(wú)法得到的額外信息,在運(yùn)行期對(duì)多個(gè)競(jìng)爭(zhēng)棧之間的突發(fā)需求進(jìn)行平衡,從而具有顯著的優(yōu)勢(shì)。資源分布特征引擎(資源消耗大的基本變換)的虛擬機(jī)范例是這種努力的核心,一方面是因?yàn)樗蛘{(diào)度程序提供有關(guān)最重要資源消耗者的額外推斷信息,另一方面,如果要高效地執(zhí)行多模式系統(tǒng)的大型蒙特卡羅通信流量仿真,就必須采用這一方法。
虛擬機(jī)資源仿真程序是必不可少的,因?yàn)樗鼮槊總(gè)執(zhí)行元件提供引擎請(qǐng)求轉(zhuǎn)移概率矩陣。靜態(tài)調(diào)度計(jì)劃不適合用于突發(fā)和多模系統(tǒng),因?yàn)樗鼈兊姆逯蒂Y源使用率與平均資源使用率往往相差很大,而設(shè)計(jì)時(shí)的靜態(tài)調(diào)度計(jì)劃往往關(guān)注于最壞情況下的分析,導(dǎo)致設(shè)計(jì)低效或者不切實(shí)際。只要將執(zhí)行元件與其希望調(diào)用的引擎分離,虛擬機(jī)的運(yùn)行期調(diào)度程序就成為防止開(kāi)發(fā)人員落入“豎井模式”陷阱,并且使他們實(shí)現(xiàn)資源共享的必要步驟。不只是周期,所有的重要資源都需要調(diào)度。因此,你也必須調(diào)度存儲(chǔ)器。存儲(chǔ)器調(diào)度程序可以使最終系統(tǒng)具有接近豎井模式技術(shù)的效率,即在設(shè)計(jì)時(shí)就確定所有或大部分的緩存器,并仍然考慮到突發(fā)性與多模式多供應(yīng)商實(shí)現(xiàn)方法的沖突。
這種替代有問(wèn)題的豎井式開(kāi)發(fā)的方法,是一種基于使用虛擬機(jī)運(yùn)行期內(nèi)核的設(shè)計(jì)方法與工具包。它消除了執(zhí)行軟件對(duì)基本半導(dǎo)體硬件的依賴性,與此同時(shí)還有利于基本引擎的實(shí)現(xiàn)。創(chuàng)新的仿真和優(yōu)化技術(shù)使最終產(chǎn)品的性能和成本效率得到最大限度的提高。這種體系結(jié)構(gòu)允許獨(dú)立的無(wú)線執(zhí)行元件利用虛擬機(jī)內(nèi)核來(lái)安全地共享基本的高 MIPS 引擎。只要?jiǎng)?chuàng)造多標(biāo)準(zhǔn)選購(gòu)件,為未來(lái)的復(fù)雜用戶設(shè)備提供必要的靈活性和成本效率,該方法就具有明顯的優(yōu)勢(shì)。
摘自《END技術(shù)》