* [dts] [PATCH 0/5] support virutal scenario that host drived by dpdk
@ 2015-07-16 13:54 Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 1/5] Support virtualization scenario that use dpdk as host PF driver Yong Liu
` (4 more replies)
0 siblings, 5 replies; 6+ messages in thread
From: Yong Liu @ 2015-07-16 13:54 UTC (permalink / raw)
To: dts
From: Marvin Liu <yong.liu@intel.com>
Host PF devices may have different behaviors between dpdk and linux default
driver. This patch will support dpdk drived PF devices and create the virtual
scenario based on that. User can changed host application and cores assgined.
Marvin Liu (5):
Support virtualization scenario that use dpdk as host PF driver
Add dpdk host virtualization scenario configuration file
Add new exception type for dpdk host environment failure
Support start testpmd with assigned core list
Skip setup host target when virtual scenario module has done it
conf/scene/dpdk_vf_passthrough.cfg | 32 +++++++++++++++
framework/dts.py | 4 +-
framework/exception.py | 3 ++
framework/pmd_output.py | 9 +++--
framework/virt_scene.py | 80 +++++++++++++++++++++++++++-----------
5 files changed, 101 insertions(+), 27 deletions(-)
create mode 100644 conf/scene/dpdk_vf_passthrough.cfg
--
1.9.3
^ permalink raw reply [flat|nested] 6+ messages in thread
* [dts] [PATCH 1/5] Support virtualization scenario that use dpdk as host PF driver
2015-07-16 13:54 [dts] [PATCH 0/5] support virutal scenario that host drived by dpdk Yong Liu
@ 2015-07-16 13:54 ` Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 2/5] Add dpdk host virtualization scenario configuration file Yong Liu
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Yong Liu @ 2015-07-16 13:54 UTC (permalink / raw)
To: dts
From: Marvin Liu <yong.liu@intel.com>
With 'host' option in scenario configuration file, virtual scene module will
setup scenario that host pf drived by dpdk. First bind host pf devices to
igb_uio driver. Then generate vf devices by max_vfs attribute. Before start VM,
start dpdk application as host pf driver.
Signed-off-by: Marvin Liu <yong.liu@intel.com>
diff --git a/framework/virt_scene.py b/framework/virt_scene.py
index 73d2cdf..cf4a416 100644
--- a/framework/virt_scene.py
+++ b/framework/virt_scene.py
@@ -29,6 +29,7 @@
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+import time
import dts
from settings import CONFIG_ROOT_PATH, get_netdev
@@ -36,6 +37,7 @@ from config import VirtConf
from config import VIRTCONF
from exception import *
from qemu_kvm import QEMUKvm
+from pmd_output import PmdOutput
# scenario module for handling scenario
# 1. load configurations
@@ -65,6 +67,8 @@ class VirtScene(object):
self.vm_dut_enable = False
self.auto_portmap = True
self.vm_type = 'kvm'
+ self.def_target = "x86_64-native-linuxapp-gcc"
+ self.host_bound = False
# for vm dut init_log
self.host_dut.test_classname = 'dts'
@@ -82,10 +86,15 @@ class VirtScene(object):
raise VirtConfigParseException
def prepare_vm(self):
+ host_cfg = None
for conf in self.vm_confs.keys():
if conf == 'scene':
- suite_cfg = self.vm_confs['scene'][0]
- self.prepare_suite(suite_cfg)
+ for cfg in self.vm_confs['scene']:
+ if 'suite' in cfg.keys():
+ self.prepare_suite(cfg['suite'])
+ if 'host' in cfg.keys():
+ self.host_bound = True
+ host_cfg = cfg['host'][0]
self.vm_confs.pop('scene')
else:
vm_name = conf
@@ -94,6 +103,10 @@ class VirtScene(object):
self.prepare_devices(vm_conf)
self.prepare_vmdevice(vm_conf)
+ # dpdk should start after vf devices created
+ if host_cfg:
+ self.prepare_host(**host_cfg)
+
def cleanup_vm(self):
# reload config for has been changed when handle config
self.load_config()
@@ -104,23 +117,45 @@ class VirtScene(object):
self.cleanup_devices(vm_conf)
def prepare_suite(self, conf):
- if 'suite' in conf.keys():
- for param in conf['suite']:
- if 'dut' in param.keys():
- if param['dut'] == 'vm_dut':
- self.vm_dut_enable = True
- if 'type' in param.keys():
- if param['type'] == 'xen':
- self.vm_type = 'xen'
- # not implement yet
- if param['type'] == 'vmware':
- self.vm_type = 'vmware'
- # not implement yet
- if param['type'] == 'container':
- self.vm_type = 'container'
- if 'portmap' in param.keys():
- if param['portmap'] == 'cfg':
- self.auto_portmap = False
+ for param in conf:
+ if 'dut' in param.keys():
+ if param['dut'] == 'vm_dut':
+ self.vm_dut_enable = True
+ if 'type' in param.keys():
+ if param['type'] == 'xen':
+ self.vm_type = 'xen'
+ # not implement yet
+ if param['type'] == 'vmware':
+ self.vm_type = 'vmware'
+ # not implement yet
+ if param['type'] == 'container':
+ self.vm_type = 'container'
+ if 'portmap' in param.keys():
+ if param['portmap'] == 'cfg':
+ self.auto_portmap = False
+
+ def prepare_host(self, **opts):
+ if 'dpdk' not in opts.keys():
+ print dts.RED("Scenario host parameter request dpdk option!!!")
+ raise VirtConfigParamException('host')
+
+ if 'cores' not in opts.keys():
+ print dts.RED("Scenario host parameter request cores option!!!")
+ raise VirtConfigParamException('host')
+
+ if 'target' in opts.keys():
+ target = opts['target']
+ else:
+ target = self.def_target
+
+ self.host_dut.set_target(target, bind_dev=True)
+
+ if opts['dpdk'] == 'testpmd':
+ self.pmdout = PmdOutput(self.host_dut)
+ cores = opts['cores'].split()
+ out = self.pmdout.start_testpmd(cores)
+ if 'Error' in out:
+ raise VirtHostPrepareException()
def prepare_cpu(self, vm_name, conf):
cpu_param = {}
@@ -241,9 +276,10 @@ class VirtScene(object):
def reset_pf_cmds(self, port):
command = {}
command['type'] = 'host'
- intf = self.host_dut.ports_info[port]['intf']
- command['command'] = 'ifconfig %s up' % intf
- self.reg_postvm_cmds(command)
+ if not self.host_bound:
+ intf = self.host_dut.ports_info[port]['intf']
+ command['command'] = 'ifconfig %s up' % intf
+ self.reg_postvm_cmds(command)
def handle_dev_gen(self, **opts):
if 'pf_idx' in opts.keys():
--
1.9.3
^ permalink raw reply [flat|nested] 6+ messages in thread
* [dts] [PATCH 2/5] Add dpdk host virtualization scenario configuration file
2015-07-16 13:54 [dts] [PATCH 0/5] support virutal scenario that host drived by dpdk Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 1/5] Support virtualization scenario that use dpdk as host PF driver Yong Liu
@ 2015-07-16 13:54 ` Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 3/5] Add new exception type for dpdk host environment failure Yong Liu
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Yong Liu @ 2015-07-16 13:54 UTC (permalink / raw)
To: dts
From: Marvin Liu <yong.liu@intel.com>
This configuration file defined one scenario that two host PF devices drived
by dpdk and 2 generated VF devices pass-throughed in VM. Host dpdk application
is testpmd and allocate first four cores for it.
Signed-off-by: Marvin Liu <yong.liu@intel.com>
diff --git a/conf/scene/dpdk_vf_passthrough.cfg b/conf/scene/dpdk_vf_passthrough.cfg
new file mode 100644
index 0000000..2f3c008
--- /dev/null
+++ b/conf/scene/dpdk_vf_passthrough.cfg
@@ -0,0 +1,32 @@
+# vm configuration for host dpdk and vf passthrough cases
+# host application is testpmd and allocated lcore 0-3 for it
+# default target will be x86_64-native-linuxapp-gcc
+# numa 0,1,yes yes mean cpu numa match the first port
+# skipcores list mean those core will not used by vm
+# dut=vm_dut; mean vm_dut act as dut
+# dut=dut; mean host dut act as dut
+# portmap=cfg; mean vm_dut port map will be load from cfg
+# portmap=auto; mean vm_dut will create portmap automatically
+# devices = dev_gen/host/dev_gen+host not useful now
+[scene]
+suite =
+ dut=vm_dut,portmap=cfg;
+ tester=tester;
+ type=kvm;
+host =
+ dpdk=testpmd,cores=0 1 2 3,target=x86_64-native-linuxapp-gcc;
+[vm0]
+cpu =
+ model=host,number=4,numa=auto,skipcores=0 1 2 3;
+mem =
+ size=2048,hugepage=no;
+disk =
+ file=/storage/vm-image/vm0.img;
+dev_gen =
+ pf_idx=0,vf_num=1,driver=igb_uio;
+ pf_idx=1,vf_num=1,driver=igb_uio;
+device =
+ vf_idx=0,pf_dev=0,guestpci=auto;
+ vf_idx=0,pf_dev=1,guestpci=auto;
+vnc =
+ displayNum=1;
--
1.9.3
^ permalink raw reply [flat|nested] 6+ messages in thread
* [dts] [PATCH 3/5] Add new exception type for dpdk host environment failure
2015-07-16 13:54 [dts] [PATCH 0/5] support virutal scenario that host drived by dpdk Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 1/5] Support virtualization scenario that use dpdk as host PF driver Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 2/5] Add dpdk host virtualization scenario configuration file Yong Liu
@ 2015-07-16 13:54 ` Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 4/5] Support start testpmd with assigned core list Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 5/5] Skip setup host target when virtual scenario module has done it Yong Liu
4 siblings, 0 replies; 6+ messages in thread
From: Yong Liu @ 2015-07-16 13:54 UTC (permalink / raw)
To: dts
From: Marvin Liu <yong.liu@intel.com>
Signed-off-by: Marvin Liu <yong.liu@intel.com>
diff --git a/framework/exception.py b/framework/exception.py
index facbeed..0e7a344 100644
--- a/framework/exception.py
+++ b/framework/exception.py
@@ -137,3 +137,6 @@ class VirtDeviceCreateException(Exception):
class VirtVmOperationException(Exception):
pass
+
+class VirtHostPrepareException(Exception):
+ pass
--
1.9.3
^ permalink raw reply [flat|nested] 6+ messages in thread
* [dts] [PATCH 4/5] Support start testpmd with assigned core list
2015-07-16 13:54 [dts] [PATCH 0/5] support virutal scenario that host drived by dpdk Yong Liu
` (2 preceding siblings ...)
2015-07-16 13:54 ` [dts] [PATCH 3/5] Add new exception type for dpdk host environment failure Yong Liu
@ 2015-07-16 13:54 ` Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 5/5] Skip setup host target when virtual scenario module has done it Yong Liu
4 siblings, 0 replies; 6+ messages in thread
From: Yong Liu @ 2015-07-16 13:54 UTC (permalink / raw)
To: dts
From: Marvin Liu <yong.liu@intel.com>
Signed-off-by: Marvin Liu <yong.liu@intel.com>
diff --git a/framework/pmd_output.py b/framework/pmd_output.py
index 4ccdd0d..23d4c0d 100644
--- a/framework/pmd_output.py
+++ b/framework/pmd_output.py
@@ -65,17 +65,16 @@ class PmdOutput():
return None
else:
return int(m.group(2))
-
+
def set_default_corelist(self):
"""
set default cores for start testpmd
- """
+ """
core_number = len(self.dut.cores)
if core_number < 2:
raise
else:
self.default_cores = "1S/2C/1T"
-
def get_pmd_stats(self, portid):
stats = {}
@@ -105,7 +104,9 @@ class PmdOutput():
if "--txqflags" not in param:
param += " --txqflags=0"
- if cores == "Default":
+ if type(cores) == list:
+ core_list = cores
+ elif cores == "Default":
core_list = self.dut.get_core_list(self.default_cores)
else:
core_list = self.dut.get_core_list(cores, socket)
--
1.9.3
^ permalink raw reply [flat|nested] 6+ messages in thread
* [dts] [PATCH 5/5] Skip setup host target when virtual scenario module has done it
2015-07-16 13:54 [dts] [PATCH 0/5] support virutal scenario that host drived by dpdk Yong Liu
` (3 preceding siblings ...)
2015-07-16 13:54 ` [dts] [PATCH 4/5] Support start testpmd with assigned core list Yong Liu
@ 2015-07-16 13:54 ` Yong Liu
4 siblings, 0 replies; 6+ messages in thread
From: Yong Liu @ 2015-07-16 13:54 UTC (permalink / raw)
To: dts
From: Marvin Liu <yong.liu@intel.com>
Signed-off-by: Marvin Liu <yong.liu@intel.com>
diff --git a/framework/dts.py b/framework/dts.py
index 6e38cac..cc3744b 100644
--- a/framework/dts.py
+++ b/framework/dts.py
@@ -301,7 +301,9 @@ def dts_run_target(crbInst, targets, test_suites, nic, scenario):
try:
if scene:
scene.set_target(target)
- dut.set_target(target, bind_dev=False)
+ # skip set_target when host has been setup by scenario
+ if not scene.host_bound:
+ dut.set_target(target, bind_dev=False)
else:
dut.set_target(target)
except AssertionError as ex:
--
1.9.3
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-07-16 13:55 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-07-16 13:54 [dts] [PATCH 0/5] support virutal scenario that host drived by dpdk Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 1/5] Support virtualization scenario that use dpdk as host PF driver Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 2/5] Add dpdk host virtualization scenario configuration file Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 3/5] Add new exception type for dpdk host environment failure Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 4/5] Support start testpmd with assigned core list Yong Liu
2015-07-16 13:54 ` [dts] [PATCH 5/5] Skip setup host target when virtual scenario module has done it Yong Liu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).