• 沒有找到結果。

IEEE 802.11e HCCA 中改善傳輸效能之動態排程演算法

N/A
N/A
Protected

Academic year: 2021

Share "IEEE 802.11e HCCA 中改善傳輸效能之動態排程演算法"

Copied!
62
0
0

加載中.... (立即查看全文)

全文

(1)國立臺灣師範大學應用電子科技學系 碩士論文. 指導教授:黃政吉博士. IEEE 802.11e HCCA 中改善傳輸效能 之動態排程演算法 A Dynamic Scheduling Algorithm for Performance Improvement in IEEE 802.11e HCCA. 研究生:張哲瑜. 撰. 中 華 民 國 97 年 7 月.

(2) 國立臺灣師範大學應用電子科技學系. 碩士論文. 指導教授:黃政吉博士. IEEE 802.11e HCCA 中改善傳輸效能 之動態排程演算法 A Dynamic Scheduling Algorithm for Performance Improvement in IEEE 802.11e HCCA. 研究生:張哲瑜. 撰. 中 華 民 國 97 年 7 月.

(3) IEEE 802.11e HCCA 中改善傳輸效能 之動態排程演算法 學生:張哲瑜. 指導教授:黃政吉博士. 國立臺灣師範大學應用電子科技學系碩士班. 摘. 要. 在 IEEE802.11e 的修正草案中,提出了根據平均的封包大小和資料產生率來 計算 TD (TXOP Duration)及 SI (Service Interval)的演算法,但卻無法適用於 VBR (variable bit rate)資料流。因此,在相關研究裡提出一個 TXOP timer 的機制,利 用可變的輪詢週期以及可變的 TD 來適應 VBR 的資料型態。此外在 TXOP timer 的基礎上,更有研究提出了利用佇列的資料量資訊 QS (Queue Size)來分配準確的 TXOP。雖然在 TXOP 配置方面可因此接近於完美,但在資料流量控管方面仍然 有很大的改善空間。這是因為 TXOP timer 的增長速率為一平均值,因此在服務 VBR 封包時會導致若干封包無法在延遲範圍內接受服務。本論文將提出一個有效 的排程演算法來改善 TXOP timer 機制,而作法主要是將 QSTA (QoS Station)的服 務分成輪詢及傳送兩部分。在輪詢部分將使用 VBR 最短的服務區間以準確的掌 握 VBR 的封包產生時間;在傳送部分針對 TXOP timer 的傳輸限制提出無 timer 傳輸條件以及根據 QS 調整之變動 timer 傳輸條件來改善傳輸效能。經由模擬發 現本論文作法可以有效的改善封包的延遲及遺失,並且能達到較高的吞吐量。 關鍵字:wireless local area network (WLAN), IEEE 802.11e, scheduling. i.

(4) A Dynamic Scheduling Algorithm for Performance Improvement in IEEE 802.11e HCCA –––––––––––––––––––––––––––––––––––––––––. student:Che-Yu Chang. Advisors:Dr. Jeng-Ji Huang,. Institute of Applied Electronics Technology National Taiwan Noraml University. ABSTRACT. In IEEE 802.11e, the provision of parameterized quality of service (QoS) is enabled by a polling-based scheduling. The scheduling deals with assignments of transmission opportunities (TXOPs) to QoS stations (QSTAs) at proper polling time instants, and it is inefficient for variable bit rate (VBR) traffic streams if both of the TXOP durations and the polling instants are estimated based on mean values declared in the respective traffic specifications (TSPECs). Although the efficiency can be improved by adapting TXOP durations according to the backlogged traffic reports issued by QSTAs, a problem still remains if polling instants are determined by mean-value timers. In this paper, we first point out the performance impairment that may be caused by mean-value timers, then a traffic scheduling algorithm using an adaptive timer is proposed to remedy this problem. Keywords: wireless local area network (WLAN), IEEE 802.11e, scheduling.. ii.

(5) 誌. 謝. 首先誠摯的感謝指導教授黃政吉博士的細心教導使我能了解無線網路這門 技術。在研究過程中不時的與我討論並指點我正確的方向,使我在這兩年獲益匪 淺。而老師對研究的嚴謹更是我學習的典範。 感謝張森境、汪威霆、陳宜玄學長們不厭其煩的指出我研究中的缺失,且總能 在我迷惘時為我解惑,也感謝台師大應用電子科技研究所全體同學的幫忙,恭喜 我們順利走過這兩年。實驗室的吳宗哲、劉益興學弟當然也不能忘記,你們的幫 忙及搞笑我銘感在心。 最後感謝在我背後的默默支持我的家人,沒有你們的體諒、包容,我便不會 有現在的成就。. iii.

(6) 目. 錄. 中文摘要………………………………………………………………i 英文摘要………………………………………………………………ii 誌. 謝……………………………………………………………………iii. 目. 錄…………………………………………………………………………iv. 圖 目 錄…………………………………………….……………………………vi 表 目 錄…………………………………………………………………………vii 第一章. 緒論………………………………………………………………………...1. 1.1. 前言………………………………………………………………….……..1. 1.2. 研究目的……………………………...……………………………………4. 1.3. 其他相關研究……………………………..……………………….………6. 1.4. 論文架構…………………………………..……………………….………7. 第二章. 相關知識及作法介紹………………………..…………………….………7. 2.1 HCCA 機制介紹………………………………..……………………………7 2.2 HCCA 運作……………………………………..……………………………8 2.2.1 HCCA 運作原理……………………………………………………...8 2.2.2 ns-2 簡介………………………………………………………………9 2.2.3 HCCA 的程式實作………………………………………………….10 2.2.4 NS2HCCA……………………………………………..……….. …..12 2.3 HCCA 參考排程演算法………………………………………………........13 2.3.1 排程原理…………………………………………………....………..13 2.3.2 程式實作……………………………………………………………..15 2.4 SETT-EDD 排程演算法………………………………………………........18 2.4.1 排程原理……………………………………………………………18 2.4.2 程式實作……………………………………………………………21 2.5 ARROW 排程演算法………………………………………………………24 2.5.1 排程原理…………………………………………………………….24. iv.

(7) 2.5.2 程式實作…………………………………………………………….26 2.6 適應性排程演算法………………………………………………………...29 2.6.1 排程原理…………………………………………………………....29 2.6.2 程式實作……………………………………………………………30 第三章. 論文作法介紹…………………………………………………….………33. 3.1 ARROW 與適應性排程比較………………………….…………………...33 3.2 論文作法…………………………………………………………………...36 3.3 程式實作…………………………………………………………………...38 第四章. 模擬結果……………………..……………………………………...........45. 4.1 模擬情境與參數設定…………………...………………………………….45 4.2 模擬相關程式………………………………………………………………45 4.2.1 Otcl 程式…………………....………………………………………..45 4.2.2 awk 程式……………………………………………………………..47 4.3 模擬結果…………………...……………………………………………….49 4.3.1 系統吞吐量(throughput)分析………………….…………………...49 4.3.2 封包平均延遲(mean delay)分析…………………...………………50 4.3.3 封包遺失率(loss rate)分析……………...………………………….50 第五章. 結論….……………………………...………...……………..……………52. 參考文獻…………………………………………………………….…………….53. v.

(8) 圖 目 錄 圖 1-1:封包分佈與產生區間分佈………………...………...…………..…………….2 圖 1-2:token bucket 示意圖……………...………...……………..…….......................3 圖 2-1:TSPEC 資訊格式……………...………...……………..………………………7 圖 2-2:IEEE802.11e HCF 範例……………...………...……………..……………….9 圖 2-3:HCCA 模擬結構………………………………………..…………….………10 圖 2-4:MAC 封包交換程序……………...………...……………..………….………11 圖 2-5:Simple 示意圖………………...……...……………..…………….…………..15 圖 2-6:SETT-EDD 範例………………………………………..……….……………20 圖 2-7:SETT-EDD 模擬結構示意圖………………...………...……….……………21 圖 2-8:Add_Timer()結構示意圖……..………...………...……………..……………22 圖 2-9:ARROW 傳輸範例…………..…...………...……………..………………….24 圖 2-10:服務時間 tdue 與 Start Service Time 的關係示意圖…..…………………....29 圖 3-1:ARROW 服務固定週期 VBR(如 H.261 與 MPEG4)的情況…….…………33 圖 3-2:ARROW 服務非固定週期 VBR(如 H.263)的情況…….…………………...34 圖 3-3:適應性排程服務固定產生週期和非固定產生週期的情況…………..…….35 圖 3-4:適應性排成滿載之情況…………..………………………………………….35 圖 3-5:論文作法服務非固定週期 VBR 之情況…………………………………..…36 圖 3-6:論文作法封包遺失之情況…………………………..…………………….…37 圖 3-7:無傳輸限制在服務非固定封包產生週期之情況…..…………………….…38 圖 3-8:[9]所提出之事件程序……………………..……………………………….…39 圖 3-9:論文所提出之事件流程……………………..………………………….……40 圖 4-1:系統吞吐量成效圖……………..………………………………………….…49 圖 4-2:平均封包延遲時間分佈圖……………………………………………………50 圖 4-3:平均封包遺失率分佈圖………………………………………………………50. vi.

(9) 表 目 錄 表 1-1:VBR 特性統整表……………………...………………………………………3 表 3-1:ARROW 及適應性排程之特性統整表……..……………………………….35 表 4-1:系統參數………………………………………………………………………45. vii.

(10) 第一章. 緒論. 1.1 前言 隨著無線區域網路的日益普及,也帶動了影音多媒體在無線網路的相關應 用。在無線網路上傳遞多媒體資料,最主要的困難在於維持媒體資料的時效性, 較有效率的作法是利用所謂的多媒體影音串流技術(streaming)。多媒體影音串 流技術的原理,是把每個要播出的資料單元先分割成許多大小適當的封包,再傳 送到使用者端。由於類比影音經轉換成數位形式後,資料量是非常驚人的;並且 數位影音對時間的敏感性很強,即時性要求很高。因此,數位影音的傳輸一般先 經過壓縮使檔案變小後,經由網際網路傳輸到用戶端後,解壓縮以顯示或播放影 音內容。. 目前廣泛使用的壓縮技術主要有 MPEG4、H.261、H.263 等,不同的壓縮技 術之間有不同的特點,以適應不同的應用,在[1]中提供了許多原始影像經過不同 壓縮技術壓縮後的 trace 檔。以電影 Jurassic park 及 Troopers 為例[1],經過 MPEG4、H261 及 H.263 壓縮技術壓縮後的封包大小與產生區間分佈如圖 1-1 所 示。我們可發現三種不同壓縮技術的封包大小分佈有著很大的差異性;並且在封 包的產生間隔方面,H.263 有著高變動性的封包產生間隔,不同於 H.261 及 MPEG4 固定的間隔。不同壓縮技術所產生的串流特性統整如表 1-1 所示。. 經由上述壓縮技術產生的影像串流便是產生變動性資料率 VBR (variable bit rate)的資料串流。如何確保 VBR 串流的服務品質(Quality of Service,QoS)是現今 許多研究的主要課題。. -1-.

(11) (a). (b). (c). (d). (e). (f). 圖 1-1:封包分佈與產生區間分佈:(a)、(b) H.261;(c)、(d) H.263; (e)、(f)MPEG4。(資料來源:[1]). -2-.

(12) 表 1-1:VBR 特性統整表 H.261. MPEG4. H.263. Packet Size. variable variable variable. Packet interval. constant constant variable. Mean Data Rate constant variable constant. 在無線區域網路(wireless local area network,WLAN)中,以碰撞機制為基礎 之 IEEE 802.11 DCF (distributed coordination function),無法完整地確保即時性 VBR 串流之服務品質。因此,802.11e 標準[2]改善傳統 802.11 的無線網路媒介存 取(medium access control,MAC)協定,以提供更多即時性資料的服務品質保證。. 雖然 802.11e 提供了增強的服務品質保證,但對於 HCCA 排程的資料流量監 督(policing)以及傳輸時間(TXOP Duration)分配仍然缺乏有效的管理。因此,在[3] 裡提出了一個 TXOP timer 的機制,利用 QSTA (QoS Station)等待的時間及 timer 增長率(TD/mSI),以配置變動的傳輸時間。TXOP timer 可視為類似有線網路中之 token bucket 的效果,如圖 1-2 所示。. 圖 1-2:token bucket 示意圖。 -3-.

(13) 假設一個 token bucket 最大可以存放 b 個 token,並且以速率 r (token/sec)累增。倘 若傳送一個封包需要一個 token,則所能傳送的封包數便取決於累積的 token 量。 如果 token bucket 沒有任何 token 又需要傳送封包,便必須等待 token 產生。如此, 可利用 token bucket 的 token 增長率來控制資料流量。而[3]所提出的 TXOP timer 機制,timer 會以 TD/mSI 的速率累增,其中 mSI (minimal Service interval)為資料 流的最小輪詢週期,其計算方法為平均封包大小除以平均資料產生率(L/ρ);所以 timer 會每隔 mSI 增長一個 TD。除此之外,為了保證過大封包可以有效傳送,TXOP timer 機制另設定了一個傳輸門檻值,只有 timer 在大於門檻值的情況下才能傳送 資料,而此門檻值通常設定為資料流裡最大封包所需的傳送時間。所以如果一個 資料流有不尋常的產生速率,便可以利用 TXOP timer 所設定的傳輸條件來限制 資料的傳送量。. 1.2 研究目的 本論文主要是在 802.11e HCCA TXOP 配置的基礎上製作一個動態調整 timer 傳輸條件的排程演算法。亦即考慮流量控管的前提下針對各個 QSTA 所產生資料 流的個別特性調整傳輸條件,以提高無線網路通道的整體傳輸效能(throughput)、 改善封包延遲(delay)及遺失率(loss rate)。. 802.11e 的參考排程演算法(reference scheduler)中,僅考慮資料流(Traffic Stream,TS)的平均資料產生速率(mean data rate)、最大服務間隔時間(maximum service interval,MSI)、實體層速率(physical rate,PHY)等參數。因此,每一個 QSTA 所配置的傳送時間 TD 將會是一個平均值。然而,如果資料流的資料特性 為 VBR,則選用平均的 TD 會是非常不符合效率的。. -4-.

(14) 針對這個問題,[3]提出 SETT-EDD 演算法,改用 TXOP timer 的方式取代原 本固定的 SI 以及平均的 TD,使得通道所能服務的 QSTA 個數能夠獲得改善,並 利用 TXOP timer 的傳輸條件達到流量控管的效果。但 802.11e 參考排程演算法與 SETT-EDD 中 TD 之配置,皆是以估測(estimate)的方式獲得,因此不免造成通道 的浪費。於是[4]提出了利用 Queue Size (位於 802.11e 封包內 header 的 QoS 欄位) 來計算出正確的 TXOP 需求,以達到無線通道的完整利用。然而,[4]為了計算準 確的 TD,封包的傳送必須分成『上傳 QS』、『分配 TD』兩階段來完成,需花 費兩次的輪詢時間。另一方面,因為[3]、[4]的輪詢頻率取決於 QSTA 的 TXOP timer 增長速率(TD/mSI);並且只有在 TXOP timer 大於傳輸門檻值才能接受輪詢。若 服務的 VBR 為固定封包產生區間(如 H.261、MPEG4),其資料產生較密集且規 律,因此所計算出來的最小輪詢週期 mSI 會相近於資料流的封包產生週期,也就 是 timer 的增長速率會相近於資料的產生速率(資料流每隔 mSI 產生一個封包,而 timer 每 mSI 增長一個 TD)。以圖 1-1 中的 H.261 為例,封包的產生週期固定為 0.04s,而由平均封包 1279byte 除以平均資料率 256kbit/s 而得的 mSI 為 0.0399s。 然而,若是服務變動封包產生區間的 VBR (如 H.263),其資料產生較分散且不規 律,這使得資料流的封包比其他壓縮技術來的龐大,計算出來的最小輪詢週期 mSI 也就比多數的封包產生週期來的長;也就是說 timer 的增長速率會小於資料 流內多數封包的產生速率,因此使得封包無法在的延遲範圍內輪詢而造成封包遺 失。以圖 1-1 中的 H.263 為例,封包的產生週期為 0.04、0.08、0.12、0.16…等, 而由平均封包 4533byte 除以平均資料率 256kbit/s 而得的 mSI 為 0.1416s。. 另一方面,在[5]裡提出了一個適應性排程演算法以改善 SETT-EDD,使之能 服務更多種類型的 VBR。主要的作法是不使用 TXOP timer 的機制(也就是不設定 傳輸條件),而將 QSTA 的服務開始時間(ServiceStartTime)參數列入排程的考慮因 素,並根據不同類型的 VBR 提供適當的輪詢週期。而[5]又額外考慮 QSTA 的佇 列情況以確保封包能在延遲範圍內接受輪詢。但由於[5]的 TD 仍是用平均值的方 -5-.

(15) 式獲得,將造成可接受服務的 QSTA 個數僅維持一定數目。. 為了改善封包的延遲及遺失而仍然能維持高吞吐量,本論文將設計一個結合 [4][5]優點的 HCCA 排程器。首先,在考慮 QSTA 的佇列情況下,將 QSTA 的服 務分成輪詢及傳送兩部分。在輪詢部分,我們以 VBR 最短的封包產生區間作為 QSTA 的輪詢週期,以準確的掌握變動封包產生區間的 VBR,並根據 QSTA 的 Queue Size 傳輸需求計算準確的傳輸時間;而在傳送部分我們主要針對 TXOP timer 的傳輸限制分別提出『無傳輸限制條件』以及『可根據 QS 傳送時間調整的 變動傳輸條件』來改善傳輸延遲時間。. 1.3 其他相關研究 除了上述以802.11e參考排程演算法為基礎之SETT-TDD [3]、ARROW [4]及 [5]之外,在[6]中針對HCCA排程演算法的TXOP分配問題,HC會根據各個QSTA 前 ㄧ 次 輪 詢 及 當 次 輪 詢 的 佇 列 差 量 , 利 用 PID 控 制 器 (proportional-integral-derivative controller)的誤差修正原理,以調整TD的分配。在 [7]中,針對802.11e的HCCA提出考慮MAC層以及跨層級(cross-layer)的適應方 法,並使用類神經網路(neural networks)的學習系統,修改MAC層的參數並進而改 善802.11e的服務品質。另外,[8]針對HCCA排程演算法的TXOP分配問題,各個 QSTA的佇列量將根據資料流的延遲時間會以權重(weight)表示,延遲越久的資料 將會有越大的權重值,並且以線性規劃(linear programming)的方式計算最佳化的 TD分配。然而,[6] 與[8]之計算並未將各個封包之延遲限制(delay bound)加入考 慮,所得之模擬結果僅為封包之平均時間延遲。. -6-.

(16) 1.4 論文架構 在本論文後續的章節中, 第二章主要是針對IEEE 802.11e HCCA、以及相關 作法的詳細介紹(包含ns-2程式碼),第三章將介紹我們所提出的通道排程演算法 (包含ns-2程式碼),第四章為實驗結果,第五章為結論。. 第二章 相關知識及作法介紹. 2.1 HCCA 機制介紹 當IEEE802.11e執行HCCA時,QSTA會先將資料流(Traffic Stream,TS)的相關 參數(Traffic SPECification,TSPEC)上傳至混合控制器(hybrid controller,HC), TSPEC的資訊格式如圖2-1所示:. 圖2-1:TSPEC資訊格式。(資料來源:[2]) 由於802.11e使用封包叢集之作法,也就是,QSTA取得了通道使用權時,可 以在給予的時間內連續傳送多個訊框,而不用重新競爭通道的使用權。因此,若 QSTAi 有 ni 個資料流,可利用其TSPEC參數計算叢集服務(aggregate service)之排程. 參數: n. 最小 TXOP 長度(minimum TXOP Duration,mTD):為 QSTAi 所有資 料流中之最大封包產生時,所需花費的傳送時間。mTD 主要是為了. -7-.

(17) 避免最大封包產生時,因 TD 太小而無法順利將其傳送出去,形成死 結(deadlock)。 M ij 、 Rij 分別為第 j 個資料流最大封包大小和實體速率。 M mTDi = max  ij j∈[1,ni ] R  ij. n.    . (1). 最大 TXOP 長度(Maximum TXOP Duration,MTD):當所有資料流均 產生最大叢集時,所需花費的傳送時間。 MTDi. ∑ =. ni j =1. MBS ij. Ri. (2). 其中, MBS ij 為第 j 個資料流之最大叢集長度(maximum burst size)。 n. 最小服務週期(minimum Service Interval,mSI):為兩次 TXOP 配置 之間的最小時間間隔。 mSI i = min (mSI ij ) j∈ni. (3). 其中, mSI ij 為第 j 個資料流之最小服務週期。 n. 最大服務週期(Maximum Service Interval,MSI):為兩次 TXOP 配置 之間的最大時間間隔。 MSI i ≤ Di − MTDi. (4). 其中, Di = min ( Dij ) 。 j∈ni. 2.2 HCCA 的運作 2.2.1 HCCA 運作原理 在HCF的機制中,HC (Hybrid Coordinator)於任何時刻都可以在等待一段PIFS (PCF interframe space)的時間後,立即傳送MSDU。由於PIFS的長度小於DIFS -8-.

(18) (DCF interframe space),因此HC擁有比較高的優先權等級。圖2-2為IEEE802.11e HCF的範例:在免競爭週期(contention-free period,CFP)中,HC所輪詢之QSTA, 將得到一段Polled TXOP的時段以進行傳輸;而其他QSTA必須等待,直到被輪詢 之後才能進行傳輸。在競爭週期(contention period,CP)中,除了各個QSTA會去 競爭通道的使用權之外,HC可以藉由傳送一個QoS CF-Polled的訊框,配置QSTA 一段Polled TXOP的時段。HC在無線傳輸媒介閒置了一個PIFS的時間後,不需要 執行後退(backoff)程序就可以傳送QoS CF-Polled訊框。所以,HC可以利用其主控 無線傳輸媒介存取的優勢,給予QSTA傳送即時性資料封包的機會。HC在競爭週 期內,給予一個或多個QSTA存取的時期,稱之為CAP (Controlled Access Period)。. 圖 2-2:IEEE802.11e HCF 範例,其中包含 CFP 與 CP 期間之 QoS CF-Poll。 (資料來源:[2]). 2.2.2 ns-2 簡介 ns-2 是一個針對網路技術開發的免費模擬軟體,研究人員使用它可以很容易 的進行網路技術的開發,而且發展到今天,它所包含的模組已經非常豐富,幾乎 涉及到了網路技術的所有方面。所以,ns-2 成了目前學術界廣泛使用的一種網路 模擬軟體。在每年國內外發表的有關網路技術的學術論文中,利用 ns-2 給出模擬 結果的文章最多,通過這種方法得出的研究結果也是被學術界所普遍認可的。. -9-.

(19) ns-2 使用 C++和 Otcl 作為開發語言。ns-2 模擬分兩個層次;一個是僅編寫 OTcl 語言的層次;另一個是編寫 C++和 OTcl 語言的層次。前者利用 ns-2 已有的 網路元素來實現模擬,不需修改 ns-2 本身,只需編寫 OTcl 腳本;而當 ns-2 沒有 所需的網路元素時,則需要利用後者來增加所需網路元素,也就是增加新的 C++ 和 OTcl 類別,編寫新的 OTcl 劇本。. 2.2.3 HCCA 的程式實作 在 HCCA 的模擬方面,將採用[9]所提出的模擬結構,如圖 2-3 所示:. 圖 2-3:HCCA 模擬結構。(資料來源:[9]) 在此結構中最主要部份為 Classifier、HCCA Scheduler、MAC 模組。其中 Classifier 的主要工作是對可服務資料流所產生的封包做分類的動作。每一個被分 類的封包將擁有一個 Traffic Identifier (TID),決定此封包將於 HCCA 或 EDCA 週 期處理,並且只有從 Link Layer 到 MAC Layer (downlink)的封包才需要做分類的 動作,因為 uplink 的封包只是要傳送至更高的層級,不需要任何的排程或是優先 權差別待遇。在 MAC 模組中主要的工作為處理資料傳遞時所需要的封包交換動 作,並定義所有在封包交換的過程中會產生的事件,分別為: • HCCA_HAS_CONTROL:掌握通道的使用權。在 QSTA 方面,只有當 QAP 發送輪詢的封包給 QSTA 才能擁有使用權,而在 QAP 方面,當通道閒置超. -10-.

(20) 過 PIFS 或是 QSTA 傳完資料後便能取得使用權。 • HCCA_LOST_CONTROL:失去通道使用權。在 QSTA 方面,當資料傳完 時便會失去使用權,在 QAP 方面,當發送輪詢的資訊給 QSTA,並且 QSTA 有做回應時便會輸去使用權。 • HCCA_DATA_RECV:當 QAP 或 QSTA 接收到的封包為資料封包時便會 產生此事件。 • HCCA_RECV:當 QAP 或 QSTA 接收到任何封包時便會產生此事件。 • HCCA_SUCCESS:當 QAP 或 QSTA 成功傳送資料並且接收到 ACK 封包 時便會產生此事件。 • HCCA_TRANSMIT:當 QAP 或 QSTA 須開始傳送封包時便會產生此事件。 • HCCA_TX_END:當 QSTA 使用完 TXOP 時,在 QAP 端便會產生此事件。 • HCCA_CAP_HAND :當 CAP 週期開始執行時便會產生此事件。 圖 2-4 為 MAC 模組執行封包交換時,各個事件的發生點:. 圖 2-4:MAC 封包交換程序。(資料來源:[9]). 在開始執行 CAP 週期時,會產生一個 CAP_HAND 的事件。接著在經過 PIFS 的時間後 QAP 掌握通道的使用權,並且傳送一個 CF-Poll 的封包給 QSTA,因此 會產生 HAS_CONTROL 以及 TRANSMIT 的事件。而當 QSTA 接收到 CF-Poll 封 包的時候,便能獲得通道的使用權並且產生 RECV 以及 HAS_CONTROL 事件。 -11-.

(21) 然後經過 SIFS 的時間後 QSTA 便會開始傳送資料封包,並產生 TRANSMIT 的事 件。而當 QAP 接收到資料封包時便會產生 RECV 以及 DATA_RECV 的事件,並 且經過 SIFS 時間傳送一個 ACK 封包以及產生 TRANSMIT 事件。接著 QSTA 接 收到 ACK 封包時便會產生 RECV 以及 SUCCESS 事件代表一個資訊封包的完整 傳遞。當 QSTA 使用完 TXOP 後,QAP 端便會產生 HAS_CONTROL 事件重新獲 得通道使用權。. 在執行 MAC 封包交換動作的時機最主要是由 HCCA Scheduler 所掌控的。 HCCA Scheduler 中存在了一個 CAP_Timer 以通知 MAC 模組何時該進行 CAP 週 期,並且 HCCA Scheduler 也會擁有一套排程演算法,負責產生輪詢表以通知 MAC 當 QAP 掌握通道使用權時該向哪一個 QSTA 傳送 CF-Poll 封包。其中本論文在以 ns-2 實現的部份最主要的工作,也就是將 HCCA Scheduler 演算法修改成本論文 所提出的演算法。. 2.2.4 NS2HCCA NS2HCCA 為[9]提供的一個 802.11e 排程規約,在實作裡分別有 mac-802_11e.cc、mac-802_11e.h、mac-hccasched.cc、mac-hccasched.h、 mac-hccasched_oneflow.cc、mac-hccasched_oneflow.h、mac-hccasched_periodic.cc、 mac-hccasched_periodic.h、mac-hccasched_map.cc、mac-hccasched_map.h、 mac-hccasched_map_ref.cc、mac-hccasched_map_ref.h。. 以上檔案,mac-802_11e.cc、mac-802_11e.h 主要是負責封包的交換作業; mac-hccasched.cc、mac-hccasched.h 描述 QSTA 和 AP 皆須具備的功能函數; mac-hccasched_oneflow.cc、mac-hccasched_oneflow.h 以及 mac-hccasched_periodic.cc、mac-hccasched_periodic.h 分別描述 QSTA 和 AP 個別 需擁有的功能函數;mac-hccasched_map.cc、mac-hccasched_map.h、 -12-.

(22) mac-hccasched_map_ref.cc、mac-hccasched_map_ref.h 定義了 AP 在做通道排程時 所用的方法。. 在 mac-802_11e 檔案裡定義了三個類別,分別為 Status、SchedulerTxData、 Mac802_11e。Status 主要表示一個 QAP 或 QSTA 的狀態;SchedulerTxData 則表 示 QAP 或 QSTA 所要傳送的資料型態;例如:poll frame、data frame、ack frame 等;而 Mac802_11e 用來描述 QAP 或 QSTA 對於通道以及資料的控制函數。. 在 mac-hccasched、mac-hccasched_oneflow、mac-hccasched_periodic 中分別定 義了 MacHccaSched、MacHccaSchedQSTA_oneflow、MacHccaSchedQAP_per 三 個類別,其中 MacHccaSchedQSTA_oneflow、MacHccaSchedQAP_per 皆為 MacHccaSched 的子類別。此三個類別分主要定義 QSTA 或 QAP 封包產生所需執 行的 addTSPEC、enque、deque 等。. mac-hccasched_map、mac-hccasched_map_ref 則分別定義了 MacHccaSchedMap、MacHccaSchedMap_ref 兩個類別,其中 MacHccaSchedMap_ref 為 MacHccaSchedMap 的子類別。主要是用來計算有關通道排程的各個參數值, 如各個 QSTA 所擁有的 mSI 及 MSI,Simple scheduler 所需決定的 SI 和 TD,以 及決定出排程的 polling List。. 2.3 HCCA 參考排程演算法(或稱為 Simple Scheduler) 2.3.1 排程原理 在 802.11e 的參考排程演算法中,以輪詢方式進行資料傳輸的免競爭週期或 CAP 裡,必須根據下列步驟計算服務週期(Service Interval,SI)、TXOP 大小、以 -13-.

(23) 及允入控制單元(Admission Control Unit,ACU)。. Step 1:HC 根據所有 STAs 提出 TSPEC 參數中之最大服務週期(Maximum Service Interval,MSI),挑選出其中最小的 minMax SI。接著再由導引信號週期 (beacon interval)的因數中,選出小於 minMax SI 的最大者,作為共同的 SI。例如: ■. Beacon Interval = 500 ms。. ■. 三個 STAs 的 MSI 要求分別為 180 ms、150 ms 和 200 ms。. ■. 則選出 125 ms 作為共同的 SI (因 125 為 500 的因數中,小於 180、150 和 200 之最大者)。. Step 2:HC 根據 STA 所提出之其他 TSPEC 參數,計算應分配多少 polled TXOP 給該 STA。 ■. 首先,利用 Mean Data Rate ( ρ i )及 Nominal MSDU Size ( Li ),計算 QSTAi 在 SI 內可以傳送的 MSDUs 數目 N i :  SI × ρ i  Ni =    Li . ■. (5). 然後,利用 PHY ( Ri )、Maximum MSDU Size (M)、Overhead (O)計算分配 給 QSTAi 的 TXOPi (應至少可傳輸一個 Maximal MSDU):  N × Li  M TXOPi = max  i + O, + O  Ri  Ri . ■. (6). 最後,HC (如圖 2-5 所示,以 i、j、k 為例)在每個 SI 內,依序對各個 STA 提供 Polled TXOP:. -14-.

(24) 圖 2-5:HC 在共同的服務區間(SI)內,依序對各個 STA 提供 Polled TXOP。 (資料來源:[2]) Step 3 (ACU):若系統已服務 k 個資料流,當第 k+1 個資料流提出申請時: ■. 若 k TXOPk +1 TXOPk T − TCP , +∑ ≤ SI SI T i =1. (7). 其中 T 為 Beacon 週期,而 TCP 為 EDCA 之週期長度。 ■. 則表示 SI 尚有空間,ACU 將允許第 k+1 條資料流進入系統。. 2.3.2 程式實作 Simple Scheduler 是在 MacHccaSchedMap_ref 裡實現的排程演算法,主要程 式碼如下: txop_desc* MacHccaSchedMap_ref::createTXOPDesc(TSPEC& tspec) { //每建立一個資料流,便會建立一個新的 txop_desc 來存放新加入的 tspec 參 //數 txop_desc* newdesc = new txop_desc; newdesc->next = 0; newdesc->tid = tspec.tid; newdesc->qsta = tspec.qsta; newdesc->direction = tspec.direction; newdesc->periodic = tspec.periodic; newdesc->mean_rate = tspec.mean_data_rate; newdesc->max_SI = tspec.maximum_SI; newdesc->mean_sdu_size = tspec.nominal_SDU_size; newdesc->max_sdu_size = tspec.maximum_SDU_size; newdesc->db = tspec.delay_bound; //計算出一個平均封包所需的傳送時間 newdesc->mean_time = phymib_.getSIFS() + mac_->txtime( tspec.nominal_SDU_size + phymib_.getHdrLen11e(), mac_->getDataRate()) + phymib_.getSIFS() + mac_->txtime(phymib_.getHdrLen11e(), mac_->getBasicRate()); //計算出一個最大封包所需的傳送時間 newdesc->max_time = phymib_.getSIFS() + mac_->txtime( tspec.maximum_SDU_size + phymib_.getHdrLen11e(), -15-.

(25) mac_->getDataRate()) + phymib_.getSIFS() + mac_->txtime(phymib_.getHdrLen11e(), mac_->getBasicRate()); //如果新加入的 tspec 是 DOWNLINK 也就是由 QAP 傳至 QSTA 則不用 //另外計算 polling 時間,反之則需計算 if ( tspec.direction == TSPEC::DOWNLINK ) { //pi 即為 polling 時間 newdesc->pi = 0.0; } else { //polling 時間設定為傳送一個 polling 封包的時間加上 SIFS newdesc->pi = mac_->txtime(phymib_.getHdrLen11e(), mac_->getBasicRate()) + phymib_.getSIFS(); } //傳回 newdesc return newdesc; } int MacHccaSchedMap_ref::createMap (TSPEC& tspec) { txop_desc* p; //建立一個新的 txop_desc 並存入由前一個函式所產生的*txop_desc txop_desc* newdesc = createTXOPDesc(tspec); //並將 newdesc 加入 txop_desc 串列的最後面 //head 為 MacHccaSchedMap_ref 的一個成員函數,存放 txop_desc 串列第一 個位址 if ( head != 0 ) { p = head; while ( p->next != 0 ) p = p->next; p->next = newdesc; } else { head = newdesc; } //當新增加一個 newdesc,n_elem 便會累增,n_elem 存放 txop_desc 串列的 個數 ++n_elem; //計算出符合 txop_desc 串列裡每一個 txop_desc 的 SI SI = -1.0; p = head; while ( p != 0 ) { if ( SI < 0 || SI > p->max_SI ) SI = p->max_SI; p = p->next; } //計算出各個 txop_desc 的 txop duration p = head; -16-.

(26) while ( p != 0 ) { //如果 txop_desc 為週期性且為固定封包大小則將 txop 設定為下 if(p->periodic || !ref_vbr_MaxMSDU) { //計算出一個 SI 平均產生的封包個數 N double N = ceil(SI * p->mean_rate / (8.0 * p->mean_sdu_size)); //取 N*NTD 及 mTD 的兩者最大值 p->txop =mac_->getPhyMib().getMaxPropagationDelay() + max( N * p->mean_time + p->pi, p->max_time + p->pi); } else { //將 SI 及封包大小皆換為最大值,再算出產生最大封包的個數 //此為程式作者提出的方式,非為標準定義 double num_pkt = (int)floor(p->max_SI * p->mean_rate /(p->max_sdu_size * 8)); p->txop = num_pkt * p->max_time; double rem = (int)ceil(p->max_SI * p->mean_rate / 8) - num_pkt * p->max_sdu_size; if(rem > 1) p->txop += mac_->getFrameSeqTime(rem); if(p->txop < p->max_time) { p->txop = p->max_time; } p->txop += mac_->getPhyMib().getMaxPropagationDelay() + p->pi + phymib_.getPIFS(); } //如果計算出來的 txop 超過 TXOP_LIMIT 則設為 TXOP_LIMIT if ( p->txop > MAC_MAX_TXOP_LIMIT ) { p->txop = MAC_MAX_TXOP_LIMIT; } p = p->next; } //加總串列裡所有的 txop 長度,並確認小於 SI double txop_sum = 0.0; p = head; while ( p != 0 ) { txop_sum += p->txop; p = p->next; } if ( txop_sum > SI ) { //當回傳 1 代表 txop 製作失敗 return 1; } curr_desc = head; first_call = 1;. -17-.

(27) // 傳回 0 代表 list 完成 return 0; } //當 QAP 選擇到第一個 txop_desc 作服務後,便將指摽指向下一個 txop_desc void MacHccaSchedMap_ref::next_txop(void) { if(curr_desc->next) { TXOP_start_time = TXOP_start_time + curr_desc->txop – phymib_.getSIFS(); curr_desc = curr_desc->next; } else { SI_start_time += SI; TXOP_start_time = SI_start_time - phymib_.getSIFS(); curr_desc = head; } }. 2.4 SETT-EDD 排程演算法 2.4.1 排程原理 雖然 Simple 排程演算法提供一個所有 QSTA 皆能接受之共同的 SI,就固定 資料量及固定產生時間之 CBR 有不錯的成效;但是,對於變動資料量及變動產 生時間之 VBR,則無法分配最適當的 polled TXOP。因此,當資料量突然增加, 便會造成傳送時間不足,導致資料必須延遲更多時間甚至造成資料遺失;而當資 料量較小時,不免形成通道的浪費。. 針對 VBR,許多研究學者提出比 Simple 排程演算法更具成效的排程演算法。 [3]首先提出 SETT-EDD (Scheduling based on Estimated Transmission Times – Earliest Due Date)演算法,此演算法針對 Simple 排程演算法有下列改進作法: ■. 以不同的 SI,輪詢不同的 QSTA (而非以相同的 SI,輪詢所有的 QSTA). -18-.

(28) ■. 允許分配不同長度的 TXOP (而非固定的 TXOP). SETT-EDD 演算法中,每個 QSTA 都設置一個 TXOP 計時器(Timer),並以 QSTA 個別的 TD mSI 速率增長(直到 Timer 的最大值 MTD),QSTA 所分配的 TXOP 便由當時 Timer 量所決定。除此之外,SETT-EDD 演算法也計算出 QSTA 下次最 早輪詢的時間 t + mSI 、以及最晚輪詢的時間 t + mSI (t 為 QSTA 當次輪詢的時 間),來決定被輪詢之優先順序。其中,最晚輪詢的時間又稱為到期時間(Due Date)。所以當 QAP 於 t ′ ,在決定下一個輪詢的 QSTA 時,會執行以下步驟: Step 1:首先,每個 QSTA 會根據 TD mSI 累積 Timer;並且 QAP 會在排程的 當時( t ′ ),先從所有 QSTAs 中,挑選出符合 Timer ≥ mTD 的 QSTA。. Step 2:接著,QAP 由符合 Step 1 條件的 QSTAs 中,挑選出到期時間距離 現在時間( t ′ )最接近的 QSTA (也就是最早到期者)進行輪詢;而所分配的 TXOP 長度,等於 Timer 的量。. Step 3:最後,當 QSTA 傳輸結束,將通道使用權還給 AP 時,QSTA 會將 所使用之 TXOP 時間從 Timer 中扣除;接著,該 QSTA 之 Timer 會繼續增長。而 QAP 則回到 Step 1,進行下一個 QSTA 的輪詢。. 舉例說明,假設系統中有i、j、k三個QSTA,其Timer量、mTD、Timer增長 速率( TD mSI )、及Due Date,分別如圖2-6所示:. -19-.

(29) Timer : 1 s mTD : 3 s TD / mSI : 3/1 s Due Date : 10 s. QSTAk. QAP. QSTAj Timer : 1 s mTD : 4 s TD / mSI : 2/1 s Due Date : 11 s. Timer : 0 s QSTAi mTD : 5 s TD / mSI : 5/1 s Due Date : 12 s. 圖2-6:SETT-EDD範例:系統中有i、j、k三個QSTAs,QAP根據其Timer量、mTD、 Timer增長速率( TD mSI )、及Due Date決定輪詢對象。 經過1 s後,三個QSTA之Timer將分別為5 s、3 s、及4 s;由於mTD分別為5 s、 4 s、及3 s,因此可知 QSTAi 與 QSTAk 滿足Step 1條件;但由於 QSTAk 擁有較接近的 到期時間,便由 QSTAk 取得輪詢資格,並由QAP分配得4 s的TXOP長度。. 如果 QSTAi 被輪詢的時間為 t,並且在 t 時間消耗了 TDi ,由 TD / mSI 可知再 經過 mSI 的時間後,Timeri 的量就有可能會大於等於 mTDi ;所以, QSTAi 下次能夠 被輪詢的最早時間至少為 t + mSI i 。倘若 QSTAi 已經滿足 Timeri ≥ mTDi 的條件,但 其他QSTA卻擁有更接近的Due Date,則會由其他QSTA優先取得服務;直到 QSTAi 的Due Date相較於其他QSTA為最小的時後。因此,倘若下次服務的時間為 t ′ 則應 滿足: t + mSI i ≤ t ′ ≤ t + MSI i. -20-. (8).

(30) 2.4.2 程式實作 關於我們所撰寫的 SETT-EDD Scheduler 是由在[9]所提出的程式碼的基礎上 加以增設及修改函式。而關於 SETT-EDD 程式的實作方法的示意圖如圖 2-7 所 示,在 simple 的程式碼裡我們在每個 txop_desc 裡多加了一個 timer,增長的速率 為 TD mSI ,並且增加 Add_Timer( )函式做 timer 的增長。另一方面,因為本論文 所設定的封包延遲時間並不會也並不允許在同一時間內同時傳送兩個封包以上 的狀態,換句話說,最大的叢集封包大小(Maximum burst size)僅等於單一個最大 封包大小(Maximum MSDU size),所以本論文將 timer 的最大量設定為單次傳送最 大封包所需要的時間(mTD)。因此在當次 txop_desc 的 TXOP 結束後,我們會在 結束的時間點利用 Add_Timer( )計算出 timer 下次累積到 mTD 的時間,也就是下 次的服務時間(service_time),並將服務時間加上 max_SI 作為下次到期時間 (EDD_time)。接著挑選出最早到期的 QSTA(EDD_STA)作為下次服務的 txop_desc,並將 EDD_STA 的 txop 設為 txop_timer 值,txop_timer 值清空。. Add_Timer( ) {Calculate the Next_service_time} TXOP_start_time. curr_desc->EDD_time= curr_desc->service_time+curr_desc->max_SI; EDD_STA->txop =EDD_STA->txop_timer; EDD_STA->txop_timer-=EDD_STA->txop;. Select Edd. TXOP _DURATION. EDD_STATION. 圖 2-7:SETT-EDD 模擬結構示意圖. 針對 Add_Timer( )的詳細說明如圖 2-8 所示。Add_Timer( )會從 QSTA 當次服 務的時間以及 QSTA 當次服務完的 timer 量,利用 timer 的增長率 TD/mSI 來計算 增長到 mTD 所需要的時間,接著再與 min_SI 取最大者作為下次可以服務的時間。. -21-.

(31) 圖 2-8:Add_Timer()結構示意圖. simple scheduler 程式碼的修改部分及增加的部分如下: int MacHccaSchedMap_ref::createMap (TSPEC& tspec) { txop_desc* p; ..... //增加部分 p = head; while ( p != 0 ) { p->min_SI=p->mean_sdu_size*8/p->mean_rate; p->txop_timer=p->txop; p->timer_max=p->txop; p->timer_rate=p->txop/p->min_SI; p->service_time=0; p->EDD_time=p->max_SI p=p->next; } ..... } void MacHccaSchedMap_ref::next_txop(void) { //修改部分*********** txop_desc* p; txop_desc* EDD; //利用 add_timer()決定出下次的服務時間(service_time),並將服務時間加上 //max_SI 作為下次到期時間(EDD_time) add_timer(); curr_desc->EDD_time= curr_desc->service_time+curr_desc->max_SI; //將時間點移至 txop 結束的時間 TXOP_start_time = TXOP_start_time + curr_desc->txop – phymib_.getSIFS(); EDD = new txop_desc; p = head; EDD->EDD_time=-1.0; //選出最早到期的 txop_desc while (p != 0) -22-.

(32) { if ( EDD->EDD_time < 0 || p->EDD_time < EDD->EDD_time) { EDD=p; } p=p->next; } curr_desc=EDD; free EDD; //如果所選到 txop_desc 的 service_time 大於 TXOP_start_time 則將排程時間 //移至 service_time if(TXOP_start_time <= curr_desc->service_time) { TXOP_start_time=curr_desc->service_time; } //將所選到 txop_desc 的 txop 設定為 timer 值,並將 timer 清空 curr_desc->txop =curr_desc->txop_timer; curr_desc->txop_timer=0; //******************* //將以下程式碼刪除 if(curr_desc->next) { TXOP_start_time = TXOP_start_time + curr_desc->txop – phymib_.getSIFS(); curr_desc = curr_desc->next; } else { SI_start_time += SI; TXOP_start_time = SI_start_time - phymib_.getSIFS(); curr_desc = head; } } void MacHccaSchedMap_ref::add_timer(void) { txop_desc* p; p = head; double delta_TD; double delta_time; while (p != 0) { //只針對當次服務的 QSTA 計算出 timer 大於 mTD 所需要的時間,也就 //是下次的服務時間 if(p->qsta==curr_desc->qsta) { delta_TD= p->timer_max - p->txop_timer; delta_time= delta_TD/p->timer_rate; if(delta_TD>=0) { //比較 timer 滿足 mTD 所需要的時間(delta_time)以及 min_SI if(TXOP_start_time +delta_time > TXOP_start_time +min_SI) { -23-.

(33) //如果 delta_time 大於 min_SI 則設定下次服務時間為當次 //服務時間加上 delta_time p->service_time=TXOP_start_time +delta_time; } else { //如果小於則設定下次服務時間為當次服務時間加上//min_SI p->service_time=TXOP_start_time +min_SI; } p->txop_timer=p->timer_max; } } p=p->next; } }. 2.5 ARROW 排程演算法 2.5.1 排程原理 SETT-EDD 排程演算法雖然能夠改善 HCF 的吞吐量,但是在 TD 方面仍是利 用估測的方式計算,不但在通道的使用方面容易造成浪費,當資料為 VBR 時, 也有可能導致分配不足的現象。因此,[4]提出了 ARROW (Adaptive Resource Reservation Over WLANs)演算法,依循 SETT-EDD 的理論基礎,再搭配 QueueSize (位於 802.11e 的 QoS field)的資訊,以達到 TXOP 的正確配置。. 圖 2-9:ARROW 傳輸範例: QSTAi 分別於第 x, x+1,與 x+2 次輪詢時,配置之 TD 與前一次輪詢上傳 QS 之間的關係示意圖。(資料來源:[4]) -24-.

(34) 以圖 2-9 進行說明。在 t i (x) 時,QAP 會根據前ㄧ個 TXOP 所上傳的 QoS field 以及 TSPEC 參數,分配給 QSTAi ㄧ段 TXOPi (x ) (或 TDi (x) )的傳輸時間;而當 QSTAi 於 TXOPi (x ) 期間上傳資料時,也會利用 QoS field 將 QueueSize ( QS i (x ) )資訊上傳 至 QAP。因此,在 t i ( x + 1) 時,QAP 會根據 QSTAi 所提出的 QS i (x ) 需求,分配 TXOPi ( x + 1) ,長度為 TDi ( x + 1) (= QS i (x ) )。而在[ t i (x) , t i ( x + 1) ]間,若 QSTAi 有新資. 料 產 生 , QSTAi 便 會 利 用 所 分 配 的 TXOPi ( x + 1) 時 間 , 上 傳 新 的 QueueSize ( QS i ( x + 1) ) ; 同 樣 地 , 在 t i ( x + 2) , QAP 根 據 QS i ( x + 1) 需 求 , 分 配 TDi ( x + 2) (= QS i ( x + 1) )的時間給 QSTAi ,而可再上傳 QS i ( x + 2) 。從以上的敘述可以發現,經 由 QoS field,QAP 將可以獲得 QSTA 最正確的即時需求,進而分配最正確的 TD。 因此,當資料型態為 VBR 時,可以隨時掌握用戶端正確的封包資訊。. 然而,在[ t i (x) , t i ( x + 1) ]所產生的封包,必須要等到 t i ( x + 2) 才能被傳送。因 此,為了不超過封包的 Delay Bound,假設最壞的情況下兩次的服務週期(service intervals)皆為 MSI i ,如圖 2-9,且 TDi ( x + 2) 恰等於 MTDi 時,下式必須滿足: Di ≥ 2 MSI i + MTDi ⇔ MSI i ≤. Di − MTDi 2. (9). 若加入考慮重傳的可能,則上式可表示成: MSI i ≤. Di − MTDi 2+m. 其中,m 為最大的重傳次數。 而在實際排程將會遵循以下流程: Step 1:排程器等待通道變成閒置(idle)狀態。 Step 2:. -25-. (10).

(35) (a)接著從所有加入排程的 QSTA 挑選出滿足 ti + mSI i 。 (b)並且 TXOP timer 大於最大封包的傳輸時間(mTD)。 Step 3:如果沒有任何 QSTA 滿足 Step2 的條件則繼續等待至至少有一個 QSTA 滿足。 Step 4:如果至少有一個 QSTA 滿足,則選擇出最早到期的 QSTA,也就是選 擇擁有最小 ti + MSI i 的 QSTAi。 Step 5: (a)接著根據各個 QSTAi 所屬資料流的 QSij 計算 TDij  QS  TDij = max  ij + O, mTDij   Rij   . (11). 而若 QS 為零,則 TD 配置為傳送 Null-data 的時間。 (b)而 QSTAi 總共的所需要的 TDi 為 ni. TDi = ∑ TDij. (12). j =1. (c)再將 TDi 與 QSTAi 的 TXOP timer ( Ti )取最小值 TDi = min( TDi , Ti ). (13). Step 6:接著將 Ti 減去 TDi 後回到 Step1。. 2.5.2 程式實作 在 ARROW 實作方面,主要是在我們所實作的 SETT-EDD 模擬上做進一步的 修改。為了達到準確分配 TXOP 的效果,我們在 802.11e 的每個資料封包的標頭 加入了一個 QueueSize 的欄位,以便 QSTA 上傳資料時能將 QS 資訊一併上傳。 而在服務週期方面,也根據 ARROW 文獻將 MSI 縮短為一半。其新增的欄位以 及修改程式如下: struct hdr_mac802_11e { -26-.

(36) struct frame_control dh_fc; u_int16_t dh_duration; int our_queue_size;//新增加的欄位,存放 QS 資訊 u_char dh_ra[ETHER_ADDR_LEN]; u_char dh_ta[ETHER_ADDR_LEN]; u_char dh_3a[ETHER_ADDR_LEN]; u_int16_t dh_scontrol; u_char dh_body[0]; struct qos_control dh_qc; };. 以上結構位於 802.11.h 中. int MacHccaSchedMap_ref::createMap (TSPEC& tspec) { txop_desc* p; ..... //修改 SETT-EDD 部分 p = head; while ( p != 0 ) { //將 max_SI 縮短為一半並設定為 txop_desc 第一次上傳的到期時間 p->EDD_time=p->max_SI/2; p->min_SI=p->mean_sdu_size*8/p->mean_rate; p->txop_timer=p->txop; p->timer_max=p->txop; //將 timer_rate 改為每 mSI 增長 p->mean_time+p->pi p->timer_rate= (p->mean_time+p->pi)/p->min_SI; p->service_time=0 p=p->next; } ..... } void MacHccaSchedMap_ref::next_txop(void) { //修改 SETT-EDD 部分*********** txop_desc* p; txop_desc* EDD; add_timer(); //將下次的 service_time 加上 max_SI/2 作為下次的 EDD_time curr_desc->EDD_time= curr_desc->service_time+curr_desc->max_SI/2; ...... } // deque 為 MacHccaSchedQAP_per 的成員函式,其中一部份功能為分配 txop //duration 給 QSTA,而我們在分配 txop duration 的部分作了修改。 -27-.

(37) void MacHccaSchedQAP_per::deque(SchedulerTxData& schedTx_) { ..... //執行 update_qs()更新 AP 所擁有的 QSTA 佇列資訊 update_qs(); //接著執行 update_txop(desc->qsta)更新 txop duration map_builder_->update_txop(desc->qsta); ..... } void MacHccaSchedQAP_per::update_qs(void) { //更新每一個 Queue_Size for(int i=0;i<21;i++) { map_builder_->qsta_qs[i]=queue_packet_size[i]; } } void MacHccaSchedMap_ref::update_txop(int qsta) { txop_desc* p = head; double new_txop = 0; while ( p != 0 ) { if(p->qsta==qsta) { //根據 Queue_Size 計算出新的 txop duration new_txop = phymib_.getSIFS() + mac_->txtime( qsta_qs[p->qsta] + phymib_.getHdrLen11e(), mac_->getDataRate())+ phymib_.getSIFS() + mac_->txtime(phymib_.getHdrLen11e(), mac_->getBasicRate()); if(qsta_qs[p->qsta]!=0) { p->txop=new_txop + p->pi; //將 timer 減去 txop if(p->txop_timer<p->txop) { p->txop=p->txop_timer; } p->txop_timer-= p->txop; } else { p->txop=p->pi; } } p=p->next; -28-.

(38) } }. 2.6 適應性排程演算法 2.6.1 排程原理 由於ARROW的輪詢週期是由TXOP timer的增長率所決定,所以輪詢週期為 一平均值,倘若服務的VBR為變動性區間的類型,則將會造成封包超過延遲範圍 而遺失。因此[5]提出了適應性排程演算法(Adaptive Multimedia QoS Scheduler), 根據所服務的VBR類型提供不同的輪詢週期。首先在QAP端必須獲得所有加入排 程資料流的服務開始時間(Service Start Time),以及資料流的最小服務區間,接著 在排程的過程中,若資料流上次的服務時間為 t ′ 則下次的服務時間 t due j 及到期時 間 t dead j 將由下式決定:. tdue j = SST j + k ⋅ mSI j k = min{t ′ ≤ ( SSTj + l ⋅ mSI j )} l. (14). tdead j = tdue j + MSI j 如此經由 SST 及 mSI 可推算出最適當的輪詢時間。以圖 2-10 為例,倘若當次開 始服務時間為圖中 Polling time 位置所示,則經由開始服務時間 Start Service Time 即可推算出下次服務時間 tdue 為兩倍的 mSI。. 圖 2-10:服務時間 tdue 與 Start Service Time 的關係示意圖。 -29-.

(39) 此外,[5]又額外考慮 QSTA 的佇列情況以確保封包能在延遲範圍內接受輪 詢,若 t ′ 及 t ′′ 分別為 QSTA 當次 TXOP 的開始及結束時間,t duej 及 t deadj 分別為 QSTA 所屬資料流 j 的下一次的服務及到期時間, t reqj 為資料流 j 的傳送需求,則 QSTA 下次服務的 mQSI 及 MQSI 計算如 15 式所示:. min{t duej − t ′′}, if∀j : t reqj = 0 mQSI = 1≤ j≤n 0, if∃j : t reqj ≠ 0, if∃j : t reqj ≠ 0 min{t deadj − t ′′}, if∀j : t reqj = 0 1≤ j≤n MQSI =  {t ′ + MSI j }, if∃j : t reqj ≠ 0  j∈min {t reqj ≠ 0}. (15). 式中如果 QSTA 的所有資料流 t reqj 皆為零,則代表 QSTA 的佇列未存放任何資料, 所以將 QSTA 下次服務的 mQSI 及 MQSI 設定為所屬資料流內最小的服務及到期 時間;倘若至少有一個 t reqj 不為零,則代表 QSTA 有資料產生並存放於佇列中,所 以便將服務時間設為零,到期時間設為 t ′ + MSI j ,代表可即刻被服務。. 2.6.2 程式實作 在適應性排程的程式實作方面,主要是捨棄了原 SETT-EDD 的 timer 作法而 改用考慮 Start service time 並利用 14 式來決定出下一次的服務時間,但在 txop 分配方面還是利用 simple scheduler 的分配方式,所以新增及修改的程式內容如 下:. int MacHccaSchedMap_ref::createMap (TSPEC& tspec) { txop_desc* p; ..... //修改 SETT-EDD 部分 p = head; while ( p != 0 ) { p->min_SI=p->mean_sdu_size*8/p->mean_rate; -30-.

(40) //將資料流的 sst(start service time)列入考慮 p->service_time=p->sst; p->EDD_time=p->service_time+p->max_SI; p=p->next; } ..... } void MacHccaSchedMap_ref::next_txop(void) { //修改 SETT-EDD 部分*********** txop_desc* p; txop_desc* EDD; //利用以下迴圈計算出最小大於當次服務時間的 k 值 while((curr_desc->sst+k*curr_desc->min_SI) <= TXOP_start_time) { k++; } //將下次的服務時間 service_time 設定為 k 倍的 mSI,並且將下次的到期時間 // EDD_time 設定為服務時間加上 max_SI curr_desc->service_time= k * curr_desc->min_SI+(curr_desc->sst+0.04); curr_desc->EDD_time=curr_desc->service_time+curr_desc->max_SI; //****************** //將時間點移至 txop 結束的時間 TXOP_start_time = TXOP_start_time + curr_desc->txop – phymib_.getSIFS(); EDD = new txop_desc; //選出最早到期的 txop_desc ..... //刪除下列兩行使得每次分配的 txop 皆為原 simple scheduler 設定值 curr_desc->txop =curr_desc->txop_timer; curr_desc->txop_timer=0; }. 為了在編寫 otcl 時能夠使資料流亂數分佈,所以作了以下修改 proc create_connections {} { ..... ..... //設定 n 為 0 到 0.04 間的均勻分佈 set n [$rng uniform 0 0.04] if { $opt(hcca) == 1 } { [$qsta($i) getMac 0] tclas $i 1 [$qsta($i) getMac 0] tspec 1 [expr $i + 1] \ //為了使otcl能傳回開始時間給Mac802_11e類別所以在下列程式後面多加一變 //數以傳回開始時間 uplink 0 0 0 0 0 0 0 0 .040 0 1 $n [$qap getMac 0] tspec 1 [expr $i + 1] \ -31-.

(41) uplink 1279 6171 0 0 .040 0 256000 0 0 0 0 $n } } 如此在 Mac802_11e 類別便可接收開始服務時間的資訊 int Mac802_11e::command (int argc, const char*const* argv) { ..... } else if ( argc == 17 && strcmp(argv[1], "tspec") == 0 ) { ..... t.peak_data_rate = atof(argv[12]); t.delay_bound = atof(argv[13]); t.minimum_PHY_rate = atof(argv[14]); t.periodic = ( atoi(argv[15]) == 1 ) ? true : false; //資料流開始服務的時間 t.start_service_time = atof(argv[16]); ..... return TCL_OK; } } txop_desc* MacHccaSchedMap_ref::createTXOPDesc(TSPEC& tspec) { ..... ..... newdesc->next = 0; newdesc->tid = tspec.tid; newdesc->qsta = tspec.qsta; newdesc->direction = tspec.direction; newdesc->periodic = tspec.periodic; newdesc->mean_rate = tspec.mean_data_rate; ..... //把原本從 otcl 取得的 sst 列入 txop_desc 的資訊 newdesc->sst = tspec.start_service_time; return newdesc; }. -32-.

(42) 第三章 論文作法介紹. 3.1 ARROW 與適應性排程比較 如前章節所述,ARROW 利用了 Queue Size 的資訊來達到準確的 TD 配置, 並且提高通道的使用量。在流量控管方面,ARROW 使用平均值所計算的 timer, 並且由 timer 傳輸條件來決定輪詢的時間。當服務的 VBR 類型為固定週期的 VBR 時(如 H.261 與 MPEG4),將如圖 3-1 所示: Packet 1 Timer in. Timer. Timer. Packet 2 in. TD/mSI. Upload QS. Packet 3 in. Assign TD Q TD S. Q TD S. mSI Polling. Q TD S. mSI Polling. Polling. 圖 3-1:ARROW 服務固定週期 VBR(如 H.261 與 MPEG4)的情況 在圖中我們可發現封包的傳送必須經過上傳 QS 及分配 TD 兩部分,並且封 包的產生週期是固定的。以圖中 Packet 1 為例,當 Packet 1 產生時會先經由輪詢 把封包的大小(也就是 QS)上傳至 QAP,接著 QAP 會分配經由 QS 所計算的 TD 給 QSTA 傳送 Packet 1,並且在分配 TD 的同時會將 QSTA 的 timer 減去 TD 量(與 SETT-EDD 將 timer 清空不同),再以 TD/mSI 的增長率增長至 timer 的最大值進 行下一次的輪詢。由於平均封包除以平均資料率而得的 mSI 會相近於封包產生 的間隔,所以 timer 在每個封包產生的時間皆會增長一傳送平均封包的 TD (TD/mSI)。倘若 timer 的傳輸條件設定為 mTD,且每個封包在傳送時所需要的 -33-.

(43) TD 皆相近於平均封包所需傳送的時間,則 timer 在每個封包產生點都能滿足傳 送條件而接受輪詢。因此,在服務固定週期的 VBR 會有不錯的成效。 而當服務的 VBR 類型為非固定週期的 VBR 時(如 H.263),將如圖 3-2 所示。. 圖 3-2:ARROW 服務非固定週期 VBR(如 H.263)的情況 在圖 3-2 中我們可發現封包的產生週期相對於圖 3-1 是不固定的。並且經由 平均封包除以平均資料率而得的 mSI 會與封包產生間隔有著極大的差異,這使 得輪詢的週期將大於若干個封包產生週期,造成封包不能在延遲範圍接受輪詢而 遺失。在另一方面,由於非固定週期 VBR 的封包變異量極大於固定產生週期的 VBR,這使得 QSTA 在經過一次的輪詢後,timer 需要比 mSI 更多的時間增長至 mTD,原本遺失量已經夠大,又因為此情況使得成效更加不彰。如此,我們可發 現 ARROW 的作法將非常不適用於服務非固定週期的 VBR。. 在適應性排程方面,同前章節所述,儘管能適應各種不同 VBR 類型的資料 流[5],如圖 3-3 所示。. -34-.

(44) 圖 3-3:適應性排程服務固定產生週期和非固定產生週期的情況 在圖 3-3 中,在服務固定及非固定產生週期的資料流時,會以最小資料的產 生區間的倍數作為輪詢的週期,所以可以準確的取得資料產生時間並且傳送。但 在其他方面,如圖 3-4 所示,由於適應性排程並沒有 QS 的觀念,所以 QAP 在分 配 TD 是採用估測的方式計算,因此使得通道使用者僅維持少量數目,不免造成 通道的浪費。. 圖 3-4:適應性排成滿載之情況. 因此針對 ARROW 及適應性排程可以統整出下列表格: 表 3-1:ARROW 及適應性排程之特性統整表 輪詢週期. TD 分配. ARROW. 由 Timer 決定. 準確. 適應性排程. 最短封包產生週期. 估測. -35-.

(45) 在本論文作法裡,將結合 ARROW 及適應性排程的優點(表格紅色部分),設計出 一個最高成效的通道排程器。. 3.2 論文作法 經由前一章節我們可發現,使用 TXOP timer 的技術會造成封包遺失的原因 有輪詢及 timer 傳輸條件兩方面,因此本論文作法將著重於改善這兩方面的成 效。在輪詢部分為了準確獲得封包產生時間,所以使用最短的封包產生區間作為 輪詢的週期,取代原本由 TXOP timer 所決定的輪詢週期;而在 timer 傳輸條件部 分,本論文使用以上傳的 QS 所需要之傳送時間來動態調整 TXOP timer 的傳輸 條件,取代原本固定的 mTD(最大封包傳送時間)傳送條件,如圖 3-5 所示。. 圖 3-5:論文作法服務非固定週期 VBR 之情況 在圖 3-5 中可發現,本論文使用最小封包產生區間作為輪詢週期,可有效的 掌握封包產生時間;而在資料流接受輪詢時,由於本論文使用可動態調整的 timer 傳輸條件,所以如果 QAP 在接收輪詢的 QSTA 所上傳之 QS 後,如果發現 QSTA 的 timer 大於 QS 所需傳送的時間,QAP 便可馬上分配 TD 讓 QSTA 傳送資料, 而不用等待 timer 增長至 mTD 的時間。. -36-.

(46) 雖然已經改善了輪詢以及 timer 傳輸條件,但在 timer 的增長率方面,由於本 論文仍使用 TD/mSI 的平均速率,如果 QAP 在接收輪詢的 QSTA 所上傳之 QS 後,發現 QSTA 的 timer 小於 QS 所需傳送的時間,必須等待 timer 增長至 QS 的 傳送時間才能傳送資料,因此還是會有封包超過延遲時間而導致遺失的可能。而 此情況的封包遺失與否以圖 3-6 及 13 式作說明:. 圖 3-6:論文作法封包遺失之情況   0 Loss =   1 . , TtQS ( n ) + r ⋅ ∆t 2 ≥. QS( n ) R. , others. TtQS ( n ) = TtQS ( n −1) + ∆t1 ⋅ r. (1). Δt1 = tQS ( n ) − tTD ( n −1) Δt 2 = t p ( n) + d − tQS ( n). 圖中 tp(n)、tQS(n)、tTD(n)分別為第 n 次的封包產生、QS 上傳、TD 分配時間,d 為 允許的延遲時間。一開始在 tQS(n)的時間點上傳 QS 時,timer 會根據此刻時間與 前一次分配 TD 的時間差( Δt1 )以及增長率 r 來增長 timer 量。接著將增長後的 timer 再加上 tQS(n)到封包延遲範圍之間( Δt2 )能增長的 timer 量,若大於 QS 所需的 TD 量(. QS ( n) R. ),則代表封包能夠被傳送;反之則遺失。一言以蔽之,也就是第 n 次. 上傳 QS 時的 timer 量加上 timer 在 QS 延遲範圍內的增長量,必須大於 QS 的傳 輸時間,才可能在 QS 的延遲範圍內傳送資料。 -37-.

(47) 接著,為了求得系統的最大服務個數,我們考慮了一個無限大的 TXOP timer,使得 timer 隨時能滿足傳輸條件。換句話說,就是不設定任何的 timer 傳 輸條件,只要 QAP 在接收上傳的 QS 之後,發現 QSTA 有資料存放於佇列中, 就立刻讓 QSTA 傳送佇列的資料。如此,再搭配最短輪詢週期,則通道的使用與 否,將取決於 QSTA 在輪詢週期是否有封包產生。如果服務的資料流類型為固定 封包產生週期,則系統所能服務的最大 QSTA 個數便是在輪詢區間裡能服務的最 大 QSTA 數目。舉例說明,假設輪詢的週期為 40ms,且每個 QSTA 傳送封包的 時間為 10ms,則服務固定封包產生週期的 VBR 最多只能容納 4 個 QSTA。而如 果服務的資料流類型為非固定封包產生週期時,由於資料流在每一段輪詢區間並 不一定會產生封包。如圖 3-7 所示:. 圖 3-7:無傳輸限制在服務非固定封包產生週期之情況 在圖中的第一段區間只有 QSTA1、3、5 有產生資料,第二段區間只有 QSTA2、 4 有資料產生。如此,使用前面敘述的假設,則系統將可達到比服務固定產生週 期的 VBR 更多的數目。. 3.3 程式實作 在本論文作法的程式實作方面,由於本論文使用[9]所提出的模擬事件程序,如 圖 3-8 所示:. -38-.

(48) 取得curr_desc. 將SchedulerTxData 設定為curr_desc 的資訊. 選擇下一次輪詢的 txop_desc. 將選擇到的txop_desc 設為curr_desc. 傳送SchedulerTxData 的資料. 圖 3-8:[9]所提出之事件程序. 由於排程器在取得當次輪詢的 QSTA 並且尚未傳送資料時,就已經選擇了下次要 輪詢的 QSTA。而本論文作法需要利用當次被輪詢所上傳的 QS 資訊來決定下次 被服務的時間,如果上傳的 QS 小於當次 QSTA 的 timer,則當次輪詢完的 QSTA 需要在下一次選擇 QSTA 時被選擇到,但以原本的事件程序作法並無法知道當次 QS 的資訊。因此本論文使用了一個小技巧,如圖 3-9 所示:. -39-.

(49) 取得curr_desc. 是否為 實體curr_desc 是. 否 1.確認所有上傳QS的 txop_desc是否真的有 資料產生而需要輪詢 2. 決定下次輪詢時間. 將SchedulerTxData 設定為curr_desc 的資訊. 選擇下一個的 txop_desc. 下一次輪詢為虛擬 txop_desc. 將選擇到的txop_desc 設為curr_desc. 將選擇到的txop_desc 設為curr_desc. 傳送SchedulerTxData 的資料. 圖 3-9:論文所提出之事件流程 本論文加入了一個虛擬的 txop_desc,並且在取得當次輪詢的 QSTA 之後,如果 當次輪詢的 QSTA 是實體的 txop_desc,則在選擇下次輪詢的 QSTA 時,便會選 擇到虛擬的 txop_desc。而當傳送完當次 QSTA 的資料後,在取得新的輪詢 QSTA 時會判別是否為虛擬 txop_desc,如果為是,則 QAP 會確認所有已經上傳 QS 的 QSTA 是否真的有資料產生而需要輪詢,如果有資料產生則會計算出 QSTA 下一 次需要被輪詢的時間,接著再選擇下一個實體 txop_desc,如此便能將原事件程 序修改成本論文的事件程序。 所以程式碼的修改部分及增加的部分如下: void MacHccaSchedQAP_per::deque(SchedulerTxData& schedTx_) { while(1) { -40-.

(50) desc = map_builder_->getTXOPDesc(); schedTx_.tid_ = desc->tid; schedTx_.dst_ = desc->qsta; //修改成如果選擇到虛擬 txop_desc(desc->qsta==0)時則執行下列函式並選擇下 //一個 txop_desc if(desc->qsta==0) { //更新 QS 的資訊 update_qs(); //執行 check_QS(),如果上一次輪詢的 QSTA 真的有資料產生則將 //qs_upload 設定為 true map_builder_->check_QS(); //選擇下一個 desc_txop map_builder_->next_txop(); //重新執行取得 desc_txop continue; } if(desc->direction == TSPEC::DOWNLINK) { …. } //如果選擇到的 txop_desc 為實體 desc 則執行下列函式 else { …. //執行 update_txop()來取得 TD 並且由 timer 扣除 map_builder_->update_txop(desc->qsta); //將 QAP 端記錄的 QS 清為零 queue_packet_size[desc->qsta]=0; //選擇下一個 desc_txop,此時會選擇到虛擬 txop_desc map_builder_->next_txop(); return; } } } void MacHccaSchedMap_ref::next_txop(void) { txop_desc* p; txop_desc* EDD; //如果當次選擇到的 txop_desc 為虛擬的 txop_desc 則,針對有上傳 QS 的 txop_desc //計算出下次的輪詢時間 if(curr_desc->qsta==0) { p = head; while (p != 0) { //如果 QSTA 真的有資料產生,便計算出下次輪詢時間 if(p->qs_upload==true) { //如果已經計算出下次輪詢時間 txop_desc 則不再計算,TD_set 為新 -41-.

(51) //增的旗標變數,僅為計算判別用 if(p->TD_set==false) { //將 timer 累增 p->txop_timer+= (Scheduler::instance().clock()-p->service_time)*p->timer_rate; if(p->txop_timer>p->timer_max) { p->txop_timer=p->timer_max; } //計算出 QS 所需要的傳送時間 double demand_txop = phymib_.getSIFS() + mac_->txtime( qsta_qs[p->qsta] + phymib_.getHdrLen11e(), mac_->getDataRate())+ phymib_.getSIFS() + mac_->txtime(phymib_.getHdrLen11e(), mac_->getBasicRate()) + p->pi; //如果 timer 小於 QS 所需要的傳送時間則計算出 timer 增長到// 能傳送 QS 的時間 if(demand_txop>p->txop_timer) { Double delta_time= (demand_txop-p->txop_timer)/p->timer_rate; p->service_time=Scheduler::instance().clock()+delta_time; p->EDD_time=p->service_time+p->max_SI/2; p->txop_timer=demand_txop; } //如果 timer 大於 QS 所需要的傳送時間則設定為馬上可以輪詢 else { p->service_time=Scheduler::instance().clock(); p->EDD_time=p->service_time+p->max_SI/2; } //將 TD_set 設定為 true 代表已經計算 p->TD_set=true; } } p=p->next; } } //如果為實體 txop_desc 則下次輪詢時間設為下列 else { curr_desc->service_time=curr_desc->service_time+0.04; curr_desc->EDD_time=curr_desc->service_time+curr_desc->max_SI/2; } TXOP_start_time = TXOP_start_time + curr_desc->txop - phymib_.getSIFS(); //找出下一個最早到期的 qsta************ p = head; EDD = new txop_desc; EDD->EDD_time=-1.0; EDD->service_time=0; -42-.

(52) EDD->qsta=0; EDD->txop=0; //如果當次選到的 txop_desc 為虛擬 txop_desc 則選擇出下一個最早到期 txop_desc if(curr_desc->qsta==0) { while (p != 0) { if ( EDD->EDD_time < 0 || p->EDD_time < EDD->EDD_time) { EDD=p; } p=p->next; } } curr_desc=EDD; //************************************* if(TXOP_start_time <= curr_desc->service_time) { TXOP_start_time=curr_desc->service_time; } } void MacHccaSchedMap_ref::check_QS(void) { txop_desc* p = head; //針對所有 QSTA,如果真的有上傳資料則設定 qs_upload=true while ( p != 0 ) { if(qsta_qs[p->qsta]!=0) { p->qs_upload=true; } else { p->qs_upload=false; } p=p->next; } } void MacHccaSchedMap_ref::update_txop(int qsta) { txop_desc* p = head; double new_txop = 0; int k=0; while ( p != 0 ) { //針對當次選擇到的 txop_desc 計算出分配的 TD -43-.

(53) if(p->qsta==qsta) { new_txop = phymib_.getSIFS() + mac_->txtime( qsta_qs[p->qsta] + phymib_.getHdrLen11e(), mac_->getDataRate())+ phymib_.getSIFS() + mac_->txtime(phymib_.getHdrLen11e(), mac_->getBasicRate()); //如果 QAP 端記錄的 QS 不為零則設定為 new_txop + p->pi,並從 timer //扣除 if(qsta_qs[p->qsta]!=0) { p->txop=new_txop + p->pi; if(p->txop_timer>=p->txop) { p->txop_timer-=p->txop; } else { p->txop=p->txop_timer; p->txop_timer=0; } //利用適應性排程的方式選擇出下一次輪詢的時間 while(((p->sst+0.04)+k*0.04) <= TXOP_start_time) { k++; } p->service_time= (k-1) * 0.04+p->sst; //將 QAP 端記錄的 QS 清為零 qsta_qs[p->qsta]=0; //將 TD_set 設為 false 代表需重新計算 p->TD_set=false; } else { p->txop=p->pi; } } p=p->next; } }. -44-.

參考文獻

Outline

相關文件

• 在線 (online):程式/演算法 必須對前一個詢問或操作做出

• 在線 (online):程式/演算法 必須對前一個詢問或操作做出

RMQ(Range minimum

Keywords: pattern classification, FRBCS, fuzzy GBML, fuzzy model, genetic algorithm... 第一章

把作法用乘法算式記下來,並把算式中

W ing )教授在美國電腦權 威期刊《 C ommunications of the

西元 1998 年,G oogle 的創辦人之一賴利佩吉發表了網 頁排序的演算法,涵蓋 G oogle

本論文之目的,便是以 The Up-to-date Patterns Mining 演算法為基礎以及導 入 WDPA 演算法的平行分散技術,藉由 WDPA