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