From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 246F21E2B for ; Mon, 9 Jan 2017 07:04:16 +0100 (CET) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga101.fm.intel.com with ESMTP; 08 Jan 2017 22:04:15 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.33,339,1477983600"; d="scan'208";a="27855994" Received: from unknown (HELO dpdk-fedora20.icx.intel.com) ([10.240.176.135]) by orsmga002.jf.intel.com with ESMTP; 08 Jan 2017 22:04:14 -0800 From: Lijuan Tu To: dts@dpdk.org Cc: Lijuan Tu Date: Mon, 9 Jan 2017 14:05:20 +0800 Message-Id: <1483941920-33564-1-git-send-email-lijuanx.a.tu@intel.com> X-Mailer: git-send-email 1.9.3 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. X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 09 Jan 2017 06:04:17 -0000 Signed-off-by: Lijuan Tu --- 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