---- 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는 모든 크기의 인기 있는 덤벨 토폴로지를 제공하는 인간 친화적인 가상 네트워크 에뮬레이터입니다. 토폴로지의 각 링크에는 개별 속도, 지연 및 대기열 크기가 있을 수 있습니다. 중앙 링크에는 선택적 지터가 있는 가변 지연이 있을 수도 있습니다. 다양한 구성표의 흐름은 지정된 런타임(초) 동안 토폴로지에서 함께 실행될 수 있습니다. 각 흐름에 대해 해당 방향과 런타임 시작 시간을 선택할 수 있습니다.
각 흐름에는 토폴로지의 왼쪽 절반에 호스트가 있고 오른쪽 절반에 호스트가 있으며 호스트는 하나의 호스트가 송신자이고 다른 하나가 수신자가 되는 방식의 트래픽을 교환합니다. 토폴로지의 왼쪽 절반에는 모든 호스트를 연결하는 왼쪽 라우터가 있고 오른쪽 절반에는 모든 호스트를 연결하는 오른쪽 라우터가 있습니다. 모든 흐름은 두 라우터 간의 공통 중앙 링크를 공유합니다.
테스트
분석
플롯 및 통계 생성
설치
구성표 문제 해결
새 구성표 추가
파이썬 지원
타사 라이브러리
원작자
연락하다
이 명령은 테스트할 구성표가 포함된 컬렉션에 대한 경로를 지정하고 중앙 링크의 속도가 120Mbps이고 가변 지연(기본 지연 20ms, 델타 500ms, 단계 10ms, 지터 5)을 사용하여 30초 동안 테스트를 실행합니다. ms):
./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
인수를 참조하세요. 기본적으로 두 대기열 모두 1000개의 패킷으로 구성됩니다.
중앙 링크의 가변 지연은 기본 지연, 델타, 단계 및 지터를 건너뛸 수 있는 지터의 네 가지 위치 인수로 정의됩니다. 각 델타 시간, 지연은 의사 난수 생성기에 따라 단계적으로 증가하거나 감소합니다. 해당 생성기의 시드는 -s
인수로 지정될 수 있거나 현재 UNIX 시간이 할당됩니다. 중앙 링크에서 일정한 지연을 가지려면 델타 >= 런타임 -t
선택하십시오.
선택한 출력 디렉터리에 생성기 시드를 포함하여 테스트의 모든 매개변수가 포함된 metadata.json
파일이 기록됩니다. 테스트를 완전히 재현하기 위해 나중에 CoCo-Beholder에 파일을 제공할 수 있습니다. 또한 테스트 중에 PCAP 덤프 파일은 tcpdump
사용하여 Dumbbell 토폴로지의 모든 호스트에서 출력 디렉터리에 기록됩니다. 따라서 그림의 예에서는 8개의 PCAP 덤프 파일이 기록되었습니다.
참고 #1: 모든 링크(측면 및 중앙(지터는 계산되지 않음))에 대한 최대 지연은 -m
옵션을 사용하여 지정할 수 있습니다. 중앙 링크에서 구형파 지연을 가지려면 최대 지연을 기본 지연과 단계의 합으로 설정합니다.
참고 #2: 테스트 스크립트는 구성표의 흐름을 시작하기 전에 레이아웃 파일에 있는 각 구성표의 Pantheon 래퍼에서 setup_after_reboot
호출하므로 사용자는 재부팅할 때마다 구성표를 수동으로 설정할 필요가 없습니다 .
분석 스크립트는 기본적으로 입력 폴더와 출력 폴더( dumps
및 graphs/data
라는 두 가지 인수만 허용합니다.
먼저, 스크립트는 입력 폴더의 메타데이터 파일을 출력 폴더로 복사합니다. 그런 다음 스크립트는 각 흐름의 PCAP 덤프 <flow's starting #>-<scheme>-<sender/receiver>.pcap
쌍을 처리하고 흐름의 패킷에 대한 정보를 흐름의 개별 json 데이터 로그 파일로 추출합니다. 예를 들어 2개의 ~12GB 덤프에 대해 하나의 ~300MB 데이터 로그 파일이 생성됩니다.
도면의 예에 대한 분석 스크립트의 부분 출력:
./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'].
선택한 유형에 대해 3개의 선 그림과 1개의 산점도가 생성됩니다.
예를 들어, 위 그림에서 설정에 대한 흐름별 패킷별 단방향 지연 플롯을 볼 수 있습니다.
평균 플롯은 집계 시간 간격(기본적으로 -i
인수 또는 0.5초와 함께 제공되는 양의 부동 소수점 숫자)별로 평균을 냅니다.
평균 Jain의 지수 도표에는 항상 해당 평균 처리량 도표에 있는 곡선에 대해 계산되는 하나의 곡선이 포함됩니다.
인수 -c
및 -j
사용하면 플롯의 곡선 색상을 유연하게 변경할 수 있습니다.
선택한 유형에 대해 통계 파일이 생성됩니다. 선택한 집계 간격에 종속되지 않으며 다음을 포함합니다.
곡선의 전체 평균 단방향 지연과 패킷당 전체 평균 단방향 지연은 서로 다른 방식으로 계산된 동일한 값입니다.
설치 과정은 다음과 같습니다.
혼잡 제어 체계의 Pantheon 컬렉션을 설치하고 필요한 경우 컬렉션에 로컬로 더 많은 체계를 추가합니다.
설치 스크립트를 사용하여 CoCo-Beholder 에뮬레이터를 설치합니다.
완료. CoCo-Beholder를 사용하여 컬렉션의 구성표를 테스트합니다.
CoCo-Beholder 설치 자체는 간단하며 설치 스크립트 install.sh
는 매우 쉽고 짧습니다. 그러나 Pantheon 구성표 모음을 설치하면 종종 많은 문제가 발생합니다. 게다가 일부 Linux 배포판에는 버그가 있습니다. 따라서 Ubuntu 16.04, Ubuntu 18.04 및 Debian 10 설치에 대한 자세한 지침을 참조하세요.
아래 지침은 Ubuntu 16.04.6-desktop-amd64(2019년 11월)를 새로 설치한 VM에서 테스트되었습니다.
일반적인 참고 사항: bbr(TCP BBRv1.0) 구성표가 필요한 경우 Linux 커널 >=4.9를 사용해야 합니다.
16.04 LTS(16.04.5 이상)의 최신 릴리스에는 Linux 커널 4.15가 함께 제공됩니다. CoCo-Beholder는 Ubuntu 커널 4.15에서 손상된 tc qdisc NetEm 지연 지터를 사용합니다. 해결책:
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 메뉴를 볼 수 있습니다.
재부팅하고 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
이제 구성표를 테스트할 준비가 되었습니다.
아래 지침은 Ubuntu 18.04.3-desktop-amd64(2019년 11월)를 새로 설치한 VM에서 테스트되었습니다.
일반적인 참고 사항: bbr(TCP BBRv1.0) 구성표가 필요한 경우 Linux 커널 >=4.9를 사용해야 합니다.
우분투 커널 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
이제 구성표를 테스트할 준비가 되었습니다.
아래 지침은 Debian 10.1.0-amd64-netinst(2019년 11월)를 새로 설치한 VM에서 테스트되었습니다.
일반적인 참고 사항: bbr(TCP BBRv1.0) 구성표가 필요한 경우 Linux 커널 >=4.9를 사용해야 합니다.
우분투 커널 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> ... " )
~/.bashrc
파일에 내보내기 export PATH=/usr/sbin:$PATH
문자열을 추가하고 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
pantheon/src/config.yml
파일에 새 cdg
항목을 추가합니다. 색상, 이름, 마커는 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 라이브러리를 활용합니다. 별도의 네트워크 네임스페이스에서 가상 호스트를 UNIX 쉘로 생성하고, 가상 호스트 쌍 사이에 veth 쌍 링크를 생성하고, 가상 호스트에서 프로세스를 시작할 수 있는 API입니다. CoCo-Beholder는 컨트롤러, 스위치, 토폴로지, TCLink 또는 Mininet의 기타 상위 레벨 엔터티를 사용하지 않습니다. 향후 호환성 문제를 방지하고 CoCo-Beholder 설치를 더 쉽게 만들기 위해 Mininet 2.3.0d5의 필요한 부분이 Mininet 라이센스에 따라 타사 라이브러리로 CoCo-Beholder 저장소에 포함되어 있습니다.
Evgeniya Khasina는 2019년 자를란트 대학의 석사 논문 "The CoCo-Beholder: Enabling Comprehensive Evaluation of Congestion Control Algorithms" 의 범위에서 막스 플랑크 인터넷 아키텍처학과의 Anja Feldmann 교수 와 Corinna Coupette 박사 의 지도 하에 프로그램을 구현했습니다. 정보학 연구소.
프로그램에 대한 질문이 있으시면 Evgeniya Khasina에게 이메일 주소로 편지를 보내실 수 있습니다.