BAB IV
Modul IEEE 802.16 dan Implementasi Scheduling pada Simulator NS-2
IV.1 Pendahuluan Simulator jaringan yang paling populer dikalangan para akademisi dan praktisi industri adalah simulator NS-2, yang telah menjadi standar de-facto untuk melakukan simulasi terhadap jaringan packet-switched. Terutama dengan banyaknya studi dan penelitian tentang jaringan yang menggunakan NS-2 sebagai tool untuk menguji jaringan yang sedang diteliti. Meskipun sudah ada usaha untuk membuat simulator khusus untuk IEEE 802.16, tetapi simulator tersebut tidak dibuka secara luas untuk publik. Secara umum, NS-2 disusun oleh berbagai macam model trafik, protokol-protokol transport layer, protokol network layer, MAC layer, dan lain-lain. Komponen-komponen ini telah memungkinkan NS-2 untuk mensimulasikan berbagai tipe jaringan beserta topologi-topologinya. Para peneliti dapat mengambil keuntungan dari uji pendahuluan atas penelitian yang sedang dilakukan dan mengetahui kekurangan dari rancangan pada tahap awal secara efisien.
IV.2 Modul IEEE 802.16 pada NS-2 Modul WIMAX ini difokuskan pada pengembangan protokol MAC dan diwarisi dari kelas-kelas yang telah ada pada NS-2. Modul WIMAX ini didasarkan pada standar IEEE 802.16 mode point to multi-point (PMP). Pada layer fisik dipilih metode akses OFDMA karena metoda akses ini telah menarik banyak perhatian di dunia wireless sehubungan dengan ketangguhannya dalam mengatasi multipath delay dan kemampuannya dalam mentransmisikan data berkecepatan tinggi.
Modul WIMAX ini berdasar pada standar IEEE 802.16-2004 dan NS-2 versi 2.29. Semua modul dirancang menggunakan bahasa pemrograman OOP C++ dan dimodelkan ke dalam beberapa kelas. Hubungan antara modul WIMAX dengan modul NS-2 didasarkan pada sejumlah komponen jaringan pada NS-2 sebagaimana diperlihatkan pada gambar IV.1 . Gambar tersebut memperlihatkan
42
tipe objek-objek untuk traffic generating agent (TGA), link layer (LL), interface queue (IFQ), modul WIMAX, dan layer fisik.
IV.1. Hubungan antara modul WIMAX dengan modul-modul pada NS-2 TGA dianggap sebagai pembangkit trafik yang membangkitkan trafik VoIP, MPEG, FTP, HTTP, dan sebagainya. Trafik-trafik ini dibagi-bagi kedalam 5 tipe layanan yang berbeda, UGS, ertPS, rtPS, nrtPS, dan BE. Semua paket akan ditransfer ke dalam antrian-antrian berdasar tipe-tipe layanannya masing-masing oleh layer CS menurut mekanisme pemetaan SFID-CID. Paket-paket data dalam antrian-antrian ini diperlakukan sebagai MSDU dan akan dipilih secara roundrobin untuk melewati modul WIMAX.
Ketika modul WIMAX pada SS menerima MSDU dari antrian, komponen manajemen MAC akan memulai proses ranging untuk memasuki sistem WIMAX atau mengirimkan MSDU berdasar jadwal waktu yang telah ditentukan dalam UL-MAP. Apabila proses ini berhasil diselesaikan Network Interface akan
43
menambahkan delay propagasi dan memancarkannya pada interface udara. Objek kanal yang digunakan adalah kelas WirelessPhy.
Modul WIMAX juga menerima paket dari antarmuka udara yang dilewatkan oleh node-node lain, dan kemudian ditentukan apakah paket-paket yang diterima merupakan paket kontrol, objek manajemen MAC akan mengambil prosedur yang sesuai berdasar paket kontrol yang diterima. Jika tidak, paket tersebut akan dilewatkan ke objek LL setelah mengalami proses defragmentasi. Terakhir, TGA akan menerima paket-paket tersebut dari objek LL.
Modul WIMAX ini disusun oleh sublayer CS, MAC-CPS, dan PHY. Semua kelas dapat dilihat pada gambar IV.2, yang secara grafis mempelihatkan objek-objek, atribut, dan hubungan-hubungannya. BS dan SS dikenali menurut nomor-nomor yang telah ditentukan dalam objek Otcl.
IV. 3 Implementasi Scheduling pada NS-2 Algoritma scheduling pada NS-2 dikerjakan oleh fungsi Scheduler(). Fungsi ini menggunakan scheduling untuk 1. Membagikan bandwidth secara adil kepada semua tipe layanan yang berada dalam antrian sebuah Subscriber Station (SS) 2. Menjamin QoS untuk semua tipe layanan yang terhubung dalam SS
Demi menjaga QoS, semua tipe layanan pada sebuah SS akan langsung diberi bagian bandwidth, minimal sebesar yang diminta oleh SS tersebut.
Paramater-parameter umum yang digunakan dalam scheduling WRR dan DRR adalah sebagai berikut: -
Parameter yang berhubungan dengan besarnya bandwidth yang dimiliki oleh masing-masing tipe layanan pada BS/SS sesuai dengan grant yang diberikan oleh BS sebagai respon terhadap BW request yang dikirimkan
44
oleh SS: All_UGS_BW, All_ertPS_BW, All_rtPS_BW, All_nrtPS_BW, All_BE_BW -
Parameter yang berhubungan dengan besaran bandwidth yang pada akhirnya diterima oleh masing-masing tipe layanan pada BS/SS: UGS_BW, ertPS_BW, rtPS_BW, nrtPS_BW, BE_BW
Gambar IV.2 Diagram kelas pada modul WIMAX
45
-
Parameter yang berhubungan dengan panjangnya antrian pada BS/SS untuk masing-masing tipe layanan: UGS_queue, ertPS_queue, rtPS_queue, nrtPS_queue, BE_queue.
-
Parameter yang berhubungan dengan besarnya bandwidth yang dimiliki oleh sebuah frame: BW
-
Parameter yang berhubungan dengan bobot yang dimiliki oleh setiap tipe layanan: q 1 , q 2 , q 2 , q 4 , dan q 5 . Secara berurut mulai dari q 1 sampai q 5 masing-masingnya merupakan bobot untuk: BE, nrtPS, rtPS, ertPS, dan UGS.
Pada subbab berikut diberikan pseudocode scheduling WRR dan DRR untuk menjelaskan bagaimana cara kedua scheduling tersebut membagikan bandwidth kepada tipe-tipe layanan yang ada dalam sebuah SS.
IV.3.1 Weighted Round Robin Pada algoritma ini, alokasi bandwidth per frame dilaksanakan dalam dua putaran. Putaran pertama, bandwidth dialokasikan untuk setiap kelas layanan berdasarkan rumus: Bi = min (Ri , Btotal * qi ), i ∈ {1,2,..,5} dan
∑
5 i =1
qi = 1 , dimana i merupakan tanda tipe layanan dan urutan prioritas, R i
merupakan bandwidth yang diminta oleh tiap tipe layanan, sedang B total merupakan total bandwidth yang disediakan sistem. Parameter q i merupakan variabel yang dapat diatur berdasarkan kebutuhan. Pada putaran kedua, Scheduler() akan membagikan sisa bandwidth yang masih tersisa.
Mac802_16::Scheduler() BW = symbolSize_*Symbol_number; /* Memberikan bandwidth kepada trafik UGS, paling tidak sama dengan yang diminta SS */ if (All_UGS_BW != 0 ) { if(UGS_queue > All_UGS_BW)
46
UGS_BW = All_UGS_BW; else UGS_BW = UGS_queue; BW -= UGS_BW; } /* Memberikan bandwidth kepada trafik ertPS, paling tidak sama dengan yang diminta SS */ if(All_ertPS_BW != 0) { if(ertPS_queue > All_ertPS_BW) ertPS_BW = All_ertPS_BW; else ertPS_BW = ertPS_queue; BW -= ertPS_BW; } /* Memberikan bandwidth kepada trafik rtPS, paling tidak sama dengan yang diminta SS */ if(All_rtPS_BW != 0) { if(rtPS_queue > All_rtPS_BW) rtPS_BW = All_rtPS_BW; else rtPS_BW = rtPS_queue; BW -= rtPS_BW; } /* Memberikan bandwidth kepada trafik nrtPS, paling tidak sama dengan yang diminta SS */ if(All_nrtPS_BW != 0) { if(nrtPS_queue > All_nrtPS_BW) nrtPS_BW = All_nrtPS_BW; else nrtPS_BW = nrtPS_queue; BW -= nrtPS_BW; } /* Memberikan bandwidth kepada trafik BE, paling tidak sama dengan yang diminta SS */ if(All_BE_BW != 0) { if(BE_queue > All_BE_BW) BE_BW = All_BE_BW; else
47
BE_BW = BE_queue; BW -= BE_BW; } /* Berikutnya membagikan bandwidth yang masih tersisa */ while(BW > 0 && count < 5) { /* Memberikan q5 bagian dari BW yang tersisa kepada trafik UGS */ if(UGS_queue != 0 && BW != 0) { if(BW - (int)(100*q5) < 0) { UGS_BW += BW; BW = 0; } else { UGS_BW += (int)(100*q5); BW -= (int)(100*q5); } } /* Memberikan q4 bagian dari BW yang tersisa kepada trafik ertPS */ if(ertPS_queue != 0 && BW != 0) { if(BW - (int)(100*q4) < 0) { ertPS_BW += BW; BW = 0; } else { ertPS_BW += (int)(100*q4); BW -= (int)(100*q4); } } /* Memberikan q3 bagian dari BW yang tersisa kepada trafik rtPS*/ if(rtPS_queue != 0 && BW != 0) { if(BW - (int)(100*q3) < 0) { rtPS_BW += BW; BW = 0; } else
48
{ rtPS_BW += (int)(100*q3); BW -= (int)(100*q3); } } /* Memberikan q2 bagian dari BW yang tersisa kepada trafik nrtPS*/ if(nrtPS_queue != 0 && BW != 0) { if(BW - (int)(100*q2) < 0) { nrtPS_BW += BW; BW = 0; } else { nrtPS_BW += (int)(100*q2); BW -= (int)(100*q2); } } /* Memberikan q1 bagian dari BW yang tersisa kepada trafik BE*/ if(BE_queue != 0 && BW != 0) { if(BW - (int)(100*q1) < 0) { BE_BW += BW; BW = 0; } else { BE_BW += (int)(100*q1); BW -= (int)(100*q1); } } count++; }
49
IV.3.2 Deficit Round Robin Dalam pseudocode scheduling DRR ini terdapat parameter tambahan, yaitu parameter Deficit Counter (DC) dan Quantum (Q). Parameter DC terdiri dari: DC_UGS, DC_ertPS, DC_rtPS, DC_nrtPS, dan DC_BE. Sedangkan parameter Q terdiri dari: Q_UGS, Q_ertPS, Q_rtPS, Q_nrtPS, dan Q_BE. Parameter Q dapat diset sesuai dengan kebutuhan scheduling. Berikut ini pseudocode untuk DRR: Mac802_16::Scheduler() /* Memberikan bandwidth kepada trafik UGS, paling tidak sama dengan yang diminta SS */ if (All_UGS_BW != 0 ) { if(UGS_queue > All_UGS_BW) UGS_BW = All_UGS_BW; else UGS_BW = UGS_queue; BW -= UGS_BW; } /* Memberikan bandwidth kepada trafik ertPS, paling tidak sama dengan yang diminta SS */ if(All_ertPS_BW != 0) { if(ertPS_queue > All_ertPS_BW) ertPS_BW = All_ertPS_BW; else ertPS_BW = ertPS_queue; BW -= ertPS_BW; } /* Memberikan bandwidth kepada trafik rtPS, paling tidak sama dengan yang diminta SS */ if(All_rtPS_BW != 0) { if(rtPS_queue > All_rtPS_BW) rtPS_BW = All_rtPS_BW; else rtPS_BW = rtPS_queue; BW -= rtPS_BW; }
50
/* Memberikan bandwidth kepada trafik nrtPS, paling tidak sama dengan yang diminta SS */ if(All_nrtPS_BW != 0) { if(nrtPS_queue > All_nrtPS_BW) nrtPS_BW = All_nrtPS_BW; else nrtPS_BW = nrtPS_queue; BW -= nrtPS_BW; } /* Memberikan bandwidth kepada trafik BE, paling tidak sama dengan yang diminta SS */ if(All_BE_BW != 0) { if(BE_queue > All_BE_BW) BE_BW = All_BE_BW; else BE_BW = BE_queue; BW -= BE_BW; } DC_UGS += Q_UGS; DC_ertPS += Q_ertPS; DC_rtPS += Q_rtPS; DC_nrtPS += Q_nrtPS; DC_BE += Q_BE;
while (BW > 0) { if(rtPS_queue != 0 && BW != 0) { rtPS_queue = rtPS_queue - (All_rtPS_BW + 1); if (rtPS_queue <= dc_rtps_up) { if (BW > 50) { rtPS_BW = rtPS_BW + 50; BW -= 50; } else { rtPS_BW = rtPS_BW + BW; BW = 0;
51
} } } if(UGS_queue != 0 && BW != 0) { UGS_queue = UGS_queue - (All_UGS_BW); if (UGS_queue <= DC_UGS) { if (BW > 50) { UGS_BW = UGS_BW + 50; BW -= 50; } else { UGS_BW = UGS_BW + BW; BW = 0; } } } if(ertPS_queue > All_ertPS_BW && BW != 0) { = ertPS_queue - (All_ertPS_BW); if (ertPS_queue <= dc_ertps_up) { if (BW > 10) { ertPS_BW = ertPS_BW + 10; BW -= 10; } else { ertPS_BW = ertPS_BW + BW; BW = 0; } } } if(nrtPS_queue != 0 && BW != 0) { nrtPS_queue = nrtPS_queue - (All_nrtPS_BW); if (nrtPS_queue <= dc_nrtps_up) { if (BW > 5) { nrtPS_BW = nrtPS_BW + 5;
52
BW -= 5; } else { nrtPS_BW = nrtPS_BW + BW; BW = 0; } } } if(BE_queue != 0 && BW != 0) { BE_queue = BE_queue - (All_BE_BW); if (BE_queue <= dc_be_up) { if (BW > 5) { BE_BW = BE_BW + 5; BW -= 5; } else { BE_BW = BE_BW + BW; BW = 0; } } } count++; } if(UGS_queue <= DC_UGS) DC_UGS = DC_UGS – UGS_queue; if(ertPS_queue <= DC_ertPS) DC_ertPS = DC_ertPS - ertPS_queue; if(rtPS_queue <= DC_rtPS) DC_rtPS = DC_rtPS - rtPS_queue; if(nrtPS_queue <= DC_nrtPS) DC_nrtPS = DC_nrtPS – nrtPS_queue; if(BE_queue <= DC_BE) DC_BE = DC_BE – BE_queue;
IV.4 Contoh Simulasi Pada bagian ini akan diuraikan contoh simulasi jaringan WIMAX menggunakan modul NS-2 yang telah didiskusikan sebelumnya. Dimisalkan sebuah jaringan seperti dibawah ini:
53
Gambar IV.3. Konfigurasi Jaringan
Langkah pertama untuk melakukan simulasi dengan NS-2 adalah dengan menulis script tcl. Berikut ini contoh script tcl untuk jaringan diatas:
set val(chan) Channel/WirelessChannel ;# tipe kanal set val(prop) Propagation/TwoRayGround ;# model propagasi radio set val(netif) Phy/WirelessPhy ;# tipe interface jaringan set val(mac) Mac/802_16 ;# tipe MAC set val(ifq) Queue/DropTail/PriQueue ;# tipe interface queue set val(ll) LL ;# tipe link layer set val(ant) Antenna/OmniAntenna ;# model antena set val(ifqlen) 50 ;# jumlah paket maksimum dalam ifq set val(nn) 6 ;# jumlah node set val(rp) DSDV ;# protokol routing set val(x) 1000 ;# Ukuran sumbu X pada topografi set val(y) 1000 ;# Ukuran sumbu Y pada topography set val(stop) 15.0 ;# waktu simulasi set ns [new Simulator] ; set tracefd [open 5.tr w] ; set namtrace [open 5.nam w] ; Mac/802_16 set channelSize_ 20 Mac/802_16 set modulation_ 0 Mac/802_16 set codeRate_ 0 $ns trace-all $tracefd
54
$ns namtrace-all-wireless $namtrace $val(x) $val(y) set topo [new Topography] $topo load_flatgrid $val(x) $val(y)
;
create-god $val(nn) set chan0 [new $val(chan)] $ns node-config -adhocRouting $val(rp) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channel $chan0 \ -topoInstance $topo \ -agentTrace OFF \ -routerTrace OFF \ -macTrace ON \ -movementTrace OFF set node_(0) [$ns node] $node_(0) set X_ 736 $node_(0) set Y_ 626 $node_(0) set Z_ 0.0 $ns initial_node_pos $node_(0) 20 set node_(1) [$ns node] $node_(1) set X_ 588 $node_(1) set Y_ 814 $node_(1) set Z_ 0.0 $ns initial_node_pos $node_(1) 20 set node_(2) [$ns node] $node_(2) set X_ 848 $node_(2) set Y_ 842 $node_(2) set Z_ 0.0 $ns initial_node_pos $node_(2) 20 set node_(3) [$ns node] $node_(3) set X_ 978 $node_(3) set Y_ 614 $node_(3) set Z_ 0.0
55
$ns initial_node_pos $node_(3) 20 set node_(4) [$ns node] $node_(4) set X_ 828 $node_(4) set Y_ 400 $node_(4) set Z_ 0.0 $ns initial_node_pos $node_(4) 20 set node_(5) [$ns node] $node_(5) set X_ 538 $node_(5) set Y_ 514 $node_(5) set Z_ 0.0 $ns initial_node_pos $node_(5) 20 set udp0 [new Agent/UDP] $ns attach-agent $node_(1) $udp0 set null0 [new Agent/Null] $ns attach-agent $node_(0) $null0 $ns connect $udp0 $null0 $udp0 set fid_ 2 ; set cbr0 [new Application/Traffic/UGS]; $cbr0 attach-agent $udp0 $cbr0 set type_ UGS $cbr0 set packet_size_ 1000; $cbr0 set rate_ 512Kb ; $cbr0 set random_ false $ns at 0.0 "$cbr0 start" $ns at 10.0 "$cbr0 stop" set udp1 [new Agent/UDP] $ns attach-agent $node_(2) $udp1 set null1 [new Agent/Null] $ns attach-agent $node_(0) $null1 $ns connect $udp1 $null1 $udp1 set fid_ 2; set cbr1 [new Application/Traffic/ertPS]; $cbr1 attach-agent $udp1 $cbr1 set type_ UGS $cbr1 set packet_size_ 1000; $cbr1 set rate_ 512Kb ; $cbr1 set random_ false $ns at 1.0 "$cbr1 start" $ns at 10.0 "$cbr1 stop" set udp2 [new Agent/UDP] $ns attach-agent $node_(3) $udp2
56
set null2 [new Agent/Null] $ns attach-agent $node_(0) $null2 $ns connect $udp2 $null2 $udp2 set fid_ 2; set cbr2 [new Application/Traffic/rtPS]; $cbr2 attach-agent $udp2 $cbr2 set type_ UGS $cbr2 set packet_size_ 1000; $cbr2 set rate_ 512Kb ; $cbr2 set random_ false $ns at 2.0 "$cbr2 start" $ns at 10.0 "$cbr2 stop" set udp3 [new Agent/UDP] $ns attach-agent $node_(4) $udp3 set null3 [new Agent/Null] $ns attach-agent $node_(0) $null3 $ns connect $udp3 $null3 $udp3 set fid_ 2; set cbr3 [new Application/Traffic/UGS]; $cbr3 attach-agent $udp3 $cbr3 set type_ UGS $cbr3 set packet_size_ 1000; $cbr3 set rate_ 512Kb ; $cbr3 set random_ false $ns at 3.0 "$cbr3 start" $ns at 10.0 "$cbr3 stop" set udp4 [new Agent/UDP] $ns attach-agent $node_(5) $udp4 set null4 [new Agent/Null] $ns attach-agent $node_(0) $null4 $ns connect $udp4 $null4 $udp4 set fid_ 2; set cbr4 [new Application/Traffic/ertPS]; $cbr4 attach-agent $udp4 $cbr4 set type_ UGS $cbr4 set packet_size_ 1000; $cbr4 set rate_ 512Kb ; $cbr4 set random_ false $ns at 4.0 "$cbr4 start" $ns at 10.0 "$cbr4 stop" Agent/Ping instproc recv {from rtt} { $self instvar node_ puts "node [$node_ id] received ping answer from $from with roundtrip-time $rtt ms."
57
} for {set i 0} {$i < $val(nn) } { incr i } { $ns at $val(stop) "$node_($i) reset"; } $ns at $val(stop) "$ns nam-end-wireless $val(stop)" $ns at $val(stop) "stop" $ns at 15.1 "puts \"end simulation\" ; $ns halt" proc stop {} { global ns tracefd namtrace $ns flush-trace close $tracefd close $namtrace } $ns run Selanjutnya apabila script tcl ini dieksekusi maka akan didapat 2 file data: 5.tr dan 5.nam. File 5.tr dapat berisi seperti dibawah ini:
s 1.339690610 _1_ MAC s 1.339690610 _4_ MAC r 1.339691408 _0_ MAC r 1.339691418 _0_ MAC r 1.339691423 _0_ MAC s 1.339762877 _2_ MAC r 1.339763688 _0_ MAC s 1.339820690 _5_ MAC r 1.339821448 _0_ MAC s 1.339907410 _1_ MAC s 1.339907410 _4_ MAC s 1.339907410 _2_ MAC r 1.339908208 _0_ MAC r 1.339908221 _0_ MAC r 1.339908223 _0_ MAC s 1.340015810 _3_ MAC r 1.340016618 _0_ MAC s 1.340051943 _2_ MAC r 1.340052754 _0_ MAC s 1.340080850 _5_ MAC r 1.340081608 _0_ MAC
--- 0 UGS 224 [0 1000000 8 0] ------- [1:0 0:0 32 0] --- 0 UGS 224 [0 4000000 8 0] ------- [4:0 0:9 32 0] --- 0 UGS 224 [0 1000000 8 0] ------- [1:0 0:0 32 0] --- 0 UGS 224 [0 3000000 8 0] ------- [3:0 0:6 32 0] --- 0 UGS 224 [0 4000000 8 0] ------- [4:0 0:9 32 0] --- 0 rtPS 224 [0 2000000 8 0] ------- [2:2 0:5 32 0] --- 0 rtPS 224 [0 2000000 8 0] ------- [2:2 0:5 32 0] --- 0 UGS 224 [0 5000000 8 0] ------- [5:0 0:12 32 0] --- 0 UGS 224 [0 5000000 8 0] ------- [5:0 0:12 32 0] --- 0 UGS 224 [0 1000000 8 0] ------- [1:0 0:0 32 0] --- 0 ertPS 224 [0 4000000 8 0] ------- [4:1 0:10 32 0] --- 0 rtPS 224 [0 2000000 8 0] ------- [2:2 0:5 32 0] --- 0 UGS 224 [0 1000000 8 0] ------- [1:0 0:0 32 0] --- 0 rtPS 224 [0 2000000 8 0] ------- [2:2 0:5 32 0] --- 0 ertPS 224 [0 4000000 8 0] ------- [4:1 0:10 32 0] --- 0 UGS 224 [0 3000000 8 0] ------- [3:0 0:6 32 0] --- 0 UGS 224 [0 3000000 8 0] ------- [3:0 0:6 32 0] --- 0 rtPS 224 [0 2000000 8 0] ------- [2:2 0:5 32 0] --- 0 rtPS 224 [0 2000000 8 0] ------- [2:2 0:5 32 0] --- 0 ertPS 224 [0 5000000 8 0] ------- [5:1 0:13 32 0] --- 0 ertPS 224 [0 5000000 8 0] ------- [5:1 0:13 32 0]
58
Apabila file 5.nam dieksekusi maka akan terlihat gambar seperti dibawah ini:
Gambar IV.4. Tampilan NAM pada NS-2
59