X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FQemuUtils.py;h=42ccb8c9dd049ce4856b0e34a13b3d7c8aff2309;hb=327cb5f515b06108992108ecc8e8b60b9529713f;hp=6426394bf461c35c2a742b12e115ee270384c6bc;hpb=c7eb2002bcd007520309feb3e11a26ff847a4e05;p=csit.git diff --git a/resources/libraries/python/QemuUtils.py b/resources/libraries/python/QemuUtils.py index 6426394bf4..42ccb8c9dd 100644 --- a/resources/libraries/python/QemuUtils.py +++ b/resources/libraries/python/QemuUtils.py @@ -29,7 +29,8 @@ class QemuUtils(object): def __init__(self, qemu_id=1): self._qemu_id = qemu_id # Path to QEMU binary. Use x86_64 by default - self._qemu_bin = '/usr/bin/qemu-system-x86_64' + self._qemu_path = '/usr/bin/' + self._qemu_bin = 'qemu-system-x86_64' # QEMU Machine Protocol socket self._qmp_sock = '/tmp/qmp{0}.sock'.format(self._qemu_id) # QEMU Guest Agent socket @@ -71,13 +72,13 @@ class QemuUtils(object): self._node = None self._socks = [self._qmp_sock, self._qga_sock] - def qemu_set_bin(self, path): + def qemu_set_path(self, path): """Set binary path for QEMU. :param path: Absolute path in filesystem. :type path: str """ - self._qemu_bin = path + self._qemu_path = path def qemu_set_smp(self, cpus, cores, threads, sockets): """Set SMP option for QEMU. @@ -189,18 +190,21 @@ class QemuUtils(object): self._vm_info['host'] = node['host'] arch = Topology.get_node_arch(node) - self._qemu_bin = '/usr/bin/qemu-system-{0}'.format(arch) + self._qemu_bin = 'qemu-system-{arch}'.format(arch=arch) - def qemu_add_vhost_user_if(self, socket, server=True, mac=None): + def qemu_add_vhost_user_if(self, socket, server=True, mac=None, + jumbo_frames=False): """Add Vhost-user interface. :param socket: Path of the unix socket. :param server: If True the socket shall be a listening socket. :param mac: Vhost-user interface MAC address (optional, otherwise is - used auto-generated MAC 52:54:00:00:xx:yy). + used auto-generated MAC 52:54:00:00:xx:yy). + :param jumbo_frames: Set True if jumbo frames are used in the test. :type socket: str :type server: bool :type mac: str + :type jumbo_frames: bool """ self._vhost_id += 1 # Create unix socket character device. @@ -220,7 +224,11 @@ class QemuUtils(object): mac = '52:54:00:00:{0:02x}:{1:02x}'.\ format(self._qemu_id, self._vhost_id) extend_options = 'mq=on,csum=off,gso=off,guest_tso4=off,'\ - 'guest_tso6=off,guest_ecn=off,mrg_rxbuf=off' + 'guest_tso6=off,guest_ecn=off' + if jumbo_frames: + extend_options += ",mrg_rxbuf=on" + else: + extend_options += ",mrg_rxbuf=off" # Create Virtio network device. device = ' -device virtio-net-pci,netdev=vhost{0},mac={1},{2}'.format( self._vhost_id, mac, extend_options) @@ -518,6 +526,9 @@ class QemuUtils(object): .. note:: First set at least node to run QEMU on. .. warning:: Starts only one VM on the node. """ + # Qemu binary path + bin_path = '{0}{1}'.format(self._qemu_path, self._qemu_bin) + # SSH forwarding ssh_fwd = '-net user,hostfwd=tcp::{0}-:22'.format( self._qemu_opt.get('ssh_fwd_port')) @@ -548,10 +559,10 @@ class QemuUtils(object): pid = '-pidfile {}'.format(self._pid_file) # Run QEMU - cmd = '{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10}'.format( - self._qemu_bin, self._qemu_opt.get('smp'), mem, ssh_fwd, - self._qemu_opt.get('options'), - drive, qmp, serial, qga, graphic, pid) + cmd = '{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10}'.format(bin_path, + self._qemu_opt.get('smp'), mem, ssh_fwd, + self._qemu_opt.get('options'), drive, qmp, serial, qga, graphic, + pid) try: (ret_code, _, _) = self._ssh.exec_command_sudo(cmd, timeout=300) if int(ret_code) != 0: @@ -677,6 +688,10 @@ class QemuUtils(object): ssh.connect(node) directory = ' --directory={0}'.format(Constants.QEMU_INSTALL_DIR) + if apply_patch: + directory += '-patch' + else: + directory += '-base' version = ' --version={0}'.format(Constants.QEMU_INSTALL_VERSION) force = ' --force' if force_install else '' patch = ' --patch' if apply_patch else ''