X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FQemuUtils.py;h=3ba64f0dbfe9d01a5848bcec8db0a1562e9aca0d;hb=4e6931725c37f3242a689deb12ab2b01bc6705fe;hp=b1b6008f4e2a08ebad1522db195eceaae2a36b8c;hpb=35bbc3657be85c9653f3cbf6e73e722588c392ea;p=csit.git diff --git a/resources/libraries/python/QemuUtils.py b/resources/libraries/python/QemuUtils.py index b1b6008f4e..3ba64f0dbf 100644 --- a/resources/libraries/python/QemuUtils.py +++ b/resources/libraries/python/QemuUtils.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -68,14 +68,10 @@ class QemuUtils: self._opt[u"machine_args"] = \ u"virt,accel=kvm,usb=off,mem-merge=off,gic-version=3" self._opt[u"console"] = u"ttyAMA0" - self._opt[u"unsafe_iommu"] = u"echo Y > /sys/module/vfio/para" \ - u"meters/enable_unsafe_noiommu_mode" else: dpdk_target = u"x86_64-native" self._opt[u"machine_args"] = u"pc,accel=kvm,usb=off,mem-merge=off" self._opt[u"console"] = u"ttyS0" - self._opt[u"unsafe_iommu"] = u"" - self._testpmd_path = f"{Constants.QEMU_VM_DPDK}/" \ f"{dpdk_target}-linux-gcc/app" self._vm_info = { @@ -99,11 +95,11 @@ class QemuUtils: self._opt[u"vnf"] = vnf # Temporary files. self._temp = dict() - self._temp[u"pidfile"] = f"/var/run/qemu_{qemu_id}.pid" + self._temp[u"pidfile"] = f"/run/qemu_{qemu_id}.pid" if img == Constants.QEMU_VM_IMAGE: self._opt[u"vm_type"] = u"nestedvm" - self._temp[u"qmp"] = f"/var/run/qmp_{qemu_id}.sock" - self._temp[u"qga"] = f"/var/run/qga_{qemu_id}.sock" + self._temp[u"qmp"] = f"/run/qmp_{qemu_id}.sock" + self._temp[u"qga"] = f"/run/qga_{qemu_id}.sock" elif img == Constants.QEMU_VM_KERNEL: self._opt[u"img"], _ = exec_cmd_no_error( node, f"ls -1 {Constants.QEMU_VM_KERNEL}* | tail -1", @@ -231,14 +227,15 @@ class QemuUtils: vpp_config.add_cpu_main_core(u"0") if self._opt.get(u"smp") > 1: vpp_config.add_cpu_corelist_workers(f"1-{self._opt.get(u'smp')-1}") - vpp_config.add_dpdk_dev(u"0000:00:06.0", u"0000:00:07.0") - vpp_config.add_dpdk_dev_default_rxq(kwargs[u"queues"]) - vpp_config.add_dpdk_log_level(u"debug") - if not kwargs[u"jumbo_frames"]: - vpp_config.add_dpdk_no_multi_seg() - vpp_config.add_dpdk_no_tx_checksum_offload() - vpp_config.add_plugin(u"disable", [u"default"]) - vpp_config.add_plugin(u"enable", [u"dpdk_plugin.so"]) + vpp_config.add_plugin(u"disable", u"default") + if "virtio" not in self._opt.get(u'vnf'): + vpp_config.add_plugin(u"enable", u"dpdk_plugin.so") + vpp_config.add_dpdk_dev(u"0000:00:06.0", u"0000:00:07.0") + vpp_config.add_dpdk_dev_default_rxq(kwargs[u"queues"]) + vpp_config.add_dpdk_log_level(u"debug") + if not kwargs[u"jumbo_frames"]: + vpp_config.add_dpdk_no_multi_seg() + vpp_config.add_dpdk_no_tx_checksum_offload() vpp_config.write_config(startup) # Create VPP running configuration. @@ -258,15 +255,22 @@ class QemuUtils: :param kwargs: Key-value pairs to construct command line parameters. :type kwargs: dict """ + pmd_max_pkt_len = u"9200" if kwargs[u"jumbo_frames"] else u"1518" testpmd_cmd = DpdkUtil.get_testpmd_cmdline( eal_corelist=f"0-{self._opt.get(u'smp') - 1}", eal_driver=False, + eal_pci_whitelist0=u"0000:00:06.0", + eal_pci_whitelist1=u"0000:00:07.0", eal_in_memory=True, pmd_num_mbufs=16384, + pmd_fwd_mode=u"io", + pmd_nb_ports=u"2", + pmd_portmask=u"0x3", + pmd_max_pkt_len=pmd_max_pkt_len, + pmd_mbuf_size=u"16384", pmd_rxq=kwargs[u"queues"], pmd_txq=kwargs[u"queues"], pmd_tx_offloads='0x0', - pmd_disable_hw_vlan=False, pmd_nb_cores=str(self._opt.get(u"smp") - 1) ) @@ -278,18 +282,24 @@ class QemuUtils: :param kwargs: Key-value pairs to construct command line parameters. :type kwargs: dict """ + pmd_max_pkt_len = u"9200" if kwargs[u"jumbo_frames"] else u"1518" testpmd_cmd = DpdkUtil.get_testpmd_cmdline( eal_corelist=f"0-{self._opt.get(u'smp') - 1}", eal_driver=False, + eal_pci_whitelist0=u"0000:00:06.0", + eal_pci_whitelist1=u"0000:00:07.0", eal_in_memory=True, pmd_num_mbufs=16384, pmd_fwd_mode=u"mac", + pmd_nb_ports=u"2", + pmd_portmask=u"0x3", + pmd_max_pkt_len=pmd_max_pkt_len, + pmd_mbuf_size=u"16384", pmd_eth_peer_0=f"0,{kwargs[u'vif1_mac']}", pmd_eth_peer_1=f"1,{kwargs[u'vif2_mac']}", pmd_rxq=kwargs[u"queues"], pmd_txq=kwargs[u"queues"], pmd_tx_offloads=u"0x0", - pmd_disable_hw_vlan=False, pmd_nb_cores=str(self._opt.get(u"smp") - 1) ) @@ -327,8 +337,7 @@ class QemuUtils: self.create_kernelvm_config_testpmd_mac(**kwargs) else: raise RuntimeError(u"QEMU: Unsupported VNF!") - self.create_kernelvm_init(vnf_bin=self._opt.get(u"vnf_bin"), - unsafe_iommu=self._opt.get(u"unsafe_iommu")) + self.create_kernelvm_init(vnf_bin=self._opt.get(u"vnf_bin")) def get_qemu_pids(self): """Get QEMU CPU pids. @@ -430,7 +439,6 @@ class QemuUtils: f"addr={self._vhost_id+5}.0,mq=on,vectors={2 * queues + 2}," f"csum={u'on' if csum else u'off'},gso={u'on' if gso else u'off'}," f"guest_tso4=off,guest_tso6=off,guest_ecn=off," - f"mrg_rxbuf={u'on,host_mtu=9200' if jumbo_frames else u'off'}," f"{queue_size}" )