---- 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 เป็นโปรแกรมจำลองเครือข่ายเสมือนที่เป็นมิตรต่อมนุษย์ โดยมีโทโพโลยีดัมเบลล์ยอดนิยมทุกขนาด แต่ละลิงก์ของโทโพโลยีอาจมีอัตรา ความล่าช้า และขนาดคิวแต่ละรายการ ลิงก์กลางอาจมีการหน่วงเวลาแบบแปรผันพร้อมตัวเลือกกระวนกระวายใจ โฟลว์ของโครงร่างที่แตกต่างกันอาจทำงานพร้อมกันในโทโพโลยีสำหรับรันไทม์ที่ระบุเป็นวินาที สำหรับแต่ละโฟลว์ คุณสามารถเลือกทิศทางและวินาทีเริ่มต้นของรันไทม์ได้
แต่ละโฟลว์มีโฮสต์ในครึ่งซ้ายและโฮสต์ในครึ่งขวาของโทโพโลยี และโฮสต์จะแลกเปลี่ยนการรับส่งข้อมูลของโครงร่างโดยโฮสต์หนึ่งเป็นผู้ส่งและอีกโฮสต์หนึ่งเป็นผู้รับ มีเราเตอร์ด้านซ้ายที่เชื่อมต่อโฮสต์ทั้งหมดในครึ่งซ้ายและเราเตอร์ด้านขวาที่เชื่อมต่อโฮสต์ทั้งหมดในครึ่งขวาของโทโพโลยี โฟลว์ทั้งหมดแชร์ลิงก์กลางทั่วไประหว่างเราเตอร์ทั้งสองตัว
การทดสอบ
การวิเคราะห์
แปลงและการสร้างสถิติ
การติดตั้ง
การแก้ไขปัญหาโครงการ
การเพิ่มโครงการใหม่
การสนับสนุนหลาม
ห้องสมุดบุคคลที่สาม
นักเขียน
ติดต่อ
คำสั่งนี้ระบุเส้นทางไปยังคอลเลกชันที่มีรูปแบบที่จะทดสอบและรันการทดสอบเป็นเวลา 30 วินาที โดยลิงก์กลางมีอัตรา 120 Mbps และความล่าช้าของตัวแปร (ความล่าช้าพื้นฐาน 20 ms, เดลต้า 500 ms, ขั้นตอน 10 ms, กระวนกระวายใจ 5 มิลลิวินาที):
./run.py -p ~ /pantheon 20ms 0.5s 10ms 5ms -t 30 -r 120 -s 12345
หากนี่เป็นการเรียกใช้สคริปต์ครั้งแรก ไฟล์โครงร่างเริ่มต้น layout.yml
ดังที่แสดงด้านล่างจะถูกสร้างขึ้นและใช้งาน การตั้งค่าการทดสอบผลลัพธ์จะแสดงอยู่ในภาพวาดของโทโพโลยีดัมเบลที่ด้านบนของหน้านี้ ไฟล์เลย์เอาต์สามารถแก้ไขได้เพื่อให้ได้การตั้งค่าการทดสอบที่ซับซ้อนมากขึ้น โดยมีโฟลว์ที่เป็นของโครงร่างต่างๆ มากขึ้น และมีการตั้งค่าเครือข่ายที่หลากหลาย
# 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
อัตรา ความล่าช้า และขนาดคิวจะถูกติดตั้ง ที่อินเทอร์เฟซทั้งสอง ที่ส่วนท้ายของแต่ละลิงก์ในทอพอโลยีเสมอโดยใช้โปรแกรมจำลองลิงก์ tc
qdisc NetEm โดยเฉพาะอย่างยิ่ง นี่หมายความว่า RTT ของลิงก์มีความล่าช้าเป็นสองเท่า (ทางเดียว) เฉพาะลิงก์กลางเท่านั้นที่สามารถมีขนาดคิวที่แตกต่างกันสองขนาดของอินเทอร์เฟซที่ส่วนท้าย - ดูอาร์กิวเมนต์ -q1
, -q2
, -q
ในข้อความช่วยเหลือของสคริปต์ ตามค่าเริ่มต้น คิวทั้งสองจะมี 1,000 แพ็กเก็ต
การหน่วงเวลาของตัวแปรที่ลิงก์กลางถูกกำหนดโดยอาร์กิวเมนต์สี่ตำแหน่ง: การหน่วงเวลาฐาน เดลต้า ขั้นตอน และความกระวนกระวายใจ โดยที่ความกระวนกระวายใจสามารถข้ามได้ เวลาเดลต้าแต่ละครั้ง การหน่วงเวลาจะเพิ่มขึ้นหรือลดลงทีละขั้นตอน ขึ้นอยู่กับตัวสร้างแบบสุ่มเทียม ซึ่งสามารถระบุค่าเริ่มต้นด้วยอาร์กิวเมนต์ -s
หรือกำหนดเวลา UNIX ปัจจุบันได้ หากต้องการให้มีการหน่วงเวลาคงที่ที่ลิงก์กลาง ให้เลือกเดลต้า >= รันไทม์ -t
ในไดเร็กทอรีเอาต์พุตที่เลือก ไฟล์ metadata.json
จะถูกเขียนโดยมีพารามิเตอร์ ทั้งหมด ของการทดสอบ รวมถึงตัวสร้างเริ่มต้นด้วย ไฟล์อาจถูกป้อนให้กับ CoCo-Beholder ในอนาคตเพื่อทำการทดสอบซ้ำอย่างสมบูรณ์ นอกจากนี้ ในระหว่างการทดสอบ ไฟล์ดัมพ์ PCAP จะถูกบันทึกที่โฮสต์ทั้งหมดของโทโพโลยีดัมเบลลงในไดเร็กทอรีเอาต์พุตโดยใช้ tcpdump
สำหรับตัวอย่างในรูปวาด ไฟล์ดัมพ์ PCAP จำนวน 8 ไฟล์ถูกบันทึกไว้
หมายเหตุ #1: สามารถระบุความล่าช้าสูงสุดสำหรับทุกลิงก์ – ด้านข้างและส่วนกลาง (ไม่นับการกระวนกระวายใจ) ด้วยตัวเลือก -m
หากต้องการให้มีการดีเลย์คลื่นสี่เหลี่ยมที่ลิงค์กลาง ให้ตั้งค่าการหน่วงเวลาสูงสุดเป็นผลรวมของดีเลย์ฐานและสเต็ป
หมายเหตุ #2: สคริปต์การทดสอบเรียก setup_after_reboot
บน Pantheon wrapper ของแต่ละสคีมในไฟล์เลย์เอาต์ก่อนที่จะเปิดโฟลว์ของสคีม ดังนั้นผู้ใช้จึง ไม่ จำเป็นต้องตั้งค่าสคีมด้วยตนเองหลังจากรีบูตทุกครั้ง
สคริปต์การวิเคราะห์ยอมรับเพียงสองอาร์กิวเมนต์เท่านั้น: โฟลเดอร์อินพุตและโฟลเดอร์เอาต์พุต - dumps
และ graphs/data
ตามค่าเริ่มต้น
ขั้นแรก สคริปต์จะคัดลอกไฟล์ข้อมูลเมตาจากโฟลเดอร์อินพุตไปยังโฟลเดอร์เอาต์พุต จากนั้น สคริปต์จะประมวลผลคู่ของ PCAP dumps <flow's starting #>-<scheme>-<sender/receiver>.pcap
ของแต่ละโฟลว์ และแยกข้อมูลเกี่ยวกับแพ็กเก็ตของโฟลว์ลงในไฟล์บันทึกข้อมูล json แต่ละรายการของโฟลว์ เช่น สำหรับดัมพ์ ~12 GB สองไฟล์ จะมีการสร้างไฟล์บันทึกข้อมูลหนึ่งไฟล์ ~300 MB
ผลลัพธ์บางส่วนของสคริปต์การวิเคราะห์สำหรับตัวอย่างในรูปวาด:
./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...
สำหรับแปลงและการสร้างสถิติที่กำลังจะมีขึ้น ไม่จำเป็นต้องทิ้ง PCAP อีกต่อไป การวิเคราะห์ดัมพ์ PCAP จะดำเนินการเพียงครั้งเดียว และจากนั้นสคริปต์การลงจุดอาจถูกเรียกใช้หลายครั้งตามต้องการบนไฟล์บันทึกข้อมูลเพื่อสร้างการลงจุดต่างๆ อย่างรวดเร็ว
สคริปต์การพล็อต plot.py
อ่านไฟล์บันทึกข้อมูลของโฟลว์และสร้างพล็อตและสถิติลงในโฟลเดอร์เอาต์พุต ( graphs
ตามค่าเริ่มต้น) สามารถสร้างแปลงและสถิติประเภทต่างๆ ได้:
-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'].
สำหรับประเภทที่เลือก จะมีการสร้างแผนภูมิเส้นสามเส้นและแผนภูมิกระจายหนึ่งรายการ:
เช่น ด้านบน เราสามารถเห็นพล็อตการหน่วงเวลาทางเดียวต่อโฟลว์ต่อแพ็กเก็ตสำหรับการตั้งค่าในรูปวาด
แปลงเฉลี่ยจะถูกเฉลี่ยต่อช่วงเวลาการรวม: จำนวนทศนิยมบวกใด ๆ ที่มาพร้อมกับอาร์กิวเมนต์ -i
หรือ 0.5 วินาทีโดยค่าเริ่มต้น
พล็อตดัชนีของ Jain โดยเฉลี่ยจะมีหนึ่งเส้นโค้งที่คำนวณบนเส้นโค้งที่มีอยู่ในแผนปริมาณงานเฉลี่ยที่สอดคล้องกันเสมอ
อาร์กิวเมนต์ -c
และ -j
อนุญาตให้เปลี่ยนสีของเส้นโค้งในแปลงได้อย่างยืดหยุ่น
สำหรับประเภทที่เลือก ไฟล์สถิติจะถูกสร้างขึ้น ไม่ได้ ขึ้นอยู่กับช่วงการรวมที่เลือกและมี:
ความล่าช้าทางเดียวโดยเฉลี่ยโดยรวมและความล่าช้าทางเดียวโดยเฉลี่ยต่อแพ็กเก็ตโดยรวมของเส้นโค้งเป็นค่าเดียวกันที่คำนวณด้วยวิธีที่ต่างกัน
กระบวนการติดตั้งมีดังนี้:
ติดตั้งคอลเลกชัน Pantheon ของแผนการควบคุมความแออัด และเพิ่มรูปแบบเพิ่มเติมให้กับคอลเลกชันภายในเครื่อง หากจำเป็น
ติดตั้งโปรแกรมจำลอง CoCo-Beholder โดยใช้สคริปต์การติดตั้ง
เสร็จแล้ว. ทดสอบโครงร่างในคอลเลกชันโดยใช้ CoCo-Beholder
การติดตั้ง CoCo-Beholder นั้นไม่สำคัญ และสคริปต์การติดตั้ง install.sh
นั้นง่ายและสั้นมาก อย่างไรก็ตาม การติดตั้งชุดคอลเลกชัน Pantheon มักจะทำให้เกิดปัญหามากมาย นอกจากนี้ ลีนุกซ์บางรุ่นก็มีข้อบกพร่องเช่นกัน ดังนั้น โปรดดูคำแนะนำโดยละเอียดสำหรับการติดตั้งบน Ubuntu 16.04, Ubuntu 18.04 และ Debian 10
คำแนะนำด้านล่างได้รับการทดสอบบน VM ด้วยการติดตั้ง Ubuntu 16.04.6-desktop-amd64 ใหม่ (พ.ย. 2019)
ตามหมายเหตุทั่วไป: หากคุณต้องการรูปแบบ bbr (TCP BBRv1.0) ตรวจสอบให้แน่ใจว่าใช้เคอร์เนล Linux >=4.9
16.04 LTS (16.04.5 และสูงกว่า) ที่เพิ่งเปิดตัวใหม่มาพร้อมกับ Linux kernel 4.15 CoCo-Beholder ใช้ tc qdisc NetEm การหน่วงเวลาการกระวนกระวายใจ ที่ใช้งานไม่ได้บนเคอร์เนล Ubuntu 4.15 วิธีแก้ปัญหา:
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
ในไฟล์ /etc/default/grub
ให้ใส่เครื่องหมายความคิดเห็นในบรรทัด GRUB_HIDDEN_TIMEOUT=0
และรันคำสั่ง sudo update-grub
สิ่งนี้จะช่วยให้คุณเห็นเมนูด้วงหลังจากรีบูต
รีบูทและในเมนู Grub เลือก Advanced options for Ubuntu
และที่นั่น Ubuntu, with Linux 4.13.0-39-generic
ตรวจสอบเคอร์เนลที่รันอยู่ด้วยคำสั่ง uname -ar
ดาวน์โหลดที่เก็บ Pantheon git และโมดูลย่อย git ของโครงร่างที่รวมไว้:
git clone https://github.com/StanfordSNR/pantheon.git && cd pantheon
git submodule update --init --recursive
rm -r src/wrappers/patches
tools/install_deps.sh
) คุณต้องติดตั้งเฉพาะโครงร่างโดยใช้คำสั่งด้านล่าง หากคำสั่งสุดท้ายแสดงข้อผิดพลาด เช่น Command "python setup.py egg_info" failed with error code 1...
ให้ดำเนินการ sudo pip install --upgrade pip
แล้วทำซ้ำคำสั่งที่ล้มเหลว 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
ตอนนี้คุณพร้อมที่จะทดสอบโครงร่างแล้ว
คำแนะนำด้านล่างได้รับการทดสอบบน VM ด้วยการติดตั้ง Ubuntu 18.04.3-desktop-amd64 ใหม่ (พ.ย. 2019)
ตามหมายเหตุทั่วไป: หากคุณต้องการรูปแบบ bbr (TCP BBRv1.0) ตรวจสอบให้แน่ใจว่าใช้เคอร์เนล Linux >=4.9
เคอร์เนล Ubuntu 4.15 มีข้อบกพร่อง ด้วย Ubuntu >=18.04.3 คุณจะได้รับเคอร์เนล >=5.0 ดังนั้นโปรดดำเนินการขั้นตอนต่อไป
ดาวน์โหลดที่เก็บ Pantheon git และโมดูลย่อย git ของโครงร่างที่รวมไว้:
git clone https://github.com/StanfordSNR/pantheon.git && cd pantheon
git submodule update --init --recursive
rm -r src/wrappers/patches
tools/install_deps.sh
) คุณต้องติดตั้งเฉพาะโครงร่างโดยใช้คำสั่งด้านล่าง 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
ตอนนี้คุณพร้อมที่จะทดสอบโครงร่างแล้ว
คำแนะนำด้านล่างได้รับการทดสอบบน VM ด้วยการติดตั้ง Debian 10.1.0-amd64-netinst ใหม่ (พ.ย. 2019)
ตามหมายเหตุทั่วไป: หากคุณต้องการรูปแบบ bbr (TCP BBRv1.0) ตรวจสอบให้แน่ใจว่าใช้เคอร์เนล Linux >=4.9
เคอร์เนล Ubuntu 4.15 มีข้อบกพร่อง ไม่ชัดเจนว่าเคอร์เนล Debian 4.15 มีปัญหานี้หรือไม่ อย่างไรก็ตาม ด้วย Debian >=10.1.0 คุณจะได้เคอร์เนล >=4.19 ดังนั้นโปรดดำเนินการขั้นตอนต่อไป
ดาวน์โหลดที่เก็บ Pantheon git และโมดูลย่อย git ของโครงร่างที่รวมไว้:
git clone https://github.com/StanfordSNR/pantheon.git && cd pantheon
git submodule update --init --recursive
rm -r src/wrappers/patches
tools/install_deps.sh
) คุณต้องติดตั้งเฉพาะโครงร่างเท่านั้น ขั้นแรก ให้ติดตั้งการขึ้นต่อกันของโครงร่าง: 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> ... " )
เพิ่มสตริง export PATH=/usr/sbin:$PATH
ไปยังไฟล์ ~/.bashrc
ของคุณและเรียกใช้คำสั่ง source ~/.bashrc
สิ่งนี้จะเปิดใช้งานยูทิลิตี้ /usr/sbin/sysctl
ซึ่งจำเป็นไม่เพียงแต่ระหว่างการติดตั้ง แต่ยังจำเป็นในภายหลังด้วย
ในการสร้าง Verus คุณต้องดาวน์เกรดไลบรารี alglib ของคุณ ดังนั้นโปรดเพิ่ม deb <URL> stretch main
ใน /etc/apt/sources.list
ของคุณแล้วรัน:
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
ตอนนี้คุณพร้อมที่จะทดสอบโครงร่างแล้ว
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
หากคุณต้องการทดสอบรูปแบบที่ไม่มีอยู่ในคอลเลกชัน Pantheon คุณสามารถเพิ่มได้ภายในเครื่องดังนี้:
find /lib/modules/ ` (uname -r) ` /kernel -type f -name * cdg *
# /lib/modules/4.19.0-6-amd64/kernel/net/ipv4/tcp_cdg.ko
cdg
ใหม่ลงในไฟล์ pantheon/src/config.yml
ที่เก็บรายการโครงร่างทั้งหมดในคอลเลกชัน สี ชื่อ และเครื่องหมายอาจเป็นสีใดก็ได้ เนื่องจาก CoCo-Beholder ไม่ได้อ่าน 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
ตอนนี้คุณสามารถทดสอบ cdg ด้วย CoCo-Beholder ได้ตามปกติโดยระบุโฟลว์ cdg ในไฟล์เลย์เอาต์
CoCo-Beholder มั่นใจได้ว่าจะทำงานร่วมกับ Python 2.7, 3.5, 3.6 และ 3.7 ได้ สคริปต์การติดตั้งของ CoCo-Beholder install.sh
จะติดตั้งการพึ่งพาไลบรารี Python 2 ตามค่าเริ่มต้น สำหรับ Python 3 โปรดใส่เครื่องหมายบรรทัดที่เกี่ยวข้องในสคริปต์การติดตั้ง
CoCo-Beholder ใช้ไลบรารี Mininet: API ที่ช่วยให้สามารถสร้างโฮสต์เสมือนเป็นเชลล์ UNIX ในเนมสเปซเครือข่ายที่แยกจากกัน เพื่อสร้างลิงก์คู่ที่อยู่ระหว่างโฮสต์เสมือนคู่หนึ่ง และเพื่อเปิดกระบวนการที่โฮสต์เสมือน CoCo-Beholder ไม่ได้ใช้คอนโทรลเลอร์, สวิตช์, โทโพโลยี, TCLink หรือเอนทิตีระดับสูงกว่าอื่น ๆ ของ Mininet เพื่อป้องกันปัญหาความเข้ากันได้ในอนาคตและทำให้การติดตั้ง CoCo-Beholder ง่ายขึ้น ส่วนที่จำเป็นของ Mininet 2.3.0d5 จะรวมอยู่ในพื้นที่เก็บข้อมูล CoCo-Beholder เป็นไลบรารีบุคคลที่สามตามใบอนุญาต Mininet
Evgeniya Khasina ดำเนินโครงการนี้ในขอบเขตของวิทยานิพนธ์ระดับปริญญาโท "The CoCo-Beholder: Enabling Comprehensive Evaling of Congestion Control Algorithms" ที่มหาวิทยาลัยซาร์ลันด์ในปี 2019 ภายใต้การดูแลของ ศาสตราจารย์ Anja Feldmann และ Dr. Corinna Coupette ที่แผนกสถาปัตยกรรมอินเทอร์เน็ตของ Max Planck สถาบันสารสนเทศ.
หากมีคำถามเกี่ยวกับโปรแกรม คุณสามารถเขียนถึงฉัน Evgeniya Khasina ทางอีเมลของฉันได้