diff options
author | Yichen Wang <yicwang@cisco.com> | 2017-08-04 17:06:18 -0700 |
---|---|---|
committer | Yichen Wang <yicwang@cisco.com> | 2017-08-04 17:07:25 -0700 |
commit | 0036098e46e16c9ae5b795b108a5b9566c02906b (patch) | |
tree | 005463f0fa4f7a37dead0fa0c0f35c212a551ae7 /nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d | |
parent | ba423e2c7f322871507835341d8265074d747781 (diff) |
Add the scipts to build NFVbench VM
Change-Id: I9632333777260468d6f07cf0149c789626f20145
Signed-off-by: Yichen Wang <yicwang@cisco.com>
Diffstat (limited to 'nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d')
-rw-r--r-- | nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local new file mode 100644 index 0000000..114dd54 --- /dev/null +++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local @@ -0,0 +1,86 @@ +#!/bin/bash + +touch /var/lock/subsys/local + +# Waiting for cloud-init to generate $TESTPMD_CONF, retry 60 seconds +NFVBENCH_CONF=/etc/nfvbenchvm.conf +retry=30 +until [ $retry -eq 0 ]; do + if [ -f $NFVBENCH_CONF ]; then break; fi + retry=$[$retry-1] + sleep 2 +done +if [ ! -f $NFVBENCH_CONF ]; then + exit 0 +fi + +# Parse and obtain all configurations +echo "Generating configurations for forwarder..." +eval $(cat $NFVBENCH_CONF) +touch /nfvbench_configured.flag +NICS=`lspci -D | grep Ethernet | cut -d' ' -f1 | xargs` +PCI_ADDRESS_1=`echo $NICS | awk '{ print $1 }'` +PCI_ADDRESS_2=`echo $NICS | awk '{ print $2 }'` +CPU_CORES=`grep -c ^processor /proc/cpuinfo` +CPU_MASKS=0x`echo "obase=16; 2 ^ $CPU_CORES - 1" | bc` +WORKER_CORES=`expr $CPU_CORES - 1` + +# CPU isolation optimizations +echo 1 > /sys/bus/workqueue/devices/writeback/cpumask +echo 1 > /sys/devices/virtual/workqueue/cpumask +echo 1 > /proc/irq/default_smp_affinity +for irq in `ls /proc/irq/`; do + echo 1 > /proc/irq/$irq/smp_affinity +done +tuna -c $(seq -s, 1 1 $WORKER_CORES) --isolate + +# Configure the forwarder +if [ "$FORWARDER" == "testpmd" ]; then + echo "Configuring testpmd..." + if [ -z "`lsmod | grep igb_uio`" ]; then + modprobe uio + insmod /dpdk/igb_uio.ko + fi + # Binding ports to DPDK + /dpdk/dpdk-devbind.py -b igb_uio $PCI_ADDRESS_1 + /dpdk/dpdk-devbind.py -b igb_uio $PCI_ADDRESS_2 + screen -dmSL testpmd /dpdk/testpmd \ + -c $CPU_MASKS \ + -n 4 \ + -- \ + --burst=32 \ + --txd=256 \ + --rxd=1024 \ + --txqflags=0xf00 \ + --disable-hw-vlan \ + --eth-peer=0,$TG_MAC1 \ + --eth-peer=1,$TG_MAC2 \ + --forward-mode=mac \ + --nb-cores=$WORKER_CORES\ + --max-pkt-len 9000 +else + echo "Configuring vpp..." + cp /vpp/startup.conf /etc/vpp/startup.conf + cp /vpp/vm.conf /etc/vpp/vm.conf + + sed -i "s/{{PCI_ADDRESS_1}}/$PCI_ADDRESS_1/g" /etc/vpp/startup.conf + sed -i "s/{{PCI_ADDRESS_2}}/$PCI_ADDRESS_2/g" /etc/vpp/startup.conf + sed -i "s/{{WORKER_CORES}}/$WORKER_CORES/g" /etc/vpp/startup.conf + service vpp start + + INTFS=`vppctl show int | grep Ethernet | xargs` + INTF_1=`echo $INTFS | awk '{ print $1 }'` + INTF_2=`echo $INTFS | awk '{ print $4 }'` + sed -i "s/{{INTF_1}}/${INTF_1//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{INTF_2}}/${INTF_2//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{VNF_GATEWAY1_CIDR}}/${VNF_GATEWAY1_CIDR//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{VNF_GATEWAY2_CIDR}}/${VNF_GATEWAY2_CIDR//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_MAC1}}/${TG_MAC1}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_MAC2}}/${TG_MAC2}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_NET1}}/${TG_NET1//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_NET2}}/${TG_NET2//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_GATEWAY1_IP}}/${TG_GATEWAY1_IP}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_GATEWAY2_IP}}/${TG_GATEWAY2_IP}/g" /etc/vpp/vm.conf + + service vpp restart +fi |