JIRA: BOTTLENECKS-41 define the documents of vstf in B release 85/7385/1
authorYiting.Li <liyiting@huawei.com>
Wed, 20 Jan 2016 03:01:43 +0000 (11:01 +0800)
committerJun Li <matthew.lijun@huawei.com>
Wed, 20 Jan 2016 06:05:23 +0000 (06:05 +0000)
Change-Id: Ib2ef6fabf0452a3e686d3de0ec7424e9a0500482
Signed-off-by: Yiting.Li <liyiting@huawei.com>
(cherry picked from commit 194ae04e266f63512a8f041f6bfd0dc330cd81af)

docs/bottlenecks_brahmaputra_docs/userguide/vstf/vstf_installation.rst
utils/infra_setup/heat_template/vstf_heat_template/launch_vstf.sh
utils/infra_setup/heat_template/vstf_heat_template/scp.sh [deleted file]
utils/infra_setup/heat_template/vstf_heat_template/ssh.sh [deleted file]
utils/infra_setup/heat_template/vstf_heat_template/vstf_HOT_create_instance.sh
utils/infra_setup/heat_template/vstf_heat_template/vstf_test.sh
vstf/vstf/agent/perf/qperf.py
vstf/vstf/common/daemon.py
vstf/vstf/common/perfmark.py
vstf/vstf/controller/res/logo.jpg
vstf/vstf/controller/sw_perf/performance.py

index 45db9d3..ad3ae39 100644 (file)
@@ -1,3 +1,238 @@
 ===================================
 ===================================
-Bottlenecks Vstf Installation Guide
+Bottlenecks VSTF Installation Guide
 ===================================
 ===================================
+
+
+VSTF Introduction
+====================
+VSTF(Virtual Switch Test Framework) is a system-level testing framework in the
+area of network virtualization, and it could help you estimate the system switch
+ability and find out the network bottlenecks by main KPIs(bandwidth, latency,
+resource usage and so on), VSTF owns a methodology to define the test scenario and
+testcases, Now we could support Tu testcases in the Openstack environment, More
+scenarios and cases will be added.
+
+VSTF TestScenario
+-----------------
+1. Tu - VM to VM
+2. Tn - Physical Nic loopback
+3. TnV - VNF loopback
+4. Ti - VM to Physical Nic
+
+Pre-install Packages on the ubuntu 14.04 VM
+===========================================
+VSTF VM Preparation Steps
+-------------------------
+1. Create a ubuntu 14.04 VM
+2. Install dependency inside VM
+3. Install vstf python package inside VM
+
+VM preparation
+--------------
+Install python2.7 version and git
+
+::
+
+  sudo apt-get install python2.7
+  sudo apt-get install git
+
+Download Bottlenecks package
+
+::
+
+  sudo cd /home/
+  sudo git clone https://gerrit.opnfv.org/gerrit/bottlenecks
+
+Install the dependency
+
+::
+
+  sudo apt-get install python-pip
+  sudo pip install --upgrade pip
+  sudo dpkg-reconfigure dash
+  sudo apt-get install libjpeg-dev
+  sudo apt-get install libpng-dev
+  sudo apt-get install python-dev
+  sudo apt-get install python-testrepository
+  sudo apt-get install git
+  sudo apt-get install python-pika
+  sudo apt-get install python-oslo.config
+  sudo pip install -r /home/bottlenecks/vstf/requirements.txt
+
+Install vstf package
+
+::
+
+  sudo mkdir -p /var/log/vstf/
+  sudo cp -r /home/bottlenecks/vstf/etc/vstf/ /etc/
+  sudo mkdir -p /opt/vstf/
+  sudo cd /home/bottlenecks;sudo rm -rf build/
+  sudo python setup.py install
+
+Image on the Cloud
+------------------
++-----------+-------------------------------------------------------------+
+|    Name   | vstf-image                                                  |
++===========+=============================================================+
+|    URL    | http://artifacts.opnfv.org/bottlenecks/vstf-manager-new.img |
++-----------+-------------------------------------------------------------+
+|   Format  | QCOW2                                                       |
++-----------+-------------------------------------------------------------+
+|    Size   | 5G                                                          |
++-----------+-------------------------------------------------------------+
+|    User   | root                                                        |
++-----------+-------------------------------------------------------------+
+|   Passwd  | root                                                        |
++-----------+-------------------------------------------------------------+
+There is a complete vstf image on the cloud ,you could download it and use it to
+deploy and run cases ,but do not need VM preparation steps.
+
+
+How is VSTF Integrated into Installers
+========================================
+VM requirements
+---------------
++------------------+----------+--------------------+-----------------------------------------------------+
+|        Name      |  FLAVOR  |     IMAGE_NAME     | NETWORK                                             |
++==================+==========+====================+=====================================================+
+|   vstf-manager   | m1.large |     vstf-image     | control-plane=XX.XX.XX.XX                           |
++------------------+----------+--------------------+-----------------------------------------------------+
+|   vstf-tester    | m1.large |     vstf-image     | control-plane(eth0)=XX.XX.XX.XX                     |
+|                  |          |                    | test-plane(eth1)=XX.XX.XX.XX                        |
++------------------+----------+--------------------+-----------------------------------------------------+
+|   vstf-target    | m1.large |     vstf-image     | control-plane(eth0)=XX.XX.XX.XX                     |
+|                  |          |                    | test-plane(eth1)=XX.XX.XX.XX                        |
++------------------+----------+--------------------+-----------------------------------------------------+
+m1.large means 4U4G for the target image Size 5GB
+For the network used by VMs,network need two plane ,one plane is control plane and the other plane is test plane.
+
+OPNFV community Usage in the CI system
+--------------------------------------
++---------------------------------------+---------------------------------------+
+| Project Name                          | Project Categoty                      |
++=======================================+=======================================+
+| bottlenecks-daily-fuel-vstf-lf-master | bottlenecks                           |
++---------------------------------------+---------------------------------------+
+OPNFV community jenkins Project info
+
+Main Entrance for the ci test:
+
+::
+
+  cd /home/bottlenecks/ci;
+  bash -x vstf_run.sh
+
+Test on local(Openstack Environment)
+------------------------------------
+download the image file
+
+::
+
+  curl --connect-timeout 10 -o /tmp/vstf-manager.img \
+       http://artifacts.opnfv.org/bottlenecks/vstf-manager-new.img -v
+
+create the image file by the glance
+
+::
+
+  glance image-create --name $MANAGER_IMAGE_NAME \
+        --disk-format qcow2 \
+        --container-format bare \
+        --file /tmp/vstf-manager.img
+
+create the keypair for the image(anyone will be ok)
+
+::
+
+  cd /home/bottlenecks/utils/infra_setup/bottlenecks_key
+  nova keypair-add --pub_key $KEY_PATH/bottlenecks_key.pub $KEY_NAME
+
+create the vstf three VMs in the openstack by heat
+
+::
+
+  cd /home/bottlenecks/utils/infra_setup/heat_template/vstf_heat_template
+  heat stack-create vstf -f bottleneck_vstf.yaml
+
+launch the vstf process inside the vstf-manager vstf-tester vstf-target VMs
+
+::
+
+  cd /home/bottlenecks/utils/infra_setup/heat_template/vstf_heat_template
+  bash -x launch_vstf.sh
+
+edit the test scenario and test packet list in the vstf_test.sh, now support the Tu-1/2/3
+
+::
+
+  function fn_testing_scenario(){
+      ...
+      local test_length_list="64 128 256 512 1024"
+      local test_scenario_list="Tu-1 Tu-3"
+      ...
+  }
+
+launch the vstf script
+
+::
+
+  cd /home/bottlenecks/utils/infra_setup/heat_template/vstf_heat_template
+  bash -x vstf_test.sh
+
+Test Result Description
+=======================
+Result Format
+-------------
+For example after the test, The result will display as the following format
+
+::
+
+  { u'64': { u'AverageLatency': 0.063,
+             u'Bandwidth': 0.239,
+             u'CPU': 0.0,
+             u'Duration': 20,
+             u'MaximumLatency': 0.063,
+             u'MinimumLatency': 0.063,
+             u'MppspGhz': 0,
+             u'OfferedLoad': 100.0,
+             u'PercentLoss': 22.42,
+             u'RxFrameCount': 4309750.0,
+             u'RxMbps': 198.28,
+             u'TxFrameCount': 5555436.0,
+             u'TxMbps': 230.03}}
+
+Option Description
+------------------
++---------------------+---------------------------------------------------+
+|     Option Name     |                 Description                       |
++=====================+===================================================+
+|    AverageLatency   | The average latency data during the packet        |
+|                     | transmission (Unit:microsecond)                   |
++---------------------+---------------------------------------------------+
+|      Bandwidth      | Network bandwidth(Unit:Million packets per second)|
++---------------------+---------------------------------------------------+
+|         CPU         | Total Resource Cpu usage(Unit: Ghz)               |
++---------------------+---------------------------------------------------+
+|      Duration       | Test time(Unit: second)                           |
++---------------------+---------------------------------------------------+
+|   MaximumLatency    | The maximum packet latency during the packet      |
+|                     | transmission (Unit:microsecond)                   |
++---------------------+---------------------------------------------------+
+|   MinimumLatency    | The maximum packet latency during the packet      |
+|                     | transmission (Unit:microsecond)                   |
++---------------------+---------------------------------------------------+
+|      MppspGhz       | Million Packets per second with per CPU           |
+|                     | resource Ghz(Unit: Mpps/Ghz)                      |
++---------------------+---------------------------------------------------+
+|    OfferedLoad      | The load of network offered                       |
++---------------------+---------------------------------------------------+
+|    PercentLoss      | The percent of frame loss rate                    |
++---------------------+---------------------------------------------------+
+|    RxFrameCount     | The total frame on Nic rx                         |
++---------------------+---------------------------------------------------+
+|       RxMbps        | The received bandwidth per second                 |
++---------------------+---------------------------------------------------+
+|    TxFrameCount     | The total frame on Nic rx                         |
++---------------------+---------------------------------------------------+
+|       TxMbps        | The send bandwidth per second                     |
++---------------------+---------------------------------------------------+
index 37754f9..f2a0aea 100644 (file)
@@ -1,5 +1,12 @@
 #!/bin/bash
 #!/bin/bash
-
+##############################################################################
+# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
 set -x
 
 STACK_NAME="vstf"
 set -x
 
 STACK_NAME="vstf"
diff --git a/utils/infra_setup/heat_template/vstf_heat_template/scp.sh b/utils/infra_setup/heat_template/vstf_heat_template/scp.sh
deleted file mode 100644 (file)
index b3d6a27..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-function scp_cmd()
-{
-    local ip=$1
-    local usr=$2
-    local passwd=$3
-    srcfile=$4
-    desfile=$5
-    opt=$6
-    case $opt in
-        file)
-                expect -c "
-            spawn scp -r $srcfile $usr@$ip:$desfile
-                set timeout  -1
-                expect {
-                        \"*no)?\"  {
-                                send \"yes\r\"
-                                exp_continue
-                        }
-                        \"*assword:*\"  {
-                                send \"$passwd\r\"
-                                exp_continue
-                        }
-                }
-                "
-        ;;
-        dir)
-            expect -c "
-                        spawn scp -r $srcfile $usr@$ip:$desfile
-                        set timeout  -1
-                        expect {
-                                \"*no)?\"  {
-                                        send \"yes\r\"
-                                        exp_continue
-                                }
-                                \"*assword:*\"  {
-                                        send \"$passwd\r\"
-                                        exp_continue
-                                }
-                        }
-                        "
-        ;;
-        *)
-            echo "err"
-        ;;
-    esac
-}
-
-function remote_scp_cmd()
-{
-    local ip=$1
-    local usr=$2
-    local passwd=$3
-    srcfile=$4
-    desfile=$5
-    opt=$6
-    case $opt in
-        file)
-                expect -c "
-                spawn scp -r $usr@$ip:$srcfile $desfile
-                set timeout  -1
-                expect {
-                        \"*no)?\"  {
-                                send \"yes\r\"
-                                exp_continue
-                        }
-                        \"*assword:*\"  {
-                                send \"$passwd\r\"
-                                exp_continue
-                        }
-                }
-                "
-        ;;
-        dir)
-            expect -c "
-                        spawn scp -r $usr@$ip:$srcfile $desfile
-                        set timeout  -1
-                        expect {
-                                \"*no)?\"  {
-                                        send \"yes\r\"
-                                        exp_continue
-                                }
-                                \"*assword:*\"  {
-                                        send \"$passwd\r\"
-                                        exp_continue
-                                }
-                        }
-                        "
-        ;;
-        *)
-            echo "err"
-        ;;
-    esac
-}
diff --git a/utils/infra_setup/heat_template/vstf_heat_template/ssh.sh b/utils/infra_setup/heat_template/vstf_heat_template/ssh.sh
deleted file mode 100644 (file)
index 3560006..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-function run_cmd()
-{
-    local ip=$1
-    local usr=$2
-    local passwd=$3
-    local cmd=$4
-    expect -c "
-        spawn ssh $usr@$ip
-        set timeout -1
-        expect {
-                \"*no)?\"  {
-                        send \"yes\r\"
-                        exp_continue
-                }
-                \"*assword:*\"  {
-                        send \"$passwd\r\"
-            exp_continue
-                }
-        \"*#\"  {
-            send \"$cmd\r\"
-            exec sleep 1
-            send \"exit\r\"
-            expect eof
-        }
-            }
-    "
-}
-
index 4500025..ce8ed43 100755 (executable)
@@ -1,5 +1,12 @@
 #!/bin/bash
 #!/bin/bash
-
+##############################################################################
+# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
 set -ex
 
 GERRIT_REFSPEC_DEBUG=$1
 set -ex
 
 GERRIT_REFSPEC_DEBUG=$1
index a5f06f8..d13a6de 100644 (file)
@@ -1,12 +1,17 @@
 #!/bin/bash
 #!/bin/bash
+##############################################################################
+# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
 set -x
 
 VM_MANAGER_USER="root"
 VM_MANAGER_PASSWD="root"
 STACK_NAME="vstf"
 set -x
 
 VM_MANAGER_USER="root"
 VM_MANAGER_PASSWD="root"
 STACK_NAME="vstf"
-#load func
-source ./ssh.sh
-source ./scp.sh
 
 function fn_parser_ipaddress(){
     #parser and get output ipaddress
 
 function fn_parser_ipaddress(){
     #parser and get output ipaddress
@@ -35,7 +40,6 @@ function fn_vstf_test_config(){
     #setting testting ipaddress
     local cmd="vstfadm settings ${tester_testing_ip} ${target_testing_ip}"
     echo "$cmd"
     #setting testting ipaddress
     local cmd="vstfadm settings ${tester_testing_ip} ${target_testing_ip}"
     echo "$cmd"
-    #run_cmd ${manager_control_public_ip} ${VM_MANAGER_USER} ${VM_MANAGER_PASSWD} "${cmd}"
     ssh-keygen -f "/home/jenkins-ci/.ssh/known_hosts" -R ${manager_control_public_ip}
     sshpass -p root ssh -o StrictHostKeyChecking=no root@${manager_control_public_ip} "${cmd}"
 
     ssh-keygen -f "/home/jenkins-ci/.ssh/known_hosts" -R ${manager_control_public_ip}
     sshpass -p root ssh -o StrictHostKeyChecking=no root@${manager_control_public_ip} "${cmd}"
 
@@ -55,7 +59,6 @@ function fn_testing_scenario(){
         echo ${cmd}
 
         ssh-keygen -f "/home/jenkins-ci/.ssh/known_hosts" -R ${manager_control_public_ip}
         echo ${cmd}
 
         ssh-keygen -f "/home/jenkins-ci/.ssh/known_hosts" -R ${manager_control_public_ip}
-        #run_cmd ${manager_control_public_ip} ${VM_MANAGER_USER} ${VM_MANAGER_PASSWD} "${head_cmd} ${scene} ${test_tool} ${protocol} ${test_type} \"${test_length_list}\" > /root/${scene}"
         sshpass -p root ssh -o StrictHostKeyChecking=no root@${manager_control_public_ip} "${cmd}"
         sleep 10        
     done
         sshpass -p root ssh -o StrictHostKeyChecking=no root@${manager_control_public_ip} "${cmd}"
         sleep 10        
     done
@@ -68,7 +71,6 @@ function fn_result(){
     rm -rf ./result/*
     for scene in ${test_scenario_list}
     do
     rm -rf ./result/*
     for scene in ${test_scenario_list}
     do
-        #remote_scp_cmd ${manager_control_public_ip} ${VM_MANAGER_USER} ${VM_MANAGER_PASSWD} "/root/${scene}-result.txt" "./result/${scene}" "file"
         sshpass -p root ssh -o StrictHostKeyChecking=no root@${manager_control_public_ip} "cat /root/${scene}-result.txt"
         sshpass -p root scp -o StrictHostKeyChecking=no root@${manager_control_public_ip}:/root/${scene}-result.txt "./result/${scene}"
     done
         sshpass -p root ssh -o StrictHostKeyChecking=no root@${manager_control_public_ip} "cat /root/${scene}-result.txt"
         sshpass -p root scp -o StrictHostKeyChecking=no root@${manager_control_public_ip}:/root/${scene}-result.txt "./result/${scene}"
     done
index f84f9c2..afdf44d 100755 (executable)
@@ -133,7 +133,7 @@ class Qperf(object):
                 if data[3] == "us":
                     latency = float(data[2]) / 1000
                 else:
                 if data[3] == "us":
                     latency = float(data[2]) / 1000
                 else:
-                    latency = float(data[2]) / 1000
+                    latency = float(data[2])
         result = {
             mark.minLatency: latency,
             mark.avgLatency: latency,
         result = {
             mark.minLatency: latency,
             mark.avgLatency: latency,
index 1085d36..35933da 100755 (executable)
@@ -20,45 +20,46 @@ class Daemon(object):
     
     Usage: subclass the Daemon class and override the run() method
     """
     
     Usage: subclass the Daemon class and override the run() method
     """
+
     def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):
         super(Daemon, self).__init__()
         self.stdin = stdin
         self.stdout = stdout
         self.stderr = stderr
         self.pidfile = pidfile
     def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):
         super(Daemon, self).__init__()
         self.stdin = stdin
         self.stdout = stdout
         self.stderr = stderr
         self.pidfile = pidfile
-    
+
     def daemonize(self):
         """
         do the UNIX double-fork magic, see Stevens' "Advanced 
         Programming in the UNIX Environment" for details (ISBN 0201563177)
         http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16
         """
     def daemonize(self):
         """
         do the UNIX double-fork magic, see Stevens' "Advanced 
         Programming in the UNIX Environment" for details (ISBN 0201563177)
         http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16
         """
-        try: 
-            pid = os.fork() 
+        try:
+            pid = os.fork()
             if pid > 0:
             if pid > 0:
-                sys.exit(0) 
-        except OSError, e: 
+                sys.exit(0)
+        except OSError, e:
             LOG.error("fork #1 failed: %(errno)s, %(strerror)s",
             LOG.error("fork #1 failed: %(errno)s, %(strerror)s",
-                      {'errno':e.errno, 'strerror': e.strerror})
+                      {'errno': e.errno, 'strerror': e.strerror})
             sys.exit(1)
             sys.exit(1)
-    
+
         # decouple from parent environment
         # decouple from parent environment
-        os.chdir("/") 
-        os.setsid() 
-        os.umask(0) 
-    
+        os.chdir("/")
+        os.setsid()
+        os.umask(0)
+
         # do second fork
         # do second fork
-        try: 
-            pid = os.fork() 
+        try:
+            pid = os.fork()
             if pid > 0:
                 # exit from second parent
             if pid > 0:
                 # exit from second parent
-                sys.exit(0) 
-        except OSError, e: 
+                sys.exit(0)
+        except OSError, e:
             LOG.error("fork #1 failed: %(errno)s, %(strerror)s",
             LOG.error("fork #1 failed: %(errno)s, %(strerror)s",
-                      {'errno':e.errno, 'strerror': e.strerror})
-            sys.exit(1) 
-    
-        # redirect standard file descriptors
+                      {'errno': e.errno, 'strerror': e.strerror})
+            sys.exit(1)
+
+            # redirect standard file descriptors
         sys.stdout.flush()
         sys.stderr.flush()
         si = file(self.stdin, 'r')
         sys.stdout.flush()
         sys.stderr.flush()
         si = file(self.stdin, 'r')
@@ -67,12 +68,12 @@ class Daemon(object):
         os.dup2(si.fileno(), sys.stdin.fileno())
         os.dup2(so.fileno(), sys.stdout.fileno())
         os.dup2(se.fileno(), sys.stderr.fileno())
         os.dup2(si.fileno(), sys.stdin.fileno())
         os.dup2(so.fileno(), sys.stdout.fileno())
         os.dup2(se.fileno(), sys.stderr.fileno())
-    
+
         # write pidfile
         atexit.register(self.delpid)
         pid = str(os.getpid())
         # write pidfile
         atexit.register(self.delpid)
         pid = str(os.getpid())
-        file(self.pidfile,'w+').write("%s\n" % pid)
-    
+        file(self.pidfile, 'w+').write("%s\n" % pid)
+
     def delpid(self):
         os.remove(self.pidfile)
 
     def delpid(self):
         os.remove(self.pidfile)
 
@@ -80,15 +81,15 @@ class Daemon(object):
         """
         Start the daemon
         """
         """
         Start the daemon
         """
-        
+
         # Check for a pidfile to see if the daemon already runs
         try:
         # Check for a pidfile to see if the daemon already runs
         try:
-            pf = file(self.pidfile,'r')
+            pf = file(self.pidfile, 'r')
             pid = int(pf.read().strip())
             pf.close()
         except IOError:
             pid = None
             pid = int(pf.read().strip())
             pf.close()
         except IOError:
             pid = None
-    
+
         if pid:
             message = "pidfile %s already exist. Daemon already running?\n"
             sys.stderr.write(message % self.pidfile)
         if pid:
             message = "pidfile %s already exist. Daemon already running?\n"
             sys.stderr.write(message % self.pidfile)
@@ -104,16 +105,16 @@ class Daemon(object):
         """
         # Get the pid from the pidfile
         try:
         """
         # Get the pid from the pidfile
         try:
-            pf = file(self.pidfile,'r')
+            pf = file(self.pidfile, 'r')
             pid = int(pf.read().strip())
             pf.close()
         except IOError:
             pid = None
             pid = int(pf.read().strip())
             pf.close()
         except IOError:
             pid = None
-    
+
         if not pid:
             message = "pidfile %s does not exist. Daemon not running?\n"
             sys.stderr.write(message % self.pidfile)
         if not pid:
             message = "pidfile %s does not exist. Daemon not running?\n"
             sys.stderr.write(message % self.pidfile)
-            return # not an error in a restart
+            return  # not an error in a restart
 
         # Try killing the daemon process    
         try:
 
         # Try killing the daemon process    
         try:
@@ -144,10 +145,10 @@ class Daemon(object):
         
         """
         pass
         
         """
         pass
-        
+
     def daemon_die(self):
     def daemon_die(self):
-        """You should this method when you shutdown daemon
+        """You should override this method when you shutdown daemon
         this func will be call by stop() before kill the process
         
         """
         this func will be call by stop() before kill the process
         
         """
-        pass
\ No newline at end of file
+        pass
index 5edfe3a..4f5c397 100755 (executable)
@@ -19,5 +19,5 @@ rxCount = 'RxFrameCount'
 duration = 'Duration'
 cpu = 'CPU'
 mppsGhz = 'MppspGhz'
 duration = 'Duration'
 cpu = 'CPU'
 mppsGhz = 'MppspGhz'
-rxMbps = "RxMbit"
-txMbps = 'TxMbit'
+rxMbps = "RxMbps"
+txMbps = 'TxMbps'
index 683acfe..9d52482 100755 (executable)
Binary files a/vstf/vstf/controller/res/logo.jpg and b/vstf/vstf/controller/res/logo.jpg differ
index 7e6467e..3fe91e9 100755 (executable)
@@ -268,8 +268,8 @@ class Performance(object):
                 record[mark.rxCount] += nic_data['rxpck']
                 record[mark.txCount] += nic_data['txpck']
                 record[mark.bandwidth] += nic_data['rxpck/s']
                 record[mark.rxCount] += nic_data['rxpck']
                 record[mark.txCount] += nic_data['txpck']
                 record[mark.bandwidth] += nic_data['rxpck/s']
-                record[mark.rxMbps] += nic_data['rxmB/s']
-                record[mark.txMbps] += nic_data['txmB/s']
+                record[mark.rxMbps] += nic_data['rxmB/s'] * 8
+                record[mark.txMbps] += nic_data['txmB/s'] * 8
 
             if record[mark.rxMbps] > record[mark.txMbps]:
                 record[mark.rxMbps], record[mark.txMbps] = record[mark.txMbps], record[mark.rxMbps]
 
             if record[mark.rxMbps] > record[mark.txMbps]:
                 record[mark.rxMbps], record[mark.txMbps] = record[mark.txMbps], record[mark.rxMbps]