Changes between Initial Version and Version 1 of Internal/OpenFlow/frisbeeMcast


Ignore:
Timestamp:
Oct 10, 2011, 8:27:55 PM (13 years ago)
Author:
akoshibe
Comment:

Legend:

Unmodified
Added
Removed
Modified
  • Internal/OpenFlow/frisbeeMcast

    v1 v1  
     1= Getting Frisbee traffic over !OpenFlow Enabled Switches =
     2
     3Frisbee is a fast disk imaging process in which a server distributes chunks of disk image to one or more clients in a multicast group. Frisbee is used extensively for imaging nodes, so there is a need for the !OpenFlow deployment here to be able to handle its traffic.
     4
     5This page records one attempt to see if !OpenFlow can be made to handle Frisbee traffic, and if so, measure its performance. Success here means being able to image a node in a reasonable amount of time.
     6
     7== I General Setup steps taken ==
     8A regular !SandBox (SB6) with 2 nodes was used to carry out these steps. The control plane switch for SB6 is an NEC IP8800 (sw-sb-01) shared by this and !SandBoxes 1,2,5,7 and 8. [[BR]]
     9
     10=== 1.1. Network setup - enable !OpenFlow mode on switch ===
     11The SB6 control VLAN was set in !OpenFlow mode (e.g. make it a virtual switch, or "VSI"). The command(s) for doing this differ depending on firmware version, which can be found with the command `show version` in user mode. The VSI was pointed to our [wiki:Internal/OpenFlow/Controllers/BigSwitch BSN controller], kvm-big.
     12 * 11.1.C (old - this is what sw-sb-01 is running)
     13{{{
     14setvsi 12 31,32,48.12 tcp 172.16.0.14:6633 dpid 0x001010213231
     15}}}
     16 * 11.1.Ae (the theoretic steps, not confirmed ^1^)
     17{{{
     18(config)# openflow openflow-id 1 virtual-switch
     19!sw-gp(config-of) controller controller-name kvm-big 1 172.16.0.14 tcp
     20!sw-gp(config-of) dpid 0000001010213231
     21!sw-gp(config-of) openflow-vlan 27
     22!sw-gp(config-of) enable
     23}}}
     24In the first code block, `tcp 172.16.0.14:6633` points the switch to `kvm-big`. Association can be confirmed with the `show switch` command on the controller, in which you should see the VSI's DPID in the list of switches the controller has seen:
     25{{{
     26kvm-big> sh sw
     27Switch DPID             Alias Active Last Connect Time       IP Address    Socket Address       Max Packets Max Tables
     28-----------------------|-----|------|-----------------------|-------------|--------------------|-----------|----------
     29...
     3000:00:00:10:10:21:32:31       True   2011-09-20 21:34:47 EDT 172.16.0.253  /172.16.0.253:64372  256         2                                                                                   
     31...       
     32}}} 
     33Note, the controller lists DPIDs in a form similar to MAC addresses, but with '00:00' tacked in front.
     34=== 1.2. Network setup - Add static flow entry to BSN Controller ===
     35Once the VSI is associated, add a static flow entry to the controller.
     36{{{
     37kvm-big> en
     38kvm-big# config
     39kvm-big(config)# switch 00:00:00:10:10:21:32:31
     40kvm-big(config-switch)# flow-entry floodall
     41kvm-big(config-flow-entry)# ether-type 2048
     42kvm-big(config-flow-entry)# dst-ip 224.0.0.5
     43kvm-big(config-flow-entry)# actions output=flood
     44kvm-big(config-flow-entry)# active True
     45}}}
     46 * ether-type must be specified in decimal. As in this case, if doing a flow based on IP-layer parameters, ether-type must be set to 2048, for IP (hex ether-type 0x800).
     47 * actions are specified in a syntax similar to that used in `dpctl`. It roughly follows the syntax:
     48{{{
     49actions output=[port number|flood|drop]
     50}}}
     51  Multiple output ports may be specified in a comma-separated chain of "output= ", e.g:
     52{{{
     53actions output=2,output=4
     54}}}
     55 * The flow must be enabled with `enable True`, with capitalized T.
     56
     57=== 1.3. Client/server setup ===
     58To avoid the overhead of the `omf` commands, both Frisbee server (frisbeed) and client (frisbee) were run manually. The client must be booted into a pre-boot environment prior to running frisbee. This can be done by rebooting the node after manually adding a link (as root) to /tftpboot/pxelinux.cfg/ on repository1:
     59{{{
     60ln -s omf-5.2.4 0A100102
     61}}}
     62Where omf-5.2.4 is the name of the preboot environment and 0A100102 is the IP address of the node in hex. Once back up, the node should be in a busybox-like environment with `frisbee` as one of the command options.   
     63
     64Once the client is ready to go, you can start the processes with the following commands:
     65 * Server: on repository1:
     66{{{
     67/usr/sbin/frisbeed -i 10.16.0.42 -m 224.0.0.5 -p 7060 -W 50000000 /var/lib/omf-images-5.2/ubuntu10.10.ndz -ddd
     68}}}
     69 Where:
     70  * -i 10.16.0.42 : Interface to use for session
     71  * -m 224.0.0.5  : Multicast address server/clients will use to send/receive disk image chunks, respectively
     72  * -p 7060 : UDP port to use for session
     73  * -W 50000000 : throughput in bps
     74  * -ddd : verbose mode
     75
     76 * Client: on node1-2:
     77{{{
     78frisbee -i 10.16.1.2 -m 224.0.0.5 -p 7060 /dev/hda -ddd
     79}}} 
     80 Where the flags have the same meanings as for frisbeed. In the client's case, `-ddd` will give you a bunch of run-time messages, as well as the summary at the end:
     81{{{
     82Client 271061107 Performance:
     83  runtime:                3387.386 sec
     84  start delay:            0.000 sec
     85  real data written:      1039785984 (306993 Bps)
     86  effective data written: 12002000896 (3543549 Bps)
     87Client 271061107 Params:
     88  chunk/block size:     1024/1024
     89  chunk buffers:        64
     90  disk buffering:       64MB
     91  readahead/inprogress: 2/8
     92  recv timo/count:      30000/3
     93  re-request delay:     1000000
     94  writer idle delay:    1000
     95  randomize requests:   1
     96Client 271061107 Stats:
     97  net thread idle/blocked:        6173/0
     98  decompress thread idle/blocked: 1053451/0
     99  disk thread idle:        1197
     100  join/request msgs:       1/52576
     101  dupblocks(chunk done):   1080
     102  dupblocks(in progress):  31043
     103  partial requests/blocks: 50501/18254631
     104  re-requests:             50501
     105}}}
     106The above, in fact, was the result of the imaging process done with the configuration steps described in this page. Note the runtime -  3387.386 sec, or approximately 56 min!
     107== II Data collection ==
     108In addition to the steps above several other things were done for troubleshooting.
     109=== 2.1 On `kvm-big` ===
     110 * A trace of the control channel traffic can be observed with the command:
     111{{{
     112show switch 00:00:00:10:10:21:32:31 trace detail
     113}}}
     114 Appending >> filename will spit the trace into a file in user bsn's home directory. 
     115
     116 * The controller has a debug shell one can reach with command `debug bash` fromt he CLI. From here, a tcpdump session was started to sniff the control port:
     117{{{
     118tcpdump -i eth0 -s 1514 -vvv not ether proto 0x88cc and not port 22 and port 6633 and not port 69 -w frisbee.pcap
     119}}}
     120 The various filters remove LLDP, SSH, mDNS, and TFTP traffic, respectively, and the capture was saved to a file for later inspection.
     121 
     122=== 2.2 On sw-sb-01 ===
     123 * Commands `showswitch` and `showflow` allow you to check the status of, and flows being pushed to, the device.
     124 * 'show cpu seconds` allows you to monitor switch CPU load:
     125{{{
     126sw-sb-02# show cpu seconds
     127Date 2011/08/17 21:04:13 UTC
     128*** second ***
     129date    time                  cpu average
     130Aug 17  21:03:12-21:03:21   100 100 100 100 100 100 100 100 100 100
     131Aug 17  21:03:22-21:03:31   100 100 100 100 100 100 100  99 100 100
     132Aug 17  21:03:32-21:03:41   100 100 100 100 100 100 100 100  92 100
     133Aug 17  21:03:42-21:03:51   100 100 100 100 100 100 100 100 100 100
     134Aug 17  21:03:52-21:04:01   100 100 100 100 100 100 100 100 100 100
     135Aug 17  21:04:02-21:04:11   100 100 100 100 100 100  93 100 100 100
     136}}}
     137 High load as seen above is bad. Expect normal load to be mostly single digits or in the teens.
     138
     139
     140^1. I don't have a manual for the new !OpenFlow features.^
     141