摘 要:無線控制器(AC)是WLAN網(wǎng)絡的集中控制中樞,是部署大型無線局域網(wǎng)必不可少的組成部分。AC系統(tǒng)為嵌入式系統(tǒng),要求高吞吐率,低成本,具有一定的實時性。本文介紹一種多線程無線控制器的設計方法,以具體業(yè)務按照優(yōu)先級由高至低的順序劃分多線程。使線程數(shù)目更少,實時性更強,可以同時維護數(shù)千Socket連接數(shù)。本文最后對首要性能指標做出了分析。
關鍵詞:多線程并發(fā);軟實時系統(tǒng);消息隊列;響應時間優(yōu)化
中國分類號:TP311.52
1 按照功能劃分多線程設計方法概述
在進行多線程應用程序設計時,一般是按照對象劃分線程,一個對象對應一個線程。這樣做的好處是可以很方便的擴展對象的數(shù)量規(guī)模,并簡化程序的復雜程度。
但是在嵌入式程序設計當中,對事件的響應時間要求更高,按照對象劃分線程的方法只能保證每個對象獲得CPU的時間的公平的,當CPU成為系統(tǒng)瓶頸時,并無法保證每個對象都可以及時的得到CPU資源。
如果采用按照業(yè)務優(yōu)先級劃分多線程的方法,就可以使按照具體事務對響應時間要求的高低來劃分優(yōu)先級,生成不同優(yōu)先級的多個事件隊列。這樣就可以保證最緊急的事件,在最短的時間內(nèi)得到處理。
圖1 單個對象單個線程模型
如圖1,為處理單個對象的線程結構模型,當CPU調(diào)度到此線程時,依次處理高優(yōu)先級事件,中等優(yōu)先級事件,低優(yōu)先級事件。假設處理高優(yōu)先級事件花費時間為Ta,中等優(yōu)先級事件的花費為Tb,低優(yōu)先級事件的花費為Tc,那么在Nc個CPU的系統(tǒng)中,處理第M個對象的平均等待時間Td為:
(Ta+Tb+Tc)x(M-1)/Nc 公式1
圖2 按照功能劃分多線程模型
如圖2,為按照優(yōu)先級劃分多線程的設計方法,CPU將依次處理三個隊列中的事件,高優(yōu)先級的事件總是最優(yōu)先得到處理。設定CPU調(diào)度方式為FIFO和非搶占,集中處理高優(yōu)先級隊列的線程時間限制為Th,集中處理中優(yōu)先級隊列的線程時間限制為Ti,集中處理低優(yōu)先級隊列的線程時間限制為Tj,則第M個對象的高優(yōu)先級事件得到響應的最大時延為Max(Th,Ti,Tj)。與圖1的設計方法相比較,圖2具有明顯的優(yōu)勢。
根據(jù)業(yè)務優(yōu)先級劃分多線程結構程序設計方法的其他優(yōu)勢還有線程最大個數(shù)可控,響應時間可控,實時性更好等。
無線控制器AC要求一定的實時性,是一個網(wǎng)絡密集型和CPU密集型的軟件系統(tǒng)。適用于本文提出的這種設計方法。如圖3,將AC與AP之間的連接設計為TCP的通信方式,保證報文傳輸?shù)目煽啃?。后續(xù)可以引入OpenSSL,實現(xiàn)報文的加密傳輸。
圖3 AC系統(tǒng)示意圖
采用業(yè)務優(yōu)先級劃分的設計方法,AC系統(tǒng)容易出現(xiàn)多個線程同時發(fā)送數(shù)據(jù)的情況。如圖4,線程B在線程A發(fā)送數(shù)據(jù)完畢后開始發(fā)送數(shù)據(jù)。當線程B發(fā)送的數(shù)據(jù)量超過了TCP發(fā)送隊列的容量時,線程B會被阻塞。如果線程A緊接著也要發(fā)送數(shù)據(jù),則線程A也會被阻塞。直到TCP發(fā)送隊列中有數(shù)據(jù)發(fā)送成功,騰出足夠的空間容納線程B和線程A之后才會恢復。
可以通過下面兩種方法,以避免上述阻塞的情況產(chǎn)生:
(1)將TCP Socket的屬性設置為非阻塞。
(2)將TCP Socket的發(fā)送隊列進行適度的擴大。
(3)在發(fā)送數(shù)據(jù)前,對TCP Socket發(fā)送隊列進行檢查。如果沒有空閑的空間,則放棄發(fā)送。
圖4 TCP阻塞示意圖
為了避免陷入阻塞,可以在發(fā)包前對發(fā)送隊列進行判定,一旦檢測出發(fā)送隊列已滿的情況發(fā)生,則放棄本次數(shù)據(jù)發(fā)送。
2 無線控制器
AC系統(tǒng)的主要目的是發(fā)現(xiàn),控制,管理,維護同一網(wǎng)絡中的無線接入點AP。具體事務可以劃分為發(fā)現(xiàn)探測過程,連接建立過程,鏈路?;钸^程,命令交互過程等等。
表1 無線控制器AC主要功能列表
事務名稱優(yōu)先級單個事務耗時(ms)線程時間片控制
鏈路?;钭罡?對象個數(shù)Mx2
命令交互次高5對象個數(shù)Mx2
連接建立一般100對象個數(shù)Mx2
如表1,可將AC系統(tǒng)劃分為3個專門處理事務的線程和1個負責收包解析并分發(fā)各個事務的連接管理線程。
2.1 連接管理任務設計
連接管理線程主要負責維護與各個AP之間的Socket連接,包括鏈路的協(xié)商,建立和斷開,以及報文的接收等。該線程需要設置為最高優(yōu)先級,確保Socket接收到報文之后,可以立即得到處理。
使用EPOLL機制實現(xiàn)AC與所有AP之間的連接的監(jiān)聽,收到報文后立即分發(fā)至各個業(yè)務模塊。經(jīng)過實際的測試,連接數(shù)可以達到4000以上。
2.2 鏈路?;钊蝿赵O計
然后是鏈路?;罹€程,主要負責定時向AP發(fā)送鏈路?;钕ⅲ⒏鶕?jù)鏈路?;罨貞⑴卸ˋP是否在線。假設?;钪芷跒镵,則要求在K時間內(nèi)發(fā)出M個鏈路?;钕?。否則就會有AP掉線,進而使整個無線系統(tǒng)不穩(wěn)定。出于對系統(tǒng)負載分擔的考慮,并不能簡單的在定時器到期后將M個鏈路?;顖笪募械囊淮涡匀l(fā)出去,因為這樣會使得M個AP在同一時刻內(nèi)集中的發(fā)送鏈路?;铐憫獔笪?,進而瞬間提高AC系統(tǒng)的負載。針對這種情況,一種解決辦法是將M個鏈路?;顖笪脑贙周期內(nèi)均勻的發(fā)送出去。設定?;钪芷贙的誤差為秒級,則每秒需要發(fā)出M/K+1個報文。使用獨立的鏈路?;罹€程,設置線程的喚醒周期為秒。該線程被喚醒時,首先計算本線程上一次執(zhí)行到現(xiàn)在經(jīng)過的時間Ka,然后計算本次線程執(zhí)行需要發(fā)出的鏈路保活報文個數(shù)Ma=Kax(M/K+1),再然后發(fā)出Ma個鏈路保活報文,最后記錄本次調(diào)用發(fā)生的時間,供下一次計算Ka時使用。
鏈路保活任務是絕對不允許被阻塞的。阻塞一旦發(fā)生,不僅引起阻塞的AP會掉線,當阻塞時間較長時,其他AP也會因為得不到響應而陸續(xù)的掉線。因此?;顖笪陌l(fā)送之前,一定要對TCP Socket的發(fā)送隊列進行檢查,如果不滿足本次發(fā)送條件,直接放棄。等待下一次定時器到期后再次嘗試。
圖5 鏈路?;钊蝿樟鞒虉D
2.3 連接建立任務設計
按照時間順序,AP的上線過程第一步是建立連接,包含發(fā)現(xiàn)探測和TCP握手兩個步驟。發(fā)現(xiàn)探測的目的是識別設備類型,預部署,避免連接重復建立,以及確定三層網(wǎng)絡是否暢通。TCP握手步驟以非阻塞的方式進行,可以與多個AP并發(fā)的進行,并可以進一步實現(xiàn)為基于OpenSSL的安全連接TLS。AC作為Server端響應來自AP的TCP連接請求,整個線程每次執(zhí)行只處理一個TCP報文,并不會占用太多的CPU時間。
將該線程的優(yōu)先級設定得比較低,目的是讓CPU優(yōu)先處理已上線的AP的事務,并盡量縮短已發(fā)現(xiàn)的AP的上線時間。該任務的另一個作用是控制并發(fā)連接數(shù),只要為該線程設置單位時間內(nèi)可處理的報文個數(shù),就可以有效的抑制并發(fā)連接個數(shù)。
圖6 連接建立任務流程圖
2.4 命令交互任務設計
命令交互流程是AP上線后,與AC不定時交互數(shù)據(jù)的過程,數(shù)據(jù)量小,具有隨機性,且容易產(chǎn)生突發(fā)的數(shù)據(jù)流。在程序的具體實現(xiàn)中,需要根據(jù)具體的命令的特點,進一步細分若干個具體的任務。
3 性能分析
表2 系統(tǒng)規(guī)格
組件規(guī)格
CPU單核533MHz
內(nèi)存DDR2 512MB
以太網(wǎng)控制器千兆
系統(tǒng)總線32位
內(nèi)置存儲器Nor-flash 32MB
OS嵌入式Linux
3.1 吞吐率(R)
使用wireshark抓包統(tǒng)計系統(tǒng)的TCP數(shù)據(jù)報文吞吐率如表3。可以得出吞吐率為100個/秒。將大量數(shù)據(jù)合并到一個報文中進行發(fā)送,可以提升實際業(yè)務的處理效率。
表3 TCP數(shù)據(jù)報文統(tǒng)計
報文統(tǒng)計周期報文數(shù)量
5分鐘30012
10分鐘60020
15分鐘90040
20分鐘120055
3.2 命令交互響應時間
一次完整的命令交互至少包含兩條消息,一個是AP發(fā)給AC,另一個是AC發(fā)給AP;或者相反。復雜的命令則需要多次交互。這里將命令交互響應時間定義為一次報文交互所消耗的時間。
如果發(fā)生命令交互之時,系統(tǒng)處于空閑狀態(tài),則可根據(jù)吞吐率(R)計算一次命令交互的響應時間為2R=20ms。
考慮到整個系統(tǒng)對線程原子操作的時間控制在1秒(設為變量U,單位ms)以內(nèi),當發(fā)生命令交互之時,如果系統(tǒng)處在繁忙狀態(tài),則AC系統(tǒng)響應一次命令交互,會產(chǎn)生最多1秒的延時。此時響應時間為(U+2R)毫秒。
綜合任務優(yōu)先級考慮,命令交互的優(yōu)先級排在鏈路保活之后,鏈路?;钚枰l(fā)送M個?;顖笪摹4藭r響應時間為(U+(M+2)xR)毫秒。
3.3 AP并發(fā)上線時間
AP上線時間是衡量系統(tǒng)綜合性能的一個重要指標,能夠真實的體現(xiàn)到用戶體驗中。AC系統(tǒng)處理AP上線是通過連接建立,命令交互等多個線程協(xié)同處理完成的。期望的運行結果是類似于對數(shù)曲線的效果。
參考文獻:
[1]徐文超.802.11無線網(wǎng)絡資源管理算法研究[D].2011
[2]趙俊.IEEE 802.11無線局域網(wǎng)性能分析和優(yōu)化[D].2003
[3]何劍,劉鐮斧編著.Linux實時性能瓶頸分析[J].成都信息工程學院學報,2005.
作者簡介:賈非(1984.01-),男,就職于神州數(shù)碼網(wǎng)絡公司,高級開發(fā)工程師。
作者單位:北京信息科技大學 理學院,北京 100192
基金項目:國家自然科學基金號:61473325