From patchwork Mon Dec 12 03:18:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ling, WeiX" X-Patchwork-Id: 120737 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id EF9BEA04FD; Mon, 12 Dec 2022 04:25:33 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9226640684; Mon, 12 Dec 2022 04:25:33 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id A507F40151 for ; Mon, 12 Dec 2022 04:25:31 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1670815531; x=1702351531; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=pKm01Ws7aLHBFSgyZu1caN7QY9Ru9QfySACiOb+yuzQ=; b=Rs8glE/ABDfIAdOIKs3QRo9kqhHnviiCubNiFqmJaXbrbe56FuEqfQg8 9cq0DCTr3PeIXFyoxQ1RwcvfibYb+v4Q2iLoq7lk+qqNemMbS2pr6mk2N 4VqFB25RIuOzOEIq7t/87pbbD2PcNjUdK9V9LI3D8xVGj2ewPXcBQp1ti iH6yVpPRdiImtu+yzbUWOeb22xaXlWrLROYy8n6ZFTfH2B+X1VxuuwRLy +rWy37foZtJ+r1Ni6cMdHs0XQimU2gwT2uXKI+BaejQ5Tk8+8aoWQNzpz KVBeTsyBACjTBLRZ8rpjYL7s+zGOrPnKnNnZakIGyispApEimIGUrhQWN w==; X-IronPort-AV: E=McAfee;i="6500,9779,10558"; a="319614882" X-IronPort-AV: E=Sophos;i="5.96,237,1665471600"; d="scan'208";a="319614882" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Dec 2022 19:25:30 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10558"; a="680536719" X-IronPort-AV: E=Sophos;i="5.96,237,1665471600"; d="scan'208";a="680536719" Received: from unknown (HELO localhost.localdomain) ([10.239.252.222]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Dec 2022 19:25:29 -0800 From: Wei Ling To: dts@dpdk.org Cc: Wei Ling Subject: [dts][PATCH V4 1/2] framework/qemu_kvm: support pin VM's thread to vhost CPU lcore Date: Mon, 12 Dec 2022 11:18:15 +0800 Message-Id: <20221212031815.2777354-1-weix.ling@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org 1)Support pin VM's thread to vhost CPU lcore. 2)Fix add_vm_daemon method issue. Signed-off-by: Wei Ling --- framework/qemu_kvm.py | 50 ++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/framework/qemu_kvm.py b/framework/qemu_kvm.py index 20aa8008..0efe286c 100644 --- a/framework/qemu_kvm.py +++ b/framework/qemu_kvm.py @@ -1241,7 +1241,7 @@ class QEMUKvm(VirtBase): By default VM will start with the daemonize status. Not support starting it on the stdin now. """ - if "daemon" in list(options.keys()) and options["enable"] == "no": + if "enable" in list(options.keys()) and options["enable"] == "no": pass else: daemon_boot_line = "-daemonize" @@ -1365,7 +1365,7 @@ class QEMUKvm(VirtBase): self.migrate_port = int(m.group(1)) - def _start_vm(self): + def _start_vm(self, pin_threads=True): """ Start VM. """ @@ -1377,6 +1377,11 @@ class QEMUKvm(VirtBase): self.__get_pci_mapping() + # pin VM threads with host CPU cores + if pin_threads: + lcores = self.vcpus_pinned_to_vm.split(" ") + self.pin_threads(lcores=lcores) + # query status self.update_status() @@ -1385,7 +1390,7 @@ class QEMUKvm(VirtBase): # when vm is waiting for migration, can't ping if self.vm_status is not ST_PAUSE: - self.__wait_vm_ready() + self.__wait_vm_ready(pin_threads=pin_threads) self.__wait_vmnet_ready() @@ -1445,7 +1450,7 @@ class QEMUKvm(VirtBase): return logged_in - def __wait_vm_ready(self): + def __wait_vm_ready(self, pin_threads=True): logged_in = self.__ping_vm() if not logged_in: if not self.restarted: @@ -1454,7 +1459,7 @@ class QEMUKvm(VirtBase): self.vm_status = ST_NOTSTART self._stop_vm() self.restarted = True - self._start_vm() + self._start_vm(pin_threads=pin_threads) else: raise StartVMFailedException( "Not response in %d seconds!!!" % self.START_TIMEOUT @@ -2003,14 +2008,33 @@ class QEMUKvm(VirtBase): def pin_threads(self, lcores): """ - Pin thread to assigned cores + Pin thread to assigned cores. + If threads <= lcores, like: threads=[427756, 427757], lcores=[48, 49, 50]: + taskset -pc 48 427756 + taskset -pc 49 427757 + + If threads > lcores, like threads=[427756, 427757, 427758, 427759, 427760], lcores=[48,49,50] + taskset -pc 48 427756 + taskset -pc 49 427757 + taskset -pc 50 427758 + taskset -pc 48 427759 + taskset -pc 49 427760 """ - thread_reg = r"CPU #(\d+): .* thread_id=(\d+)" + thread_reg = r"CPU #\d+: thread_id=(\d+)" output = self.__monitor_session("info", "cpus") - thread_cores = re.findall(thread_reg, output) - cores_map = list(zip(thread_cores, lcores)) - for thread_info, core_id in cores_map: - cpu_id, thread_id = thread_info - self.host_session.send_expect( - "taskset -pc %d %s" % (core_id, thread_id), "#" + threads = re.findall(thread_reg, output) + if len(threads) <= len(lcores): + map = list(zip(threads, lcores)) + else: + self.host_logger.warning( + "lcores is less than threads, please check the 'number' and 'cpupin' config." ) + lcore_len = len(lcores) + for item in threads: + thread_idx = threads.index(item) + if thread_idx >= lcore_len: + lcore_idx = thread_idx % lcore_len + lcores.append(lcores[lcore_idx]) + map = list(zip(threads, lcores)) + for thread, lcore in map: + self.host_session.send_expect("taskset -pc %s %s" % (lcore, thread), "#") From patchwork Mon Dec 12 03:18:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Ling, WeiX" X-Patchwork-Id: 120738 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1D80DA04FD; Mon, 12 Dec 2022 04:25:42 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 18DBD40395; Mon, 12 Dec 2022 04:25:42 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id A500540151 for ; Mon, 12 Dec 2022 04:25:40 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1670815540; x=1702351540; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=Tf/hNkofipjBfretT9eVx6nkBcaxv+6KhQgH2/jN7f8=; b=CWq89TAekUiP/3HfUUpMR6PdXPM9SHCJagJ/HH3yY43lOWoRl49NpAm/ 2Nt214soi0IBxU7bsHkmdmW54ep8i9A91RP+aeYOkqvY6wlfHwlYcsfr6 tE/Z2vW6tQnkAd9FEkRWHwdZt3IFg2XQ+PZTPWDBojA/2MwizBJLCzhIY i7pNnUYa8cUjozoeFXwTGQC/a+n4JxnoxBomR+Yu50nWdqOyD+8pDcARi xLL4XAJOiUXyrFClFLNUpf4XGosM0LjCCIoeh068qGOjxoUe4E4/ifHFt CeZQt70t/R+4aRfp1BLO2MFOxQRs8D+tOoFwSw8zX0TR9Ou5QKEe94tJb g==; X-IronPort-AV: E=McAfee;i="6500,9779,10558"; a="319614888" X-IronPort-AV: E=Sophos;i="5.96,237,1665471600"; d="scan'208";a="319614888" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Dec 2022 19:25:39 -0800 X-IronPort-AV: E=McAfee;i="6500,9779,10558"; a="680536740" X-IronPort-AV: E=Sophos;i="5.96,237,1665471600"; d="scan'208";a="680536740" Received: from unknown (HELO localhost.localdomain) ([10.239.252.222]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Dec 2022 19:25:38 -0800 From: Wei Ling To: dts@dpdk.org Cc: Wei Ling Subject: [dts][PATCH V4 2/2] framework/virt_base: add pin_threads parameter when start VM Date: Mon, 12 Dec 2022 11:18:24 +0800 Message-Id: <20221212031824.2777414-1-weix.ling@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dts-bounces@dpdk.org Add pin_threads parameter when start VM default pin_threads=True Signed-off-by: Wei Ling --- framework/virt_base.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/framework/virt_base.py b/framework/virt_base.py index a7fc8c4e..04b712e1 100644 --- a/framework/virt_base.py +++ b/framework/virt_base.py @@ -273,7 +273,14 @@ class VirtBase(object): self._attach_vm() return None - def start(self, load_config=True, set_target=True, cpu_topo="", bind_dev=True): + def start( + self, + load_config=True, + set_target=True, + cpu_topo="", + bind_dev=True, + pin_threads=True, + ): """ Start VM and instantiate the VM with VirtDut. """ @@ -284,7 +291,7 @@ class VirtBase(object): self.compose_boot_param() # start virtual machine - self._start_vm() + self._start_vm(pin_threads=pin_threads) if self.vm_status is ST_RUNNING: # connect vm dut and init running environment @@ -382,7 +389,7 @@ class VirtBase(object): else: return False - def _start_vm(self): + def _start_vm(self, pin_threads=True): """ Start VM. """