From: Lijuan Tu <lijuanx.a.tu@intel.com>
To: dts@dpdk.org
Cc: Lijuan Tu <lijuanx.a.tu@intel.com>
Subject: [dts] [PATCH V1] framework: add kill qemu script. If vm not quit normally, VF will not released. and this will cause next testsuite failed.
Date: Mon, 9 Jan 2017 14:05:20 +0800 [thread overview]
Message-ID: <1483941920-33564-1-git-send-email-lijuanx.a.tu@intel.com> (raw)
Signed-off-by: Lijuan Tu <lijuanx.a.tu@intel.com>
---
framework/dut.py | 24 ++++++++++++++++++++++++
framework/qemu_kvm.py | 30 ++++++++++++++++++++++++++++++
framework/test_case.py | 6 ++++++
3 files changed, 60 insertions(+)
diff --git a/framework/dut.py b/framework/dut.py
index 1d4a383..9500107 100644
--- a/framework/dut.py
+++ b/framework/dut.py
@@ -73,6 +73,8 @@ class Dut(Crb):
self.conf = PortConf()
self.ports_map = []
self.virt_pool = None
+ # hypervisor pid list, used for cleanup
+ self.virt_pids = []
def init_host_session(self):
if self.host_init_flag:
@@ -816,6 +818,17 @@ class Dut(Crb):
pci = self.ports_info[port_id]['pci']
self.virt_pool.del_vf_on_pf(pf_pci=pci, vflist=vflist)
+ def destroy_all_sriov_vfs(self):
+
+ if self.ports_info == None:
+ return
+ for port_id in (0,len(self.ports_info)-1):
+ print port_id
+ self.destroy_sriov_vfs_by_port(port_id)
+ # know issue: nic up
+ intf = self.ports_info[port_id]['intf']
+ self.send_expect("ethtool -s %s autoneg on" % intf, "# ")
+
def get_vm_core_list(self):
return VMCORELIST[self.crb['VM CoreList']]
@@ -966,6 +979,17 @@ class Dut(Crb):
if self.host_init_flag:
self.host_session.close()
+ def virt_exit(self):
+ """
+ Stop all unstopped hypervisors process
+ """
+ # try to kill all hypervisor process
+ for pid in self.virt_pids:
+ print "kill %d" % pid
+ self.send_expect("kill -s SIGTERM %d" % pid, "# ", alt_session=True)
+ time.sleep(3)
+ self.virt_pids = []
+
def crb_exit(self):
"""
Recover all resource before crb exit
diff --git a/framework/qemu_kvm.py b/framework/qemu_kvm.py
index e9d29cc..79e8417 100644
--- a/framework/qemu_kvm.py
+++ b/framework/qemu_kvm.py
@@ -105,6 +105,7 @@ class QEMUKvm(VirtBase):
def set_vm_default(self):
self.set_vm_name(self.vm_name)
self.set_vm_enable_kvm()
+ self.set_vm_pid_file()
self.set_vm_qga()
self.set_vm_daemon()
self.set_vm_monitor()
@@ -244,6 +245,25 @@ class QEMUKvm(VirtBase):
enable_kvm_boot_line = '-enable-kvm'
self.__add_boot_line(enable_kvm_boot_line)
+ def set_vm_pid_file(self):
+ """
+ Set VM pidfile option for manage qemu process
+ """
+ self.__pid_file = '/tmp/.%s.pid' % self.vm_name
+ index = self.find_option_index('pid_file')
+ if index:
+ self.params[index] = {'pid_file': [{'name': '%s' % self.__pid_file}]}
+ else:
+ self.params.append({'pid_file': [{'name': '%s' % self.__pid_file}]})
+
+ def add_vm_pid_file(self, **options):
+ """
+ 'name' : '/tmp/.qemu_vm0.pid'
+ """
+ if 'name' in options.keys():
+ self.__add_boot_line('-pidfile %s' % options['name'])
+
+
def set_vm_name(self, vm_name):
"""
Set VM name.
@@ -1155,6 +1175,16 @@ class QEMUKvm(VirtBase):
else:
self.vm_status = ST_UNKNOWN
+ info = self.host_session.send_expect('cat %s' % self.__pid_file, "# ")
+ try:
+ pid = int(info)
+ # save pid into dut structure
+ self.host_dut.virt_pids.append(pid)
+ except:
+ self.host_logger.info("Failed to capture pid!!!")
+
+
+
def __strip_guest_pci(self):
"""
Strip all pci-passthrough device information, based on qemu monitor
diff --git a/framework/test_case.py b/framework/test_case.py
index 85fdb70..270f7b9 100644
--- a/framework/test_case.py
+++ b/framework/test_case.py
@@ -335,6 +335,12 @@ class TestCase(object):
dutobj.kill_all()
self.tester.kill_all()
+ for dutobj in self.duts:
+ dutobj.virt_exit()
+ # destroy all vfs
+ dutobj.destroy_all_sriov_vfs()
+
+
def wirespeed(self, nic, frame_size, num_ports):
"""
Calculate bit rate. It is depended for NICs
--
1.9.3
next reply other threads:[~2017-01-09 6:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-09 6:05 Lijuan Tu [this message]
2017-01-12 1:42 ` Liu, Yong
2017-01-12 3:16 ` Tu, LijuanX A
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1483941920-33564-1-git-send-email-lijuanx.a.tu@intel.com \
--to=lijuanx.a.tu@intel.com \
--cc=dts@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).