How to emulate dumbbell topology network locally ?

197 views
Skip to first unread message

人ー

unread,
Aug 26, 2020, 2:59:16 PM8/26/20
to Pantheon
Hi there

I'm Japanese university student.
 Sorry for my bad English.

I want to emulate dumbbell topology network  like a figure below, using pantheon locally.
And run different congestion control schemes on each flow. 

Sincerely,
Hitori

dumbbell_topology.png

Francis Y. Yan

unread,
Aug 26, 2020, 3:05:57 PM8/26/20
to 人ー, Pantheon
Hello Hitori,

Thanks for reaching out! Our Google group has a post that may answer your question: https://groups.google.com/g/pantheon-stanford/c/aK616b_MH3o/m/w8rqd1jaFAAJ

Please check it out and let me know if anything is not clear.

Best,
Francis

--
You received this message because you are subscribed to the Google Groups "Pantheon" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pantheon-stanf...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pantheon-stanford/ac0da573-eb61-432d-98da-a5e95a2ce6f8n%40googlegroups.com.

人ー

unread,
Aug 27, 2020, 12:58:29 AM8/27/20
to Pantheon
Hi Francis


Mr.Keith answered in the Q&A that
"- First, four server processes (rc1, rc2, rc3, rc4).

- Then run whatever sequence of mahimahi emulators you like (mm-delay, mm-loss, mm-onoff, mm-link). Each of these will create a container (a network namespace) that is connected to the outer container via an emulated network effect (delay, i.i.d. per-packet loss, intermittent/bursty loss, and a constrained bottleneck with adjustable queue discipline and parameters and a given service schedule in each direction).

- Then, inside the resulting container, run the four clients (sender1, sender2, sender3, sender4)."

However,  I don't know detailed procedure(command , program ?) to emulate dumbbell topology network.
So, Please tell me  detailed procedure to emulate dumbbell topology network.

Best,
Hitori 
2020年8月27日木曜日 4:05:57 UTC+9 Francis Y. Yan:

Francis Y. Yan

unread,
Aug 27, 2020, 9:12:52 PM8/27/20
to 人ー, Pantheon
Hi Hitori,

If you'd like to run multiple senders and receivers using the same congestion-control algorithm, then you can simply run ./test.py with -f. For instance, "./test.py local -f 2 --schemes cubic --data-dir dumbbell" would be testing two pairs of senders and two receivers running Cubic and sharing the same Mahimahi link as in the dumbbell's bottleneck.

However, it's not possible to run different schemes with the "-f" option on Pantheon. In this case, you would have to follow Keith's instructions:
1. Run your receiver 1 and receiver 2.
2. Start a Mahimahi link you want (e.g., mm-delay 50 mm-link 12mbps.trace 12mbps.trace)
3. Run your sender 1 and sender 2 inside the Mahimahi shell (same shell as step 2).

Best,
Francis


人ー

unread,
Aug 28, 2020, 1:27:03 PM8/28/20
to Pantheon
Hi Francis,

 I appreciate your kind response.

I understood the way to  run multiple senders and receivers using the same congestion-control algorithm.  

However, I still don't understand  the method to run different schemes.
So, Please tell me specific procedure to 1.run receiver, 2.start Mahimahi link and  3.run server on dumbbell topology.

Best,
Hitori

2020年8月28日金曜日 10:12:52 UTC+9 Francis Y. Yan:

Francis Y. Yan

unread,
Aug 28, 2020, 5:27:15 PM8/28/20
to 人ー, Pantheon
Hi Hitori,

Let's say you want to test the scenario of Cubic and BBR sharing the same bottleneck link (as in the dumbbell).

1. Go to pantheon/src/wrappers and run "./cubic.py receiver 10000" and in another terminal, run "./bbr.py receiver 10001".
2. Open another terminal and start the bottleneck link in Mahimahi however you want, e.g., by running "mm-delay 50 mm-link <(echo 1) <(echo 1)". For more information about Mahimahi and its usage, check out http://mahimahi.mit.edu/ and its manual page ("man mahimahii", "man mm-delay", "man mm-link"). You will need more options such as "--uplink-log" and "--downlink-log" to analyze their performance, but the usage of Mahimahi is out of the example's scope.
3. In the same terminal of step 2, you will be inside Mahimahi containers. Then start your first sender with "./cubic.py sender $MAHIMAHI_BASE 10000 &" as a background process, and "./bbr.py sender $MAHIMAHI_BASE 10001 &" as another background process. Now they will be connected to the receivers outside of Mahimahi containers and thus sharing the same Mahimahi emulated link. You can also write your own program to start the senders as subprocesses. 

Best,
Francis

人ー

unread,
Aug 31, 2020, 1:01:14 PM8/31/20
to Pantheon
Hi Francis,

Thank you for your explaination.
I was able to run  multiple senders and receivers using the difference congestion-control algorithm. 

And so I have two questions for you.
1. Which file are the results stored ?

2.if  I want to emulate 10 or more senders in dumbbell topology, I need to open many terminals?  Is there any method to run 10 or more senders in dumbbell topology?

Best,
Hitori


2020年8月29日土曜日 6:27:15 UTC+9 Francis Y. Yan:

Francis Y. Yan

unread,
Sep 8, 2020, 1:48:38 AM9/8/20
to 人ー, Pantheon
Hi Hitori,

As I mentioned in the last email, you will need "--uplink-log" and "--downlink-log" to analyze their performance and then run commands such as "mm-throughput-graph" and "mm-delay-graph" for plotting. Although the usage of Mahimahi is out of Pantheon's scope, I'd like to point out that if you spawn a single mm-link, then you will only be able to analyze the aggregated performance of the schemes that run inside the Mahimahi link.

To evaluate the individual performance of multiple schemes sharing the same link, Pantheon creates Pantheon-tunnel, which is the underlying tool used in test.py when running multiple flows of the same scheme. However, as I said earlier, the missing feature of Pantheon is testing different schemes sharing the same bottleneck link, so you would have to take a look at test.py and see if there is an easy way to adapt the script for your own purposes.

Regarding your second question, the commands in terminals serve only as an example. You may choose your own way to start and manage these processes, e.g., using scripts such as test.py. Hope it helps!

Best,
Francis

人ー

unread,
Sep 13, 2020, 11:52:57 AM9/13/20
to Pantheon
Hi Francis,

I'll try to emulate dumbbell topology by using scripts. Therefore, which code creates Pantheon-tunnel in test.py ?
How do I change the code to emulate dumbbell topology in difference schemes ?

Best,
Hitori

2020年9月8日火曜日 14:48:38 UTC+9 Francis Y. Yan:

Francis Y. Yan

unread,
Sep 14, 2020, 10:07:42 PM9/14/20
to 人ー, Pantheon
Hi Hitori,

Pantheon-tunnel is created by running "mm-tunnelserver" and "mm-tunnelclient", in functions run_tunnel_server() and run_tunnel_client() respectively. Each pair of "mm-tunnelserver" and "mm-tunnelclient" will create a single tunnel to test and analyze one congestion-control scheme. In order to test and analyze multiple schemes (or multiple flows of the same scheme), we instantiate multiple Pantheon-tunnels and manage these tunnels using so-called "tunnel managers", as in the function run_tunnel_managers().

Other helpful functions can be run_first_side() and run_second_side(), which either runs sender first and then receiver, or receiver first and then sender. Please follow these functions to get a sense of what minimal changes are needed to make for your purposes.

Best,
Francis

人ー

unread,
Sep 23, 2020, 12:25:37 PM9/23/20
to Pantheon
Hi Francis,

Thank you for explaining clearly.
I tried to  emulate  dumbbell topology  through trial and error. but it is difficult for me.

So, please tell me specific changes of test.py to emulate dumbbell topology.

Best,
Hitori
2020年9月15日火曜日 11:07:42 UTC+9 Francis Y. Yan:

人ー

unread,
Oct 8, 2020, 7:14:20 AM10/8/20
to Pantheon
Hi  Francis,

I could emulate  the dumbbell topology.
Thank you for your advice.

 I have additional questions.
How to change RTT and loss rate of each sender in test.py.

Best,
Hitori


2020年9月24日木曜日 1:25:37 UTC+9 ー 人:

Francis Y. Yan

unread,
Oct 9, 2020, 8:25:43 PM10/9/20
to 人ー, Pantheon
Hi Hitori,

If you are able to run different schemes in test.py, each in a separate Pantheon-tunnel, then you would only need to change the Mahimahi link created in each Pantheon-tunnel to emulate a different RTT or loss rate.

For instance, "mm-delay 50 mm-link ..." adds a 100ms RTT outside the mm-link container, and "mm-link ... mm-loss uplink 0.1" adds a 10% loss inside the mm-link container. It is simply a matter of combination of Mahimahi containers, and you could refer to the manual of Mahimahi ("man mahimahi") for more details.

In the current test.py, the above combinations can be achieved by handy options such as --prepend-mm-cmds "mm-delay 50"(outside mm-link) or --append-mm-cmds "mm-loss uplink 0.1" (inside mm-link), although these prepended/appended containers will apply to all schemes by default. Therefore, when testing different RTTs/loss rates for different schemes, you would want to make some changes to accommodate for your situation.


Hope it helps!

Best,
Francis

人ー

unread,
Oct 15, 2020, 12:02:41 PM10/15/20
to Pantheon
Hi Francis,

I have any question.

・What mean of "separate Pantheon-tunnel"?  if I run "test.py" like "python test.py local -f 2 --schemes cubic ", In this case, is pantheon-tunnel separated ?

Best,
Hitori

2020年10月10日土曜日 9:25:43 UTC+9 franc...@gmail.com:

Francis Y. Yan

unread,
Oct 15, 2020, 12:06:37 PM10/15/20
to 人ー, Pantheon
Yes, two Cubic flows will be running in two different Pantheon-tunnels, so that each tunnel can report the performance of the flow running inside it. Both flows share the same bottleneck link (Mahimahi link in your example) though.

人ー

unread,
Oct 21, 2020, 9:40:42 AM10/21/20
to Pantheon
Hi Francis ,

I have any question.
・When emulate dumbbell topology like a figure below by "python test.py local -f 2 --schemes cubic", How change RTT and loss rate of each links?  For example link between s1 and R1 set RTT 5 [ms] and loss rate 0 [%] , link between R1 and R2 set RTT 50 [ms] and loss rate 10 [%], link between R2 and r1 set RTT 5 [ms] and loss rate 0 [%]. 

best, 
Hitori


2020年10月16日金曜日 1:06:37 UTC+9 franc...@gmail.com:
Message has been deleted

人ー

unread,
Oct 21, 2020, 9:49:16 AM10/21/20
to Pantheon
だんべる.png

2020年10月21日水曜日 22:40:42 UTC+9 ー 人:

人ー

unread,
Dec 13, 2020, 10:18:29 AM12/13/20
to Pantheon
Hi Francis ,

I want to build physical topology like the figure above and send data  from different IP addresses.

However, when I run test.py  with "python test.py local  -s cubic  --data-dir data -f 2", tow flows  send from same IP address.

So, Is it possible to send data from  different IP addresses on Pantheon ?

Regards,
Hitori,
2020年10月21日水曜日 22:49:16 UTC+9 ー 人:

Francis Y. Yan

unread,
Dec 28, 2020, 2:10:44 PM12/28/20
to 人ー, Pantheon
Hi Hitori,

Sorry for the delay. Pantheon doesn't natively support multiple IPs; if multiple IP addresses are really required in your local emulation test, you might have to create virtual interfaces/IPs by yourself and let iperf bind to them.

Best,
Francis

人ー

unread,
Jan 1, 2021, 10:57:40 AM1/1/21
to Pantheon
Hi Francis,

Don’t worry about it. 
I could emulate topology by using Mininet.
Thank you for your polite response.

Best,
Hitori

2020年12月29日火曜日 4:10:44 UTC+9 franc...@gmail.com:
Reply all
Reply to author
Forward
0 new messages