test suite reviews and discussions
 help / color / mirror / Atom feed
From: "Liu, Yong" <yong.liu@intel.com>
To: "Tu, LijuanX A" <lijuanx.a.tu@intel.com>, "dts@dpdk.org" <dts@dpdk.org>
Cc: "Tu, LijuanX A" <lijuanx.a.tu@intel.com>
Subject: Re: [dts] [PATCH v2] framework: add kill qemu script.
Date: Mon, 16 Jan 2017 02:12:25 +0000	[thread overview]
Message-ID: <86228AFD5BCD8E4EBFD2B90117B5E81E62D47832@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <1484285906-44003-1-git-send-email-lijuanx.a.tu@intel.com>

Thanks, applied into master branch with modified subject and comment.

> -----Original Message-----
> From: dts [mailto:dts-bounces@dpdk.org] On Behalf Of Lijuan Tu
> Sent: Friday, January 13, 2017 1:38 PM
> To: dts@dpdk.org
> Cc: Tu, LijuanX A <lijuanx.a.tu@intel.com>
> Subject: [dts] [PATCH v2] framework: add kill qemu script.
> 
> If vm not quit normally, VF will not released.
> and this will cause next testsuite failed.
> 
> Signed-off-by: Lijuan Tu <lijuanx.a.tu@intel.com>
> ---
>  framework/dut.py       | 19 +++++++++++++++++++
>  framework/qemu_kvm.py  | 30 ++++++++++++++++++++++++++++++
> framework/test_case.py |  6 ++++++
>  3 files changed, 55 insertions(+)
> 
> diff --git a/framework/dut.py b/framework/dut.py index 1d4a383..9cbdaf7
> 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,13 @@ 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 range(len(self.ports_info)):
> +            self.destroy_sriov_vfs_by_port(port_id)
> +
>      def get_vm_core_list(self):
>          return VMCORELIST[self.crb['VM CoreList']]
> 
> @@ -966,6 +975,16 @@ 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:
> +            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

      reply	other threads:[~2017-01-16  2:12 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-13  5:38 Lijuan Tu
2017-01-16  2:12 ` Liu, Yong [this message]

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=86228AFD5BCD8E4EBFD2B90117B5E81E62D47832@SHSMSX103.ccr.corp.intel.com \
    --to=yong.liu@intel.com \
    --cc=dts@dpdk.org \
    --cc=lijuanx.a.tu@intel.com \
    /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).