Differences

This shows you the differences between two versions of the page.

Link to this comparison view

isrm:laboratoare:new:06 [2020/03/28 17:24]
mbarbulescu
isrm:laboratoare:new:06 [2022/04/11 09:34] (current)
mbarbulescu [[03] Algoritmi adaptivi - evoluția în PCAP]
Line 15: Line 15:
   * După cum am menționat mai sus layer-ul de MAC (nivelul legătură de date cum  îl mai știți) își ia ca feedback RSSI (sau SNR - Signal to Noise Ratio) pentru a decide MCS-ul folosit la transmisie. Un algoritm destul de simplu care folosește un raport între SNR și BER (Bit Error Rate) este [[https://​www.nsnam.org/​doxygen/​classns3_1_1_ideal_wifi_manager.html#​details|Ideal Rate control algorithm din ns-3]], care este implementat conform descrierii din acest paper: {{:​isrm:​laboratoare:​new:​mesh-mobicom01.pdf|}}   * După cum am menționat mai sus layer-ul de MAC (nivelul legătură de date cum  îl mai știți) își ia ca feedback RSSI (sau SNR - Signal to Noise Ratio) pentru a decide MCS-ul folosit la transmisie. Un algoritm destul de simplu care folosește un raport între SNR și BER (Bit Error Rate) este [[https://​www.nsnam.org/​doxygen/​classns3_1_1_ideal_wifi_manager.html#​details|Ideal Rate control algorithm din ns-3]], care este implementat conform descrierii din acest paper: {{:​isrm:​laboratoare:​new:​mesh-mobicom01.pdf|}}
  
-  * **AARF** - Adaptive Automatic Rate Feedback (paper: {{:​isrm:​laboratoare:​new:​aarf.pdf|}}) - un algortim ​îmbunătățit al clasicului ARF publicat în 1997 de Bell Labs (paper aici: {{:​isrm:​laboratoare:​new:​06770930.pdf|}}) și care a fost folosit în dongle-uri WiFi 802.11b de la acea vreme. Pe scurt acești algoritmi încearcă din start să folosească cel mai mare MCS suportat de ambii vorbitori iar după două eșecuri să micșoreze treptat. Într-un mod similar, dar cu o implementare proprietară,​ funcționează algoritmii ''​iwl-mwm-rs''​ din placile Wireless Intel (care au driverul ''​iwlwifi''​),​ puteți vedea un paper aici: {{:​isrm:​laboratoare:​new:​mswim_2019_1_.pdf|}}. Implementarea AARF în [[https://​www.nsnam.org/​docs/​doxygen/​classns3_1_1_aarf_wifi_manager.html#​details|simulatorul ns-3 este descrisă aici]]. ​+  * **AARF** - Adaptive Automatic Rate Feedback (paper: {{:​isrm:​laboratoare:​new:​aarf.pdf|}}) - un algoritm ​îmbunătățit al clasicului ARF publicat în 1997 de Bell Labs (paper aici: {{:​isrm:​laboratoare:​new:​06770930.pdf|}}) și care a fost folosit în dongle-uri WiFi 802.11b de la acea vreme. Pe scurt acești algoritmi încearcă din start să folosească cel mai mare MCS suportat de ambii vorbitori iar după două eșecuri să micșoreze treptat. Într-un mod similar, dar cu o implementare proprietară,​ funcționează algoritmii ''​iwl-mwm-rs''​ din placile Wireless Intel (care au driverul ''​iwlwifi''​),​ puteți vedea un paper aici: {{:​isrm:​laboratoare:​new:​mswim_2019_1_.pdf|}}. Implementarea AARF în [[https://​www.nsnam.org/​docs/​doxygen/​classns3_1_1_aarf_wifi_manager.html#​details|simulatorul ns-3 este descrisă aici]]. ​
  
   * În kernelul de Linux, pentru plăcile care nu implementează în firmware off-loaded un algoritm adaptiv, există [[https://​wireless.wiki.kernel.org/​en/​developers/​documentation/​mac80211/​ratecontrol/​minstrel|algoritmul Minstrel]] și este folosit de stiva WiFi de networking a Linux. Acest algoritm nu se bazează exclusiv pe feedback-ul RX-ului (e.g. RSSI cum menționam mai sus) ci încearcă să creeze un model statistic de variabile aleatoare care sunt determinate de: număr de biți transmiși, numărul de retransmisii ale unui pachet în aer deja planificat de DCF și probabilitatea estimată de succes a TX-ului în funcție de robustețea MCS-ului ales la acel moment. Minstrel încearcă **toate** ratele de TX posibile și le elimină pe cele care oferă rezultate proaste. Implementarea Minstrel în [[https://​www.nsnam.org/​doxygen/​classns3_1_1_minstrel_wifi_manager.html#​details|simulatorul ns-3 este descrisă aici]].   * În kernelul de Linux, pentru plăcile care nu implementează în firmware off-loaded un algoritm adaptiv, există [[https://​wireless.wiki.kernel.org/​en/​developers/​documentation/​mac80211/​ratecontrol/​minstrel|algoritmul Minstrel]] și este folosit de stiva WiFi de networking a Linux. Acest algoritm nu se bazează exclusiv pe feedback-ul RX-ului (e.g. RSSI cum menționam mai sus) ci încearcă să creeze un model statistic de variabile aleatoare care sunt determinate de: număr de biți transmiși, numărul de retransmisii ale unui pachet în aer deja planificat de DCF și probabilitatea estimată de succes a TX-ului în funcție de robustețea MCS-ului ales la acel moment. Minstrel încearcă **toate** ratele de TX posibile și le elimină pe cele care oferă rezultate proaste. Implementarea Minstrel în [[https://​www.nsnam.org/​doxygen/​classns3_1_1_minstrel_wifi_manager.html#​details|simulatorul ns-3 este descrisă aici]].
Line 29: Line 29:
 ===== [00] Pregătirea laboratorului ===== ===== [00] Pregătirea laboratorului =====
  
-Dacă vreți să creați folder nou pe calculatoarele voastre: 
  
-<code bash+<note important
-git clone https://gitlab.com/​b12mihai1/ns-3-dev.git ~/​ns-3-dev +Pe [[:isrm:​mv|mașina virtuală]] aveți tot ce trebuie în ''​/home/student/ns-3-dev''​
-cd ~/​ns-3-dev +
-git checkout -b isrm_2020 remotes/​origin/​isrm_2020 +
-git submodule init +
-git submodule update --remote --merge +
-git submodule foreach git pull origin master +
-./waf configure --build-profile=debug --enable-examples --enable-tests && ./waf build -j4 +
-</​code>​+
  
-Dacă folosiți [[:​isrm:​mv|mașina virtuală]]:+Dacă lucrați pe alt dispozitiv trebuie să rulați comenzile:
  
 <code bash> <code bash>
-student@isrm-vm:​~$ ​ cd ~/ns-3-dev+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
 </​code>​ </​code>​
 +</​note>​
  
-Verificați că sunteți pe branch-ul ''​isrm_2020''​ din remote-ul https://​gitlab.com/​b12mihai1/​ns-3-dev.git:+Pentru a lansa aplicatia de Jupyter Notebook, rulati urmatoarea comanda:
  
 <code bash> <code bash>
-student@isrm-vm:~/ns-3-dev$ git remote -v +student@isrm-vm-2020:~$ jupyter-notebook
-origin https://​gitlab.com/​b12mihai1/​ns-3-dev.git (fetch) +
-origin https://​gitlab.com/​b12mihai1/​ns-3-dev.git (push) +
- +
-student@isrm-vm:~/ns-3-devgit branch ​-vv +
-* isrm_2020 5993ca379 [origin/​isrm_2020] fix submodules to have https instead of ssh +
-  master ​   da1b41ed1 [origin/​master] tcp: Ensure that congestion state is set after every notification+
 </​code>​ </​code>​
- 
-Rulați următoarele comenzi pentru update-ul submodului din ''​examples/​ns3-labs'':​ 
- 
-<code bash> 
-student@isrm-vm:​~/​ns-3-dev$ git submodule update --remote --merge 
-</​code>​ 
- 
-Dacă cea de mai sus nu merge alternativ puteți încerca: 
- 
-<code bash> 
-student@isrm-vm:​~/​ns-3-dev$ git submodule foreach git pull origin master 
-</​code>​ 
- 
  
 ===== [01] Comparație între MCS-uri fixe versus distanță - trafic UDP ===== ===== [01] Comparație între MCS-uri fixe versus distanță - trafic UDP =====
Line 83: Line 64:
  
 <note tip>​MCS-urile mai slabe care nu pot înghesui mulți biți de informație într-un simbol sunt mai robuste pe distanțe lungi.</​note>​ <note tip>​MCS-urile mai slabe care nu pot înghesui mulți biți de informație într-un simbol sunt mai robuste pe distanțe lungi.</​note>​
 +
 +<note important>​Plotați Throughput în funcție de distanță</​note>​
  
 ===== [02] Algoritmi adaptivi - trafic UDP ===== ===== [02] Algoritmi adaptivi - trafic UDP =====
Line 95: Line 78:
 ./waf --run "lab5 --apManager=ns3::​IdealWifiManager"​ ./waf --run "lab5 --apManager=ns3::​IdealWifiManager"​
 </​code>​ </​code>​
 +
 +<note important>​Plotați Throughput (Oy) în funcție de distanță (Ox)</​note>​
  
 ===== [03] Algoritmi adaptivi - evoluția în PCAP ===== ===== [03] Algoritmi adaptivi - evoluția în PCAP =====
  
-Activați PCAP tracing pentru cei trei algoritmi adaptivi și reluați experimentele. Urmăriți evoluția parametrilor pentru pachetele de date (puneți filtru TODO de UDP):+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):
     * Signal Strength     * Signal Strength
     * DataRate     * DataRate
- 
  
 <code bash> <code bash>
-./waf --run "lab5 --apManager=ns3::​AarfWifiManager --isPcap=true"​ +./waf --run "lab5 --apManager=ns3::​AarfWifiManager --pcap=true"​ 
-./waf --run "lab5 --apManager=ns3::​MinstrelWifiManager ​ --isPcap=true"​ +./waf --run "lab5 --apManager=ns3::​MinstrelWifiManager ​ --pcap=true"​ 
-./waf --run "lab5 --apManager=ns3::​IdealWifiManager --isPcap=true"+./waf --run "lab5 --apManager=ns3::​IdealWifiManager --pcap=true"
 </​code>​ </​code>​
  
-TODO: task sa foloseasca ​tshark pentru a plota o funcție ​MCS(distanțăsau MCS(timestamp) ​și să compare cu taskul 2+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 ratein functie de timestamp, signal strength in functie de timestamp. 
 + 
 +Coloanele de interes pentru ''​tshark''​ sunt urmatoarele:​ 
 +    * Signal Strength (pentru a selecta acest camp puteti folosi identificatorul ''​wlan_radio.signal_dbm''​) 
 +    * DataRate (pentru a selecta acest camp puteti folosi identificatorul ''​wlan_radio.data_rate''​) 
 +    * Timestamp (pentru a selecta acest camp puteti folosi identificatorul ''​frame.time_epoch''​)
  
-===== [04] Algoritmi adaptivi - trafic TCP =====+Vom extrage aceste coloane doar pentru pachetele UDP. In consecinta, va trebui sa aplicam un filtru: ''​ip.proto ​== 17''​. ​
  
-Ne amintim laboratorul trecut comportamentul TCP cu ''​ns3::​ConstantRateWifiManager'' ​(deci cu rata fixată) și un singur număr de reîncercări era foarte prost. Hai să repetăm experimentul pentru ​''​tries=1,4,7'' ​și să vedem comportamentul TCP-ului cu cei trei algoritmi adaptiviIdeal, Minstrel și AARFExemplu de rulare:+Pentru mai multe detalii legate de cum puteti parsa un fisier ​''​pcap''​ cu ''​tshark''​, puteti sa va uitati [[https://​ocw.cs.pub.ro/​courses/​isrm/​laboratoare/​new/​03#​b_analiza_pcap_cu_tshark|aici]].
  
-<code bash> +<note important>Pentru fiecare algoritmplotați 2 graficeOx=Timestamp și Oy va fi MCS ales (''​data_rate''​) respectiv ''​wlan_radio.signal_dbm''​Folosiți același template de la lab5</note>
-./waf --run "lab5 --apManager=ns3::IdealWifiManager --isTcp=true --tries=1"​ +
-./waf --run "lab5 --apManager=ns3::​MinstrelWifiManager --isTcp=true --tries=1"​ +
-./waf --run "lab5 --apManager=ns3::​AarfWifiManager --isTcp=true --tries=1"​ +
-</code>+
  
-Vom obține două 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ță))+<note tip>Se alege pcap-ul: ''​lab5-propagation-adaptive-1-0.pcap''</​note>​
  
-Care algoritm se comportă mai bine în cazul TCP-ului cu ''​tries=1''​, care a avut rezultate proaste ​Parcurgeți din nou teoria despre ​cei doi 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ă)+===== [04 optional] Algoritmi adaptivi - trafic TCP ===== 
 + 
 +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 AARFExemplu ​de rulare: 
 + 
 +<code bash> 
 +./waf --run "lab5 --apManager=ns3::​IdealWifiManager --isTcp=true"​ 
 +./waf --run "lab5 --apManager=ns3::​MinstrelWifiManager --isTcp=true"​ 
 +./waf --run "lab5 --apManager=ns3::​AarfWifiManager --isTcp=true"​ 
 +</​code>​
  
-Ce se întamplă atunci când ''​tries=7'',​ cum se comportă cei doi algoritmi? ​+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ă). ​
  
  
isrm/laboratoare/new/06.txt · Last modified: 2022/04/11 09:34 by mbarbulescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0