Version 1 (modified by 11 years ago) (diff) | ,
---|
Hints about using GENI Infrastructure as well as other tools in the GENI system
GPO Wiki
- To find ppl: http://groups.geni.net/syseng/wiki/ContactInfo#CurrentGPOpeople
- New Experiment Tutorial Template: http://groups.geni.net/geni/wiki/GENIEducation/SampleAssignments/Template/ExerciseLayout
ExoGENI
- Support multiple lines of
execute
andinstall
in the rspec file for one node? ------ No It still does not support (as of 07/08/2013) - ExoGENI relies on neuca service to boot up NIC interfaces (or virtual network interfaces on KVM), which takes some time after the (virtual) machine is boot up
- Sometimes when experimenter has its own post-boot scripts defined in Rspec, the neuca service failed to boot up the interfaces and assign IP addresses (defined in Rspec) to them.
- In this case, you need to write your own script to automatically call "/usr/local/bin/neuca-netconf" to boot up and configure the interfaces
- If your functional script relies on running interfaces, you need to write some supportive script to detect that the interfaces are up and running
- an example can be found here: http://www.gpolab.bbn.com/experiment-support/OpenFlowExampleExperiment/software/writeifmap
- ExoGENI uhvmsite: IP begin with 129
- ExoGENI rcivmsite: IP begin with 152
- ExoGENI fiuvmsite: IP begin with 131
- ExoGENI bbnvmsite: IP begin with 192.1
About trace-oml2
- run trace-oml2 using the following command:
sudo trace-oml2 -i eth2 --oml-id eNodeB --oml-domain shufeng-t38-2013-07-03T17-03-28-04-00 --oml-collect tcp:emmy9.casa.umass.edu:3004 or use a configuration file: sudo trace-oml2 -i eth2 --oml-config OpenFlowTutorial.eNodeB.xml The xml file can be something like the following: <omlc id="switch_left" encoding="binary"> <collect url="tcp:emmy9.casa.umass.edu:3004"name="traffic"> <stream mp="ip" interval="1"> <filter field="ip_len" operation="sum" rename="throughput" /> </stream> </collect> </omlc>
- trace-oml2 also supports a filter option "-f" or "--filter" that user can define what kind of packets they are particularly interested.
- http://linux.die.net/man/7/pcap-filter shows how to write a filter
Postgresql
LabWiki uses Postgresql to store experimental data for in the OMF/OML system.
psql -h locahost -U oml -d shufeng-t38-2013-07-03T17-03-28-04-00(your experiment name) -> to log into the database corresponding to your experiment \dt -> show all tables in that database connect shufeng-t38-2013-07-03T17-03-28-04-00 -> connect to another database
All about LabWiki
- To set up the new !Labwiki:
- git clone https://github.com/geni-gimi/GIMI.git
- install iRods from www.irods.org
- create an irods account from GENI portal
- run gimi_init.py from the GIMI.git you cloned in the 1st step
- Server side log files:
OMF Log: /tmp/[experiment-name].log .. OML log: /var/log/oml2-server.log
- Client side log file:
/var/log/omf-resctl.log
- To plot multiple graphs on LabWiki?
Simply define more graphs using
defGraph
. The defProperty('graph', true, "Display graph or not") will control whether or not to display all defined graphs. - For the current LabWiki to work with oml v. 2.10.0 : (as of 07/08/2013)
- Do not use "uint64" (and some other data types) in your definition of trace/iperf/nmetrics
- rename your trace/iperf/nmetrics application using, e.g., :
cp /usr/bin/trace-oml2 /usr/bin/trace
- To write oml configure XML files: http://oml.mytestbed.net/doc/oml/latest/liboml2.conf.5.html
- To write specific SQL queries: http://sequel.rubyforge.org/rdoc/files/doc/querying_rdoc.html
Traffic Control
tc qdisc add dev eth2 root handle 1:0 netem delay 100ms loss 5% tc qdisc add dev eth2 parent 1:0 tbf rate 20mbit buffer 20000 limit 16000
It seems that tc qdisc tbf does not work well (in terms of controlling the throughput of TCP flows) on ovs when ovs switch is connected with a controller.
Instead, we use ovs-vsctl:
ovs-vsctl set Interface eth2 ingress_policing_rate=1000 ovs-vsctl set Interface eth2 ingress_policing_burst=100
The above sets the ingress rate to be in 900kbps-1100kbps.
To set it back to no rate control, use:
ovs-vsctl set Interface eth2 ingress_policing_rate=0
It is a little bit tricky to configure delay/loss on an OpenVZ virtual machine
Step 1: find our qdisc family number by executing "sudo /sbin/tc qdisc", a sample output could be like the following:
[shufeng@center ~]$ sudo /sbin/tc qdisc qdisc htb 270: dev mv6.47 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 qdisc netem 260: dev mv6.47 parent 270:1 limit 1000 qdisc htb 150: dev mv6.41 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 qdisc netem 140: dev mv6.41 parent 150:1 limit 1000 qdisc htb 190: dev mv6.43 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 qdisc netem 180: dev mv6.43 parent 190:1 limit 1000 qdisc htb 230: dev mv6.45 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 qdisc netem 220: dev mv6.45 parent 230:1 limit 1000
Now if the ethernet card you want to change is mv6.43, you can find from following line:
qdisc htb 190: dev mv6.43 root refcnt 2 r2q 10 default 1 direct_packets_stat 0 qdisc netem 180: dev mv6.43 parent 190:1 limit 1000
As a result, you change the delay/loss by executing the following:
sudo /sbin/tc -s qdisc change dev mv6.43 parent 190:1 handle 180: netem limit 1000 delay 100ms loss 5% sudo /sbin/tc -s qdisc change dev mv6.43 parent 190:1 handle 180: netem limit 1000
OpenVSwitch Commands
ovs-vsctl add-br br0 ovs-vsctl add-port br0 eth2 ovs-vsctl set-fail-mode br0 standalone (when loses connection with the controller, the switch acts as a normal switch) ovs-vsctl set-fail-mode br0 secure (when loses connection with the controller, the switch wont forward any packets) ovs-vsctl set bridge br0 datapath_type=netdev (without kernel support, if the vswitch is gonna be used in userspace)
git Commands
git clone [url] git add -A . (add all files and folders in the current directory) git commit -m "commit message" git status (to check the status of your local copy) git fetch origin git merge origin/master git push origin master (upload your local copy to master (global) repository)
OpenFlow Trema
To restart Trema controller as well as the attached switch:
1. kill trema process: kill $(pidof ruby) 2. delete lock file: rm /opt/trema...../tmp/pid/controller.pid (controller is the name of your controller, in the case of Load Balancing, its `Load_Balancer`) 3. unlink the switches from controller: ovs-vsctl del-controller br0 4. start controller: /opt/trema....../trema run controller.rb (controller is the name of your controller, in the case of Load Balancing, its load_balancer.rb) 5. link switches to the controller: ovs-vsctl set-controller br0 tcp:127.0.0.1 (might need to wait for 2 seconds for the switch to connect to the controller, to verify that, print something in the "switch_ready" function so that you can see the output when switch is connected)