---- 0-TH SEC: ----
<--------------------------| | | |<-------------------CUBIC
| | 500ms | |
CUBIC--------------------->| | ^^^^^5ms | |------------------------>
| | 10ms| | | |
| |---120Mbps,20ms--| |
| | | |
| | 15-TH SEC: | |
VEGAS---120Mbps,2000pkts-->| | | |--120Mbps,5ms,3000pkts-->
| | | |
VEGAS---120Mbps,2000pkts-->| | | |--120Mbps,5ms,3000pkts-->
---- 30 SECS ----
CoCo-Beholder adalah emulator jaringan virtual ramah manusia yang menyediakan topologi dumbbell populer dalam berbagai ukuran. Setiap tautan topologi mungkin memiliki laju, penundaan, dan ukuran antrian tersendiri. Tautan pusat mungkin juga memiliki penundaan variabel dengan jitter opsional. Aliran skema yang berbeda dapat berjalan bersama dalam topologi untuk waktu proses tertentu dalam hitungan detik. Untuk setiap aliran, arahnya dan detik mulai runtimenya dapat dipilih.
Setiap aliran memiliki host di bagian kiri dan satu host di bagian kanan topologi dan host bertukar lalu lintas skema dengan satu host sebagai pengirim dan satu lagi sebagai penerima. Ada router kiri yang menghubungkan semua host di bagian kiri dan router kanan yang menghubungkan semua host di bagian kanan topologi. Semua aliran berbagi tautan pusat yang sama antara kedua router.
Pengujian
Analisa
Pembuatan Plot dan Statistik
Instalasi
Memecahkan Masalah Skema
Menambahkan Skema Baru
Dukungan Python
Perpustakaan Pihak Ketiga
Kepengarangan
Kontak
Perintah ini menentukan jalur ke koleksi yang berisi skema yang akan diuji dan menjalankan pengujian selama 30 detik, dengan tautan pusat memiliki kecepatan 120 Mbps dan penundaan variabel (penundaan dasar 20 ms, delta 500 ms, langkah 10 ms, jitter 5 MS):
./run.py -p ~ /pantheon 20ms 0.5s 10ms 5ms -t 30 -r 120 -s 12345
Jika ini adalah skrip yang pertama kali dijalankan, file tata letak default layout.yml
, yang ditunjukkan di bawah, akan dibuat dan digunakan. Pengaturan pengujian yang dihasilkan disajikan pada gambar topologi halter di bagian atas halaman ini. File tata letak dapat diedit untuk mendapatkan pengaturan pengujian yang jauh lebih kompleks dengan lebih banyak aliran yang termasuk dalam berbagai skema dan memiliki pengaturan jaringan yang beragam.
# Delays/rates are optional: if lacking or null, they are set to 0us/0.0
# and for netem, to set delay/rate to zero is same as to leave it unset.
# Sizes of queues are optional: if lacking or null, they are set to 1000.
- direction : <-
flows : 1
left-delay : null
left-queues : null
left-rate : null
right-delay : null
right-queues : null
right-rate : null
scheme : cubic
start : 0
- direction : ->
flows : 2
left-delay : 0us
left-queues : 2000
left-rate : 120.0
right-delay : 5ms
right-queues : 3000
right-rate : 120
scheme : vegas
start : 15
- direction : ->
flows : 1
scheme : cubic
start : 0
Laju, penundaan, dan ukuran antrian selalu dipasang di kedua antarmuka di ujung setiap tautan dalam topologi menggunakan emulator tautan tc
qdisc NetEm. Secara khusus, ini berarti bahwa RTT suatu link adalah dua kali penundaan (satu arah). Hanya tautan pusat yang boleh memiliki dua ukuran antrean antarmuka yang berbeda di ujungnya – lihat argumen -q1
, -q2
, -q
dalam pesan bantuan skrip. Secara default, kedua antrian tersebut berjumlah 1000 paket.
Penundaan variabel pada tautan pusat ditentukan oleh empat argumen posisi: penundaan dasar, delta, langkah, dan jitter, di mana jitter dapat dilewati. Setiap waktu delta, penundaan bertambah atau berkurang secara bertahap tergantung pada generator pseudorandom, yang benihnya dapat ditentukan dengan argumen -s
atau diberi waktu UNIX saat ini. Untuk mendapatkan penundaan yang konstan pada tautan pusat, pilih delta >= runtime -t
.
Ke dalam direktori keluaran yang dipilih, file metadata.json
ditulis yang berisi semua parameter pengujian, termasuk benih generator. File tersebut dapat diumpankan ke CoCo-Beholder di masa mendatang untuk mereproduksi pengujian sepenuhnya. Selain itu, selama pengujian, file dump PCAP dicatat di semua host topologi dumbbell ke dalam direktori keluaran menggunakan tcpdump
. Jadi misalnya pada gambar, delapan file dump PCAP dicatat.
Catatan #1: Penundaan maksimum untuk setiap tautan – samping dan tengah (jitter tidak dihitung) – dapat ditentukan dengan opsi -m
. Untuk mendapatkan penundaan gelombang persegi pada link pusat, atur penundaan maksimum ke jumlah penundaan dasar dan langkah.
Catatan #2: Skrip pengujian memanggil setup_after_reboot
pada pembungkus Pantheon dari setiap skema dalam file tata letak sebelum meluncurkan aliran skema apa pun, sehingga pengguna tidak perlu mengatur skema secara manual setelah setiap reboot.
Skrip analisis hanya menerima dua argumen: folder masukan dan folder keluaran – dumps
dan graphs/data
secara default.
Pertama, skrip cukup menyalin file metadata dari folder masukan ke folder keluaran. Kemudian, skrip memproses sepasang dump PCAP <flow's starting #>-<scheme>-<sender/receiver>.pcap
dari setiap aliran dan mengekstrak informasi tentang paket aliran ke dalam file log data json individual aliran tersebut. Misalnya, untuk dua dump ~12 GB, satu file log data ~300 MB dihasilkan.
Output parsial dari skrip analisis untuk contoh pada gambar:
./analyze.py
cubic scheme, flow 1:
sender dump: 100.0% in 5.18s
Total: 222667 pkts/224631734 bytes, from sender: 144906 pkts/219351284 bytes
receiver dump: 100.0% in 5.37s
Total: 222245 pkts/223376026 bytes, from sender: 144052 pkts/218058328 bytes
♥ Union of data from sender recorded on both sides: 144906 pkts/219351284 bytes
♦ Subset of ♥ which was not recorded at sender : 0 pkts/0 bytes
♣ Subset of ♥ which was not recorded at receiver : 854 pkts/1292956 bytes
♠ Loss (ratio of ♣ bytes to ♥ bytes) : 0.589%
Saving the data of the flow to the file...
==========================================
# and so on for the three more flows...
Untuk pembuatan plot dan statistik yang akan datang, PCAP dump tidak diperlukan lagi. Analisis dump PCAP dilakukan hanya sekali, dan kemudian skrip plot dapat dijalankan sebanyak yang diperlukan pada file log data untuk menghasilkan berbagai plot dengan cepat.
Skrip plot plot.py
membaca file log data aliran dan menghasilkan plot dan statistik ke dalam folder keluaran ( graphs
secara default). Berbagai jenis plot dan statistik dapat dihasilkan:
-f, --per-flow Graphs and stats are generated per flow, i.e. each
graph has a separate curve per flow
-t, --total Total graphs and stats are generated for all flows
altogether, i.e. each graph has only one curve
-s "FIELD1 FIELD2...", --per-subset "FIELD1 FIELD2..."
Graphs and stats are generated per subset, i.e. each
graph has one curve per subset. Flows are in one
subset if they have the same values of the chosen
layout field(s). E.g. for -s "scheme direction", each
graph will have one curve per subset of flows having
both the same scheme name and direction. Currently
allowed layout fields: ['scheme', 'direction'].
Untuk tipe yang dipilih, tiga plot garis dan satu plot sebar dihasilkan:
Misalnya, di atas, seseorang dapat melihat plot penundaan satu arah per aliran per paket untuk pengaturan pada gambar.
Plot rata-rata dirata-ratakan per interval waktu agregasi: angka float positif apa pun yang disertakan dengan argumen -i
atau 0,5 detik secara default.
Plot indeks rata-rata Jain selalu berisi satu kurva yang dihitung pada kurva yang ada dalam plot throughput rata-rata yang sesuai.
Argumen -c
dan -j
memungkinkan perubahan warna kurva dalam plot secara fleksibel.
Untuk tipe yang dipilih, file statistik dihasilkan. Itu tidak bergantung pada interval agregasi yang dipilih dan berisi:
Rata-rata keseluruhan penundaan satu arah dan rata-rata keseluruhan penundaan satu arah per paket pada suatu kurva adalah nilai yang sama yang dihitung dengan cara yang berbeda.
Proses instalasinya adalah sebagai berikut:
Instal kumpulan skema pengendalian kemacetan Pantheon dan, jika diperlukan, tambahkan lebih banyak skema ke koleksi secara lokal
Instal emulator CoCo-Beholder menggunakan skrip instalasinya
Selesai. Uji skema dalam koleksi menggunakan CoCo-Beholder.
Menginstal CoCo-Beholder sendiri sangatlah mudah, dan skrip instalasinya install.sh
sangat mudah dan singkat. Namun, menginstal kumpulan skema Pantheon sering kali menimbulkan banyak masalah. Selain itu, beberapa distribusi Linux hanya memiliki bug. Oleh karena itu, silakan lihat petunjuk rinci untuk instalasi di Ubuntu 16.04, Ubuntu 18.04, dan Debian 10.
Petunjuk di bawah ini diuji pada VM dengan instalasi baru Ubuntu 16.04.6-desktop-amd64 (Nov. 2019).
Sebagai catatan umum: jika Anda memerlukan skema bbr (TCP BBRv1.0) pastikan untuk menggunakan kernel Linux >=4.9.
Rilis baru 16.04 LTS (16.04.5 dan lebih tinggi) hadir dengan kernel Linux 4.15. CoCo-Beholder menggunakan tc qdisc NetEm delay jitter yang rusak pada kernel Ubuntu 4.15. Solusinya:
sudo apt-get install linux-image-4.13.0-39-generic linux-headers-4.13.0-39
linux-headers-4.13.0-39-generic linux-image-extra-4.13.0-39-generic
Dalam file /etc/default/grub
, beri komentar pada baris GRUB_HIDDEN_TIMEOUT=0
dan jalankan perintah sudo update-grub
. Ini akan memungkinkan Anda melihat menu Grub setelah reboot.
Nyalakan ulang dan di menu Grub, pilih Advanced options for Ubuntu
dan di sana Ubuntu, with Linux 4.13.0-39-generic
. Periksa kernel yang sedang berjalan dengan perintah uname -ar
.
Unduh repositori Pantheon git dan submodul git dari skema yang disertakan:
git clone https://github.com/StanfordSNR/pantheon.git && cd pantheon
git submodule update --init --recursive
rm -r src/wrappers/patches
tools/install_deps.sh
-nya). Anda hanya perlu menginstal skema menggunakan perintah di bawah ini. Jika perintah terakhir memberi Anda kesalahan seperti Command "python setup.py egg_info" failed with error code 1...
, lalu jalankan sudo pip install --upgrade pip
dan ulangi perintah yang gagal. sudo apt-get install autoconf # for verus
sudo apt-get install nodejs-legacy # for webrtc
sudo apt-get install python-pip && sudo pip install pyyaml # for setup.py
src/experiments/setup.py --install-deps (--all | --schemes " <cc1> <cc2> ... " )
src/experiments/setup.py --setup (--all | --schemes " <cc1> <cc2> ... " )
cd coco-beholder && sudo ./install.sh
Sekarang Anda siap untuk menguji skema tersebut.
Petunjuk di bawah ini diuji pada VM dengan instalasi baru Ubuntu 18.04.3-desktop-amd64 (Nov. 2019).
Sebagai catatan umum: jika Anda memerlukan skema bbr (TCP BBRv1.0) pastikan untuk menggunakan kernel Linux >=4.9.
Kernel Ubuntu 4.15 memiliki bug. Dengan Ubuntu >=18.04.3, Anda mendapatkan kernel >=5.0 jadi, silakan lanjutkan ke langkah berikutnya.
Unduh repositori Pantheon git dan submodul git dari skema yang disertakan:
git clone https://github.com/StanfordSNR/pantheon.git && cd pantheon
git submodule update --init --recursive
rm -r src/wrappers/patches
tools/install_deps.sh
-nya). Anda hanya perlu menginstal skema menggunakan perintah di bawah ini. sudo apt-get install autoconf # for verus
sudo apt-get install python-pip && sudo pip install pyyaml # for setup.py
src/experiments/setup.py --install-deps (--all | --schemes " <cc1> <cc2> ... " )
src/experiments/setup.py --setup (--all | --schemes " <cc1> <cc2> ... " )
cd coco-beholder && sudo ./install.sh
Sekarang Anda siap untuk menguji skema tersebut.
Petunjuk di bawah ini diuji pada VM dengan instalasi baru Debian 10.1.0-amd64-netinst (Nov. 2019).
Sebagai catatan umum: jika Anda memerlukan skema bbr (TCP BBRv1.0) pastikan untuk menggunakan kernel Linux >=4.9.
Kernel Ubuntu 4.15 memiliki bug. Tidak jelas apakah kernel Debian 4.15 mengalami masalah ini. Bagaimanapun, dengan Debian >=10.1.0, Anda mendapatkan kernel >=4.19 jadi, silakan lanjutkan ke langkah berikutnya.
Unduh repositori Pantheon git dan submodul git dari skema yang disertakan:
git clone https://github.com/StanfordSNR/pantheon.git && cd pantheon
git submodule update --init --recursive
rm -r src/wrappers/patches
tools/install_deps.sh
-nya). Anda hanya perlu menginstal skemanya. Pertama, instal dependensi skema: sed -i ' s/chromium-browser/chromium/g ' src/wrappers/webrtc.py # for webrtc
sudo apt-get install python-pip && sudo pip install pyyaml # for setup.py
src/experiments/setup.py --install-deps (--all | --schemes " <cc1> <cc2> ... " )
Tambahkan string export PATH=/usr/sbin:$PATH
ke file ~/.bashrc
Anda dan jalankan perintah source ~/.bashrc
. Ini akan mengaktifkan utilitas /usr/sbin/sysctl
, yang diperlukan tidak hanya selama instalasi tetapi juga nanti.
Untuk membangun Verus, Anda perlu menurunkan versi perpustakaan alglib Anda. Jadi, silakan tambahkan deb <URL> stretch main
ke /etc/apt/sources.list
Anda dan jalankan:
sudo apt-get update
sudo apt-get remove libalglib-dev # remove 3.14 version
sudo apt-get install -t stretch libalglib-dev # install 3.10 version
sudo apt-get install autoconf # for verus
myregex= ' s/milliseconds((.+))/milliseconds(int(1))/g '
sed -i $myregex third_party/verus/src/verus_client.cpp
sed -i $myregex third_party/verus/src/verus_server.cpp
sudo apt-get install pkg-config # for sprout
sudo apt-get install libtinfo5 # for quic
# During the setup, do not be afraid of CERTIFICATE_VERIFY_FAILED errors by quic
src/experiments/setup.py --setup (--all | --schemes " <cc1> <cc2> ... " )
cd coco-beholder && sudo ./install.sh
# matplotlib will give Python backports.functools_lru_cache error. To solve:
sudo pip install arrow==0.12.0
Sekarang Anda siap untuk menguji skema tersebut.
cd pantheon
src/wrappers/vegas.py setup_after_reboot # setup the scheme once after reboot
src/wrappers/vegas.py run_first # who is server: sender or receiver
# receiver
src/wrappers/vegas.py receiver 54321 # start server in one shell
src/wrappers/vegas.py sender 127.0.0.1 54321 # start client in another shell
sudo pkill -9 -f vegas # kill all the started processes
cd coco-beholder
myregex= ' s/((.+)).pid/(1, stdout=None, stderr=None).pid/g '
sed -i " $myregex " variable_delay/src/test/test.py
Jika Anda ingin menguji skema yang tidak ada dalam koleksi Pantheon, Anda dapat menambahkannya secara lokal sebagai berikut:
find /lib/modules/ ` (uname -r) ` /kernel -type f -name * cdg *
# /lib/modules/4.19.0-6-amd64/kernel/net/ipv4/tcp_cdg.ko
cdg
baru ke file pantheon/src/config.yml
yang menyimpan daftar semua skema dalam koleksi. Warna, nama, dan spidol bisa apa saja karena CoCo-Beholder tidak membacanya. cdg :
name : TCP CDG
color : red
marker : ' x '
cp pantheon/src/wrappers/vegas.py pantheon/src/wrappers/cdg.py
sed -i 's/vegas/cdg/g' pantheon/src/wrappers/cdg.py
Sekarang Anda dapat menguji cdg dengan CoCo-Beholder seperti biasa dengan menentukan aliran cdg di file layout.
CoCo-Beholder dipastikan bekerja dengan Python 2.7, 3.5, 3.6, dan 3.7. Skrip instalasi CoCo-Beholder install.sh
menginstal dependensi pustaka Python 2 secara default. Untuk Python 3, silakan beri komentar pada baris yang sesuai di skrip instalasi.
CoCo-Beholder menggunakan perpustakaan Mininet: API-nya yang memungkinkan untuk membuat host virtual sebagai shell UNIX di namespace jaringan terpisah, untuk membuat tautan pasangan veth antara sepasang host virtual, dan untuk meluncurkan proses di host virtual. CoCo-Beholder tidak menggunakan Pengontrol, Switch, Topologi, TCLink, atau entitas Mininet tingkat tinggi lainnya. Untuk mencegah masalah kompatibilitas di masa mendatang dan untuk mempermudah instalasi CoCo-Beholder, bagian-bagian yang diperlukan dari Mininet 2.3.0d5 disertakan dalam repositori CoCo-Beholder sebagai perpustakaan pihak ketiga sesuai dengan lisensi Mininet.
Evgeniya Khasina melaksanakan program dalam lingkup tesis Master "The CoCo-Beholder: Enabling Comprehensive Evaluation of Congestion Control Algorithms" di Saarland University pada tahun 2019 di bawah pengawasan Profesor Anja Feldmann dan Dr. Corinna Coupette di Departemen Arsitektur Internet Max Planck Institut Informatika.
Untuk pertanyaan apa pun tentang program ini, Anda dapat menulis kepada saya, Evgeniya Khasina, ke alamat email saya.