---- 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 ميجابت في الثانية والتأخير المتغير (التأخير الأساسي 20 مللي ثانية، دلتا 500 مللي ثانية، الخطوة 10 مللي ثانية، الارتعاش 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
في رسالة المساعدة الخاصة بالبرنامج النصي. بشكل افتراضي، تتكون كلا قائمتي الانتظار من 1000 حزمة.
يتم تعريف التأخير المتغير عند الارتباط المركزي من خلال أربع وسيطات موضعية: التأخير الأساسي، دلتا، الخطوة، والارتعاش، حيث يمكن تخطي الارتعاش. في كل مرة دلتا، يتم زيادة التأخير أو تقليله خطوة بخطوة اعتمادًا على المولد العشوائي الزائف، الذي يمكن تحديد بذره باستخدام الوسيطة -s
أو تعيين وقت UNIX الحالي. للحصول على تأخير مستمر في الارتباط المركزي، اختر delta >= the runtime -t
.
في دليل الإخراج المختار، تتم كتابة ملف metadata.json
الذي يحتوي على جميع معلمات الاختبار، بما في ذلك بذرة المولد. قد يتم إرسال الملف إلى CoCo-Beholder في المستقبل لإعادة إنتاج الاختبار بالكامل. أيضًا، أثناء الاختبار، يتم تسجيل ملفات تفريغ PCAP على كافة الأجهزة المضيفة لطوبولوجيا الدمبل في دليل الإخراج باستخدام tcpdump
. لذلك بالنسبة للمثال الموجود في الرسم، تم تسجيل ثمانية ملفات تفريغ PCAP.
ملاحظة رقم 1: يمكن تحديد الحد الأقصى للتأخير لكل رابط - جانبي ومركزي (لا يتم احتساب الارتعاش) - باستخدام الخيار -m
. للحصول على تأخير موجة مربعة عند الوصلة المركزية، قم بتعيين الحد الأقصى للتأخير إلى مجموع التأخير الأساسي والخطوة.
ملاحظة رقم 2: يستدعي البرنامج النصي للاختبار setup_after_reboot
على غلاف Pantheon لكل نظام في ملف التخطيط قبل تشغيل أي تدفقات للأنظمة، لذلك لا يتعين على المستخدم إعداد المخططات يدويًا بعد كل عملية إعادة تشغيل.
يقبل البرنامج النصي للتحليل وسيطتين فقط: مجلد الإدخال ومجلد الإخراج - dumps
والرسوم graphs/data
بشكل افتراضي.
أولاً، يقوم البرنامج النصي ببساطة بنسخ ملف البيانات التعريفية من مجلد الإدخال إلى مجلد الإخراج. بعد ذلك، يقوم البرنامج النصي بمعالجة زوج من عمليات تفريغ PCAP <flow's starting #>-<scheme>-<sender/receiver>.pcap
لكل تدفق ويستخرج المعلومات الموجودة على حزم التدفق في ملف سجل بيانات json الفردي للتدفق. على سبيل المثال، بالنسبة لملفي تفريغ بسعة 12 جيجابايت تقريبًا، يتم إنتاج ملف سجل بيانات واحد بسعة 300 ميجابايت تقريبًا.
الإخراج الجزئي لنص التحليل للمثال في الرسم:
./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 مرة واحدة فقط، ومن ثم قد يتم تشغيل البرنامج النصي للتخطيط عدة مرات حسب الحاجة عبر ملفات سجل البيانات لإنتاج مخططات مختلفة بسرعة.
يقوم برنامج Plotting 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 غالبًا ما يسبب الكثير من المشكلات. بالإضافة إلى ذلك، تحتوي بعض توزيعات Linux على أخطاء. ومن ثم، يرجى الاطلاع على التعليمات التفصيلية للتثبيت على Ubuntu 16.04 وUbuntu 18.04 وDebian 10.
تم اختبار الإرشادات الواردة أدناه على الجهاز الافتراضي من خلال تثبيت جديد لـ Ubuntu 16.04.6-desktop-amd64 (نوفمبر 2019).
كملاحظة عامة: إذا كنت بحاجة إلى نظام bbr (TCP BBRv1.0) فتأكد من استخدام Linux kernel >=4.9.
الإصدارات الجديدة من 16.04 LTS (16.04.5 والإصدارات الأحدث) تأتي مع Linux kernel 4.15. يستخدم CoCo-Beholder ارتعاش التأخير tc qdisc NetEm الذي تم كسره على Ubuntu kernel 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 بعد إعادة التشغيل.
أعد التشغيل وفي قائمة 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).
كملاحظة عامة: إذا كنت بحاجة إلى نظام bbr (TCP BBRv1.0) فتأكد من استخدام Linux kernel >=4.9.
يحتوي Ubuntu kernel 4.15 على الخطأ. مع Ubuntu >=18.04.3، تحصل على kernel >=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).
كملاحظة عامة: إذا كنت بحاجة إلى نظام bbr (TCP BBRv1.0) فتأكد من استخدام Linux kernel >=4.9.
يحتوي Ubuntu kernel 4.15 على الخطأ. ليس من الواضح ما إذا كان Debian kernel 4.15 يعاني من هذه المشكلة. على أي حال، مع Debian >=10.1.0، تحصل على kernel >=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 في مساحة اسم شبكة منفصلة، لإنشاء رابط زوج veth بين زوج من المضيفين الظاهريين، ولبدء العمليات في مضيف افتراضي. لا يستخدم CoCo-Beholder وحدة التحكم أو Switch أو Topology أو TCLink أو غيرها من الكيانات ذات المستوى الأعلى في Mininet. لمنع أي مشكلات توافق مستقبلية ولجعل تثبيت CoCo-Beholder أسهل، تم تضمين الأجزاء المطلوبة من Mininet 2.3.0d5 في مستودع CoCo-Beholder كمكتبة تابعة لجهة خارجية وفقًا لترخيص Mininet.
نفذت إيفغينيا خاسينا البرنامج في نطاق رسالة الماجستير "CoCo-Beholder: تمكين التقييم الشامل لخوارزميات التحكم في الازدحام" في جامعة سارلاند عام 2019 تحت إشراف البروفيسور أنجا فيلدمان والدكتورة كورينا كوبيت في قسم هندسة الإنترنت في ماكس بلانك معهد المعلوماتية.
إذا كانت لديك أي أسئلة حول البرنامج، يمكنك مراسلتي، إيفغينيا خاسينا، على عنوان بريدي الإلكتروني.