Laboratorul trecut am studiat evoluția throughputului atunci când stația se îndepărtează de access point fără a apela la metode de compensare. În principiu am observat că scăderea este bruscă de la throughput maxim la 0. În acest laborator ne propunem să vedem cum poate nivelul de MAC să intervină în a compensa cât mai mult pierderile cauzate de mediu și de distanță. O metodă este adaptarea ratelor de TX (tx_rates
sau MCS) în funcție de feedbackul primit pe recepție (RSSI - received signal strength indicator, virtual carrier sense, physical carrier sense).
În acest laborator vom studia comportamentul a trei algoritmi adaptivi:
iwl-mwm-rs
din placile Wireless Intel (care au driverul iwlwifi
), puteți vedea un paper aici: mswim_2019_1_.pdf. Implementarea AARF în simulatorul ns-3 este descrisă aici. Vom folosi o simularea realizată în ns-3 de la laboratorul 5 și vom încerca să amânăm pierderile pachetelor cauzate de către îndepărtarea stației de access point prin adaptarea dinamică a MCS-ului folosită de algoritmii la nivel MAC descriși mai sus.
/home/student/ns-3-dev
.
Dacă lucrați pe alt dispozitiv trebuie să rulați comenzile:
student@isrm-vm-2020:~$ git clone https://gitlab.com/nsnam/ns-3-dev.git student@isrm-vm-2020:~$ cd ~/ns-3-dev student@isrm-vm-2020:~/ns-3-dev$ git checkout -b ns-332-rel ns-3.32 student@isrm-vm-2020:~$ cd ~/ns-3-dev/examples student@isrm-vm-2020:~/ns-3-dev/examples$ git clone https://github.com/isrm-lab/ns3-labs.git student@isrm-vm-2020:~$ cd ~/ns-3-dev student@isrm-vm-2020:~$ ./waf configure --build-profile=debug --enable-examples --enable-tests student@isrm-vm-2020:~$ ./waf build -j4
Pentru a lansa aplicatia de Jupyter Notebook, rulati urmatoarea comanda:
student@isrm-vm-2020:~$ jupyter-notebook
Rulați simularea cu parametrii impliciți schimbând doar phyRate
. Folosim ConstantRateWifiManager
. Exemplu de rulare pentru 6Mbps
:
./ns3 run "lab5 --apManager=ns3::ConstantRateWifiManager --phyRate=ErpOfdmRate6Mbps"
Salvați datele obținute, ne interesează să obținem o funcție throughput(distanță) pentru următoarele phyRate
: ErpOfdmRate6Mbps
, ErpOfdmRate12Mbps
, ErpOfdmRate24Mbps
, ErpOfdmRate54Mbps
. Plotați datele obținute. Ce observăm? De ce credeți că se întâmplă așa?
Păstrați datele obținute la task-ul anterior pentru a putea plota pe același grafic evoluția algoritmilor adaptivi în comparație cu constelațiile. Algoritmii adaptivi nu au nevoie de specificarea parametrului phyRate
deoarece ei vor încerca să folosească cel mai bun MCS suportat de ambii vorbitori și îl vor regla treptat în funcție de signal strength și pierderi ale ACK-urilor de L2.
Rulare pentru cei trei algoritmi de interes:
./waf --run "lab5 --apManager=ns3::AarfWifiManager" ./waf --run "lab5 --apManager=ns3::MinstrelWifiManager" ./waf --run "lab5 --apManager=ns3::IdealWifiManager"
Activați PCAP tracing pentru cei trei algoritmi adaptivi și reluați experimentele. Urmăriți evoluția parametrilor pentru pachetele de date (adica doar pachetele UDP):
./waf --run "lab5 --apManager=ns3::AarfWifiManager --pcap=true" ./waf --run "lab5 --apManager=ns3::MinstrelWifiManager --pcap=true" ./waf --run "lab5 --apManager=ns3::IdealWifiManager --pcap=true"
Odata ce ati obtinut capturile, ne vom folosi de tshark
pentru a extrage coloanele de timestamp
, data rate
si signal strength
si vom realiza urmatoarele grafice: MCS (data rate) in functie de timestamp, signal strength in functie de timestamp.
Coloanele de interes pentru tshark
sunt urmatoarele:
wlan_radio.signal_dbm
)wlan_radio.data_rate
)frame.time_epoch
)
Vom extrage aceste coloane doar pentru pachetele UDP. In consecinta, va trebui sa aplicam un filtru: ip.proto == 17
.
Pentru mai multe detalii legate de cum puteti parsa un fisier pcap
cu tshark
, puteti sa va uitati aici.
data_rate
) respectiv wlan_radio.signal_dbm
. Folosiți același template de la lab5
lab5-propagation-adaptive-1-0.pcap
Ne amintim din laboratorul trecut comportamentul TCP cu ns3::ConstantRateWifiManager
(deci cu rata fixată). Vom vedea comportamentul TCP-ului cu cei trei algoritmi adaptivi: Ideal, Minstrel și AARF. Exemplu de rulare:
./waf --run "lab5 --apManager=ns3::IdealWifiManager --isTcp=true" ./waf --run "lab5 --apManager=ns3::MinstrelWifiManager --isTcp=true" ./waf --run "lab5 --apManager=ns3::AarfWifiManager --isTcp=true"
Vom obține trei seturi de date pe care ne propunem să le plotăm pe același grafic (luăm datele din outputul simulării și facem tot o funcție throughput(distanță)).
Care algoritm se comportă mai bine în cazul TCP-ului? Care a avut rezultate proaste? Parcurgeți din nou teoria despre cei trei algoritmi și uitați-vă cu atenție pe grafice la comportamentul lor la pierderi (e.g. Minstrel coboară mai rapid la rate mici facând un fel de căutare binară).