From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id D0267A0350; Tue, 30 Jun 2020 09:03:32 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 128DD1BE9D; Tue, 30 Jun 2020 09:03:32 +0200 (CEST) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by dpdk.org (Postfix) with ESMTP id C4DF01BE9D for ; Tue, 30 Jun 2020 09:03:29 +0200 (CEST) Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20200630070328euoutp01692e82d67e9db64fd49d5ae7400deb75~dQFxzQj4b0848708487euoutp01V for ; Tue, 30 Jun 2020 07:03:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20200630070328euoutp01692e82d67e9db64fd49d5ae7400deb75~dQFxzQj4b0848708487euoutp01V DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1593500609; bh=oU+yr0z51qiJ+PLUb2XgMsG0zb0icMm/LegxNWPcMWE=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=BucN+VEMmrk8zTlr2q+yNWxU3vk6T13M6gkNJ+nNDGf0uF7OXVBqoAWmRrIhyB7wp ixX11ZHTo/2Eu9G2541aT0G5SZsQ2UZvYF1dFr6CTwROJb85Zw6A7zemNb9Yq8TtD0 FO18Fx+GYTUe7Wjj7duR5Ycd+KYs5FWagizv9j0M= Received: from eusmges2new.samsung.com (unknown [203.254.199.244]) by eucas1p2.samsung.com (KnoxPortal) with ESMTP id 20200630070328eucas1p2b1756e665238277f2626a741b9538c82~dQFxpnjVL3006030060eucas1p2M; Tue, 30 Jun 2020 07:03:28 +0000 (GMT) Received: from eucas1p1.samsung.com ( [182.198.249.206]) by eusmges2new.samsung.com (EUCPMTA) with SMTP id E4.BC.05997.0C3EAFE5; Tue, 30 Jun 2020 08:03:28 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20200630070328eucas1p20ae44b10d43bc945a8b0fe180cc2a990~dQFw8n_jj2927829278eucas1p2Z; Tue, 30 Jun 2020 07:03:28 +0000 (GMT) Received: from eusmgms1.samsung.com (unknown [182.198.249.179]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20200630070328eusmtrp136a623115099fe480e4c4cef02a479e5~dQFw74ZIs1839718397eusmtrp1L; Tue, 30 Jun 2020 07:03:28 +0000 (GMT) X-AuditID: cbfec7f4-677ff7000000176d-36-5efae3c08711 Received: from eusmtip1.samsung.com ( [203.254.199.221]) by eusmgms1.samsung.com (EUCPMTA) with SMTP id 68.31.06314.FB3EAFE5; Tue, 30 Jun 2020 08:03:27 +0100 (BST) Received: from [106.109.129.29] (unknown [106.109.129.29]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20200630070327eusmtip13b02a4dc9cb39b9d59039877710806d7~dQFwFw3FK3265432654eusmtip10; Tue, 30 Jun 2020 07:03:27 +0000 (GMT) To: dkirichok@iol.unh.edu, dts@dpdk.org Cc: mb@smartsharesystems.com, lylavoie@iol.unh.edu, thomas@monjalon.net, dev@dpdk.org, david.marchand@redhat.com, ferruh.yigit@intel.com, arybchenko@solarflare.com, rasland@mellanox.com, j.hendergart@f5.com, ohilyard@iol.unh.edu From: Ivan Dyukov Message-ID: Date: Tue, 30 Jun 2020 10:03:26 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20200629202859.6436-1-dkirichok@iol.unh.edu> Content-Transfer-Encoding: 8bit Content-Language: ru-RU X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrOKsWRmVeSWpSXmKPExsWy7djPc7oHHv+KM9izRs/iwZS7bBbbV3Sx Wbz7tJ3J4uOD8+wWXx52MFnc2Xua3WLr24msFs2L1rFY9P26ymjxv2M9i8XX07PZLD49OMHi wOPxa8FSVo8l8/cyeSze85LJY//iGSwez6YfZvI4dnMau8f7fVfZPE496mb2WP3kB1sAZxSX TUpqTmZZapG+XQJXxolTe1kLfhZUrJuS3MD4P6yLkZNDQsBE4vOxmSxdjFwcQgIrGCX+XW5l hHC+MEq0zr/GDuF8ZpR4s+g0O0zLt23X2CASyxklFh6dAdX/Hqhq/lpmkCphAW+J1nmfmEBs EQF1iTvzLjCDFDELvGKUWN+9ngUkwSagIXG6Yx5YEa+AnUTHgx1gcRYBVYk1G46A2aICERL/ Jz1mgagRlDg58wmYzSlgJXFr6iQ2EJtZQF6ieetsZghbXOLD9oNg50kIfGWXeDjvHRPE3S4S G+9vgvpBWOLV8S1QtozE6ck9LBB2tcT3TdfZIZo7GCXuLWqFKrKX2PL6HJDNAbRBU2L9Ln0Q U0LAUWLRDV8Ik0/ixltBiBP4JCZtm84MEeaV6GgTgpihJHHg5CWosITE3988ExiVZiH5axaS X2Yh+WUWwtYFjCyrGMVTS4tz01OLjfJSy/WKE3OLS/PS9ZLzczcxApPb6X/Hv+xg3PUn6RCj AAejEg9vwrmfcUKsiWXFlbmHGCU4mJVEeJ3Ono4T4k1JrKxKLcqPLyrNSS0+xCjNwaIkzmu8 6GWskEB6YklqdmpqQWoRTJaJg1OqgXGW7t1ZFhNFShfL8+X/dfZ/GBX4eLWUaf6Lu7pSLBdC 91d+3C3frDrf1SbigPoH6W/XDlY7pdgx6H96MWvX0/4anxVP6w2aZ1xwbDH/fTdswx+Z8trU qQ+mWDdt/6P9LzWhUVdwzk7jFdXHDmjcU703de+1ov69djt/8jV6THxz/plxS/vvmntKLMUZ iYZazEXFiQDAqFc1agMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrFIsWRmVeSWpSXmKPExsVy+t/xu7r7H/+KM3jTZmXxYMpdNovtK7rY LN592s5k8fHBeXaLLw87mCzu7D3NbrH17URWi+ZF61gs+n5dZbT437GexeLr6dlsFp8enGBx 4PH4tWApq8eS+XuZPBbvecnksX/xDBaPZ9MPM3kcuzmN3eP9vqtsHqcedTN7rH7ygy2AM0rP pii/tCRVISO/uMRWKdrQwkjP0NJCz8jEUs/Q2DzWyshUSd/OJiU1J7MstUjfLkEv48SpvawF Pwsq1k1JbmD8H9bFyMkhIWAi8W3bNbYuRi4OIYGljBJXZpxl7GLkAEpISLx+wgxRIyzx51oX VM1bRolX53+xgiSEBbwlWud9YgKxRQTUJe7MuwDWwCzwilFi82Z7iIZeRomWd5fBEmwCGhKn O+aBNfAK2El0PNjBAmKzCKhKrNlwBMwWFYiQ+HzwCBtEjaDEyZlPwOKcAlYSt6ZOYoNYYCYx b/NDqGXyEs1bZ0PZ4hIfth9km8AoNAtJ+ywkLbOQtMxC0rKAkWUVo0hqaXFuem6xoV5xYm5x aV66XnJ+7iZGYDxvO/Zz8w7GSxuDDzEKcDAq8fAmnPsZJ8SaWFZcmXuIUYKDWUmE1+ns6Tgh 3pTEyqrUovz4otKc1OJDjKZAz01klhJNzgemmrySeENTQ3MLS0NzY3NjMwslcd4OgYMxQgLp iSWp2ampBalFMH1MHJxSDYx5R/v73wppCRkf3dEkbi4auKSg6BB/vrJy2auF5x/cjJIL3ZJu LT5bxFSz+TTX7zWLp362fnhaRePvNP9izjmPnTSvn/67fo3R/v0pXybZav2dx1q+0o+ve1uG moNdzcVcj4cp2xdb5rxWY+uQqm78EO81x3jnqrCfl2uf/zvrq/e1t/Ehb4gSS3FGoqEWc1Fx IgAUhwId/QIAAA== X-CMS-MailID: 20200630070328eucas1p20ae44b10d43bc945a8b0fe180cc2a990 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20200629202931eucas1p10789da6c8ee5aadb2faa576f47ea3b07 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20200629202931eucas1p10789da6c8ee5aadb2faa576f47ea3b07 References: <20200629202859.6436-1-dkirichok@iol.unh.edu> Subject: Re: [dpdk-dev] [PATCH] speed-capabilities: Added Speed Capabilities test case X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Daniel, 29.06.2020 23:28, dkirichok@iol.unh.edu пишет: > From: Daniel Kirichok > > Added test case for checking speed capabilities. > > Signed-off-by: Daniel Kirichok > --- > conf/speed_capabilities.cfg | 4 + I would prefer separate file for every supported device. i.e.  conf/i40e_speed_capabilities.cfg, conf/mlx5_speed_capabilities.cfg etc. and one test setup config with device:capabilities mapping. e.g. conf/speed_capabilities_setup.cfg     eth0 = i40e     eth1 = mlx5 > test_plans/speed_capabilities_test_plan.rst | 84 ++++++++++++++ > tests/TestSuite_speed_capabilities.py | 120 ++++++++++++++++++++ > 3 files changed, 208 insertions(+) > create mode 100644 conf/speed_capabilities.cfg > create mode 100644 test_plans/speed_capabilities_test_plan.rst > create mode 100644 tests/TestSuite_speed_capabilities.py > > diff --git a/conf/speed_capabilities.cfg b/conf/speed_capabilities.cfg > new file mode 100644 > index 0000000..c22f531 > --- /dev/null > +++ b/conf/speed_capabilities.cfg > @@ -0,0 +1,4 @@ > +[suite] > +# The format for entering expected speeds is {'':'',...} speed capability is not a value of speed. It's set of values. format should be something like that: {'':['', ''], ...} > +# Unit for speed must be in G or M > +expected_speeds={'interface1': '10G', 'interface2': '100M'} > diff --git a/test_plans/speed_capabilities_test_plan.rst b/test_plans/speed_capabilities_test_plan.rst > new file mode 100644 > index 0000000..2821612 > --- /dev/null > +++ b/test_plans/speed_capabilities_test_plan.rst > @@ -0,0 +1,84 @@ > +.. # BSD LICENSE > + # > + # Copyright(c) 2010-2014 Intel Corporation. All rights reserved. > + # Copyright © 2018[, 2019] The University of New Hampshire. All rights reserved. > + # All rights reserved. > + # > + # Redistribution and use in source and binary forms, with or without > + # modification, are permitted provided that the following conditions > + # are met: > + # > + # * Redistributions of source code must retain the above copyright > + # notice, this list of conditions and the following disclaimer. > + # * Redistributions in binary form must reproduce the above copyright > + # notice, this list of conditions and the following disclaimer in > + # the documentation and/or other materials provided with the > + # distribution. > + # * Neither the name of Intel Corporation nor the names of its > + # contributors may be used to endorse or promote products derived > + # from this software without specific prior written permission. > + # > + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > + # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > + # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > + # 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. > + > +======================= > +Speed Capabilities Test > +======================= > + > +The Speed Capabilities Test checks the speeds that the device lists and compares > +it to a user-defined set of expected speeds set in the ``speed_capabilities.cfg``. > + > +Prerequisites > +============= > + > +If using vfio the kernel must be >= 3.6+ and VT-d must be enabled in bios.When > +using vfio, use the following commands to load the vfio driver and bind it > +to the device under test:: > + > + modprobe vfio > + modprobe vfio-pci > + usertools/dpdk-devbind.py --bind=vfio-pci device_bus_id > + > +Assuming that ports ``0`` and ``1`` of the test target are directly connected > +to the traffic generator, launch the ``testpmd`` application with the following > +arguments:: > + > + ./build/app/testpmd -- -i --portmask=0x3 > + > +Start packet forwarding in the ``testpmd`` application with the ``start`` > +command. Then, for each port on the target make the Traffic Generator > +transmit a packet to the port of arbitrary size less than the MTU of > +the target port, checking that the same amount of frames and bytes > +are received back by the Traffic Generator from the port. > + > +Ensure that the ``speed_capabilities.cfg`` file correctly reflects the speeds > +the device is expected to run at. > + > + > +Test Case : Speed Capabilities Test > +=================================== > + > +1. Use testpmd to retrieve the speed information that the interface is linked at:: > + > + testpmd> show port info I'm afraid that testpmd don't show speed_capa value. It shows only link_speed value. to get speed_capa values you should write new ethtool-like application for dpdk interfaces. Note that speed_capa is bitmap value and it's part of rte_eth_dev_info struct.  269  * Device supported speeds bitmap flags  270  */  271 #define ETH_LINK_SPEED_AUTONEG  (0 <<  0)  /**< Autonegotiate (all speeds) */  272 #define ETH_LINK_SPEED_FIXED    (1 <<  0)  /**< Disable autoneg (fixed speed) */  273 #define ETH_LINK_SPEED_10M_HD   (1 <<  1)  /**< 10 Mbps half-duplex */  274 #define ETH_LINK_SPEED_10M      (1 <<  2)  /**< 10 Mbps full-duplex */  275 #define ETH_LINK_SPEED_100M_HD  (1 <<  3)  /**< 100 Mbps half-duplex */  276 #define ETH_LINK_SPEED_100M     (1 <<  4)  /**< 100 Mbps full-duplex */  277 #define ETH_LINK_SPEED_1G       (1 <<  5)  /**< 1 Gbps */  278 #define ETH_LINK_SPEED_2_5G     (1 <<  6)  /**< 2.5 Gbps */  279 #define ETH_LINK_SPEED_5G       (1 <<  7)  /**< 5 Gbps */  280 #define ETH_LINK_SPEED_10G      (1 <<  8)  /**< 10 Gbps */  281 #define ETH_LINK_SPEED_20G      (1 <<  9)  /**< 20 Gbps */  282 #define ETH_LINK_SPEED_25G      (1 << 10)  /**< 25 Gbps */  283 #define ETH_LINK_SPEED_40G      (1 << 11)  /**< 40 Gbps */  284 #define ETH_LINK_SPEED_50G      (1 << 12)  /**< 50 Gbps */  285 #define ETH_LINK_SPEED_56G      (1 << 13)  /**< 56 Gbps */  286 #define ETH_LINK_SPEED_100G     (1 << 14)  /**< 100 Gbps */  287 #define ETH_LINK_SPEED_200G     (1 << 15)  /**< 200 Gbps */ but link_speed is speed values. it's part of rte_eth_link struct.  289 /**  290  * Ethernet numeric link speeds in Mbps  291  */  292 #define ETH_SPEED_NUM_NONE         0 /**< Not defined */  293 #define ETH_SPEED_NUM_10M         10 /**<  10 Mbps */  294 #define ETH_SPEED_NUM_100M       100 /**< 100 Mbps */  295 #define ETH_SPEED_NUM_1G        1000 /**<   1 Gbps */  296 #define ETH_SPEED_NUM_2_5G      2500 /**< 2.5 Gbps */  297 #define ETH_SPEED_NUM_5G        5000 /**<   5 Gbps */  298 #define ETH_SPEED_NUM_10G      10000 /**<  10 Gbps */  299 #define ETH_SPEED_NUM_20G      20000 /**<  20 Gbps */  300 #define ETH_SPEED_NUM_25G      25000 /**<  25 Gbps */  301 #define ETH_SPEED_NUM_40G      40000 /**<  40 Gbps */  302 #define ETH_SPEED_NUM_50G      50000 /**<  50 Gbps */  303 #define ETH_SPEED_NUM_56G      56000 /**<  56 Gbps */  304 #define ETH_SPEED_NUM_100G    100000 /**< 100 Gbps */  305 #define ETH_SPEED_NUM_200G    200000 /**< 200 Gbps */  306 #define ETH_SPEED_NUM_UNKNOWN UINT32_MAX /**< Unknown */ Best regards, Ivan > + > +2. Compares the speed value against the rate in the speed_capabilities.cfg file. > + The supported options for expected speeds are 1G, 10G, 25G, 40G, and 100G. Each interface must have an expected speed associated with it. > + Example file below:: > + > + [suite] > + expected_speeds={'interface1': '10G', 'interface2': '100M'} > + > + > +3. Verifies that the speeds matches accordingly. > + > +4. Repeats the verification for each NIC and interface found on the system. > diff --git a/tests/TestSuite_speed_capabilities.py b/tests/TestSuite_speed_capabilities.py > new file mode 100644 > index 0000000..25c45e4 > --- /dev/null > +++ b/tests/TestSuite_speed_capabilities.py > @@ -0,0 +1,120 @@ > +# BSD LICENSE > +# > +# Copyright(c) 2010-2014 Intel Corporation. All rights reserved. > +# Copyright © 2018[, 2019] The University of New Hampshire. All rights reserved. > +# All rights reserved. > +# > +# Redistribution and use in source and binary forms, with or without > +# modification, are permitted provided that the following conditions > +# are met: > +# > +# * Redistributions of source code must retain the above copyright > +# notice, this list of conditions and the following disclaimer. > +# * Redistributions in binary form must reproduce the above copyright > +# notice, this list of conditions and the following disclaimer in > +# the documentation and/or other materials provided with the > +# distribution. > +# * Neither the name of Intel Corporation nor the names of its > +# contributors may be used to endorse or promote products derived > +# from this software without specific prior written permission. > +# > +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > +# 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. > + > +""" > +DPDK Test suite. > +""" > +import utils > +from pmd_output import PmdOutput > +from test_case import TestCase > + > + > +class TestSpeedCapabilities(TestCase): > + def set_up_all(self): > + """ > + Run at the start of each test suite. > + """ > + self.ports = self.dut.get_ports() > + self.ports_socket = self.dut.get_numa_id(self.ports[0]) > + > + for port in self.ports: > + self.tester.send_expect(f"ifconfig {self.tester.get_interface(self.tester.get_local_port(port))} mtu 5000" > + , "# ") > + > + self.pmdout = PmdOutput(self.dut) > + self.vm_env_done = False > + > + def test_speed_capabilities(self): > + self.pmdout.start_testpmd("Default") > + > + cfg_content = self.get_suite_cfg() > + expected_speeds = cfg_content.get('expected_speeds') > + > + detected_interfaces = [] > + > + for port in self.ports: > + interface_name = self.tester.get_interface(self.tester.get_local_port(port)) > + > + # Gives the speed in Mb/s > + interface_speed = self.pmdout.get_port_link_speed(port) > + > + self.verify(interface_name in expected_speeds, f"The interface {interface_name} does not have an expected " > + f"speed associated with it.") > + > + detected_interfaces.append(interface_name) > + > + expected_speed = expected_speeds[interface_name] > + > + # Isolates the unit (Either M or G) > + expected_speed_unit = ''.join(i for i in expected_speed if not i.isdigit()) > + > + # Removes the unit from the speed > + expected_speed = ''.join(i for i in expected_speed if i.isdigit()) > + > + self.verify(len(interface_speed) > 0, > + f"A valid speed could not be read for the interface {interface_name}.") > + > + # Converts Gb/s to Mb/s for consistent comparison > + if expected_speed_unit == "G": > + expected_speed += "000" > + > + self.verify(interface_speed == expected_speed, > + f"Detected speed: {interface_speed} Mb/s for the interface {interface_name}, " > + f"but expected speed: {expected_speed} Mb/s") > + > + for key, value in expected_speeds.items(): > + self.verify(key in detected_interfaces, f"The interface {key} expected the speed {value} in " > + "speed_capabilities.cfg file, but it did not detect that interface.") > + > + def tear_down(self): > + """ > + Run after each test case. > + """ > + self.dut.kill_all() > + self.pmdout.start_testpmd("Default", "--portmask=%s --port-topology=loop" % utils.create_mask(self.ports), > + socket=self.ports_socket) > + ports_num = len(self.ports) > + # link up test, to avoid failing further tests if link was down > + for i in range(ports_num): > + # sometimes output text messing up testpmd prompt so trimmed prompt > + self.dut.send_expect("set link-up port %d" % i, ">") > + # start ports, to avoid failing further tests if ports are stopped > + self.dut.send_expect("port start all", "testpmd> ", 100) > + self.dut.send_expect("quit", "# ") > + > + def tear_down_all(self): > + """ > + Run after each test suite. > + """ > + if self.vm_env_done: > + self.destroy_vm_env() > + self.dut.kill_all()