Skip to content

Commit 0bdddca

Browse files
authored
Merge pull request #6197 from yalzhang/passt_vhostuser
Add vhostuser support for passt
2 parents a69cd30 + 4df2e77 commit 0bdddca

File tree

9 files changed

+75
-4
lines changed

9 files changed

+75
-4
lines changed

libvirt/tests/cfg/virtual_network/passt/passt_attach_detach.cfg

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424
- detach:
2525
add_iface = yes
2626
- attach_detach:
27+
variants:
28+
- default:
29+
- vhostuser:
30+
vhostuser = yes
31+
func_supported_since_libvirt_ver = (10, 10, 0)
2732
variants:
2833
- ip_portfw:
2934
alias = {'name': 'ua-c87b89ff-b769-4abc-921f-30d42d7aec5b'}

libvirt/tests/cfg/virtual_network/passt/passt_function.cfg

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,8 @@
7878
iface_attrs = {'model': 'virtio', 'acpi': {'index': '1'}, 'ips': ${ips}, 'backend': ${backend}, 'source': {'dev': host_iface}, 'alias': ${alias}, 'type_name': 'user', 'portForwards': ${portForwards}}
7979
s390-virtio:
8080
iface_attrs = {'model': 'virtio', 'ips': ${ips}, 'backend': ${backend}, 'source': {'dev': host_iface}, 'alias': ${alias}, 'type_name': 'user', 'portForwards': ${portForwards}}
81+
variants:
82+
- default:
83+
- vhostuser:
84+
vhostuser = yes
85+
func_supported_since_libvirt_ver = (10, 10, 0)

libvirt/tests/cfg/virtual_network/passt/passt_lifecycle.cfg

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,23 @@
2020
operation_a = suspend
2121
operation_b = resume
2222
passt_running = yes
23+
variants:
24+
- default:
25+
- vhostuser:
26+
vhostuser = yes
27+
func_supported_since_libvirt_ver = (10, 10, 0)
2328
variants user_type:
2429
- non_root_user:
2530
test_user = USER.EXAMPLE
2631
test_passwd = PASSWORD.EXAMPLE
2732
user_id =
2833
unpr_vm_name = UNPRIVILEGED_VM.EXAMPLE
2934
socket_dir = f'/run/user/{user_id}/libvirt/qemu/run/passt/'
35+
- root_user:
36+
test_user = root
37+
user_id = 107
38+
log_dir = /run/user/${user_id}
39+
socket_dir = f'/run/libvirt/qemu/passt/'
3040
variants scenario:
3141
- ip_portfw:
3242
ipv6_prefix = 128

libvirt/tests/cfg/virtual_network/passt/passt_reconnect.cfg

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@
2020
unpr_vm_name = UNPRIVILEGED_VM.EXAMPLE
2121
virsh_uri = 'qemu+ssh://${test_user}@localhost/session'
2222
socket_dir = f'/run/user/{user_id}/libvirt/qemu/run/passt/'
23+
variants:
24+
- default:
25+
- vhostuser:
26+
vhostuser = 'yes'
27+
qemu_cmd_check = "reconnect=5"
28+
func_supported_since_libvirt_ver = (10, 10, 0)
2329
variants:
2430
- ip_portfw:
2531
alias = {'alias': {'name': 'ua-c87b89ff-b769-4abc-921f-30d42d7aec5b'}}

libvirt/tests/cfg/virtual_network/passt/passt_transfer_file.cfg

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
unpr_vm_name = UNPRIVILEGED_VM.EXAMPLE
1919
virsh_uri = 'qemu+ssh://${test_user}@localhost/session'
2020
socket_dir = f'/run/user/{user_id}/libvirt/qemu/run/passt/'
21+
variants:
22+
- default:
23+
- vhostuser:
24+
vhostuser = 'yes'
25+
func_supported_since_libvirt_ver = (10, 10, 0)
2126
variants:
2227
- ip_portfw:
2328
alias = {'alias': {'name': 'ua-c87b89ff-b769-4abc-921f-30d42d7aec5b'}}

libvirt/tests/src/virtual_network/passt/passt_attach_detach.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from virttest import virsh
1212
from virttest.libvirt_xml import vm_xml
1313
from virttest.staging import service
14+
from virttest.staging import utils_memory
1415
from virttest.utils_libvirt import libvirt_unprivileged
1516
from virttest.utils_libvirt import libvirt_vmxml
1617

@@ -79,10 +80,12 @@ def run(test, params, env):
7980
log_file = f'/run/user/{user_id}/passt.log'
8081
iface_attrs['backend']['logFile'] = log_file
8182
iface_attrs['source']['dev'] = host_iface
83+
vhostuser = 'yes' == params.get('vhostuser', 'no')
8284

8385
vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name,
8486
virsh_instance=virsh_ins)
8587
bkxml = vmxml.copy()
88+
shp_orig_num = utils_memory.get_num_huge_pages()
8689

8790
selinux_status = passt.ensure_selinux_enforcing()
8891
passt.check_socat_installed()
@@ -93,6 +96,12 @@ def run(test, params, env):
9396
passt.make_log_dir(user_id, log_dir)
9497

9598
vmxml.del_device('interface', by_tag=True)
99+
if vhostuser:
100+
# set static hugepage
101+
utils_memory.set_num_huge_pages(2048)
102+
vm_xml.VMXML.set_memoryBacking_tag(vm_name, access_mode="shared", hpgs=True, vmxml=vmxml)
103+
# update vm xml with shared memory and vhostuser interface
104+
iface_attrs['type_name'] = 'vhostuser'
96105
iface_device = libvirt_vmxml.create_vm_device_by_type('interface',
97106
iface_attrs)
98107
LOG.debug(f'iface_device: {iface_device}')
@@ -150,7 +159,7 @@ def run(test, params, env):
150159
if 'detach' not in scenario:
151160
vm.destroy()
152161
passt.check_passt_pid_not_exist()
153-
if os.listdir(socket_dir):
162+
if not vhostuser and os.listdir(socket_dir):
154163
test.fail(f'Socket dir is not empty: {os.listdir(socket_dir)}')
155164
else:
156165
vmxml = vm_xml.VMXML.new_from_dumpxml(vm_name,
@@ -183,3 +192,4 @@ def run(test, params, env):
183192
if root:
184193
shutil.rmtree(log_dir)
185194
utils_selinux.set_status(selinux_status)
195+
utils_memory.set_num_huge_pages(shp_orig_num)

libvirt/tests/src/virtual_network/passt/passt_function.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from virttest import virsh
1111
from virttest.libvirt_xml import vm_xml
1212
from virttest.staging import service
13+
from virttest.staging import utils_memory
1314
from virttest.utils_libvirt import libvirt_unprivileged
1415
from virttest.utils_libvirt import libvirt_vmxml
1516

@@ -65,10 +66,12 @@ def run(test, params, env):
6566
log_file = f'/run/user/{user_id}/passt.log'
6667
iface_attrs = eval(params.get('iface_attrs'))
6768
iface_attrs['backend']['logFile'] = log_file
69+
vhostuser = 'yes' == params.get('vhostuser', 'no')
6870

6971
vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name,
7072
virsh_instance=virsh_ins)
7173
bkxml = vmxml.copy()
74+
shp_orig_num = utils_memory.get_num_huge_pages()
7275

7376
selinux_status = passt.ensure_selinux_enforcing()
7477
passt.check_socat_installed()
@@ -83,6 +86,12 @@ def run(test, params, env):
8386

8487
vmxml.del_device('interface', by_tag=True)
8588
vmxml.sync(virsh_instance=virsh_ins)
89+
if vhostuser:
90+
# set static hugepage
91+
utils_memory.set_num_huge_pages(2048)
92+
vm_xml.VMXML.set_memoryBacking_tag(vm_name, access_mode="shared", hpgs=True, vmxml=vmxml)
93+
# update vm xml with shared memory and vhostuser interface
94+
iface_attrs['type_name'] = 'vhostuser'
8695
libvirt_vmxml.modify_vm_device(vmxml, 'interface', iface_attrs,
8796
virsh_instance=virsh_ins)
8897
LOG.debug(virsh_ins.dumpxml(vm_name).stdout_text)
@@ -92,6 +101,7 @@ def run(test, params, env):
92101
passt.check_proc_info(params, log_file, mac)
93102

94103
# check the passt log
104+
LOG.debug(virsh.dumpxml(vm_name))
95105
if not os.path.exists(log_file):
96106
test.fail(f'Logfile of passt "{log_file}" not created')
97107

@@ -123,7 +133,7 @@ def run(test, params, env):
123133
vm.destroy()
124134

125135
passt.check_passt_pid_not_exist()
126-
if os.listdir(socket_dir):
136+
if not vhostuser and os.listdir(socket_dir):
127137
test.fail(f'Socket dir is not empty: {os.listdir(socket_dir)}')
128138

129139
finally:
@@ -132,3 +142,4 @@ def run(test, params, env):
132142
if root:
133143
shutil.rmtree(log_dir)
134144
utils_selinux.set_status(selinux_status)
145+
utils_memory.set_num_huge_pages(shp_orig_num)

libvirt/tests/src/virtual_network/passt/passt_lifecycle.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from virttest import virsh
1212
from virttest.libvirt_xml import vm_xml
1313
from virttest.staging import service
14+
from virttest.staging import utils_memory
1415
from virttest.utils_libvirt import libvirt_unprivileged
1516
from virttest.utils_libvirt import libvirt_vmxml
1617

@@ -29,6 +30,7 @@ def run(test, params, env):
2930
"""
3031
libvirt_version.is_libvirt_feature_supported(params)
3132
root = 'root_user' == params.get('user_type', '')
33+
test_user = params.get('test_user')
3234
if root:
3335
vm_name = params.get('main_vm')
3436
vm = env.get_vm(vm_name)
@@ -70,14 +72,16 @@ def run(test, params, env):
7072
iface_attrs['backend']['logFile'] = log_file
7173
operation_a = params.get('operation_a')
7274
operation_b = params.get('operation_b')
73-
save_path = f'/home/{test_user}/save_{utils_misc.generate_random_string(3)}'
75+
save_path = f'/tmp/save_{utils_misc.generate_random_string(3)}'
7476
options_a = eval(params.get('options_a', '{}'))
7577
options_b = eval(params.get('options_b', '{}'))
7678
passt_running = 'yes' == params.get('passt_running', 'no')
79+
vhostuser = 'yes' == params.get('vhostuser', 'no')
7780

7881
vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name,
7982
virsh_instance=virsh_ins)
8083
bkxml = vmxml.copy()
84+
shp_orig_num = utils_memory.get_num_huge_pages()
8185

8286
selinux_status = passt.ensure_selinux_enforcing()
8387
passt.check_socat_installed()
@@ -97,6 +101,12 @@ def run(test, params, env):
97101
vmxml.sync(virsh_instance=virsh_ins)
98102
libvirt_vmxml.modify_vm_device(vmxml, 'interface', iface_attrs,
99103
virsh_instance=virsh_ins)
104+
if vhostuser:
105+
# set static hugepage
106+
utils_memory.set_num_huge_pages(2048)
107+
vm_xml.VMXML.set_memoryBacking_tag(vm_name, access_mode="shared", hpgs=True, vmxml=vmxml)
108+
# update vm xml with shared memory and vhostuser interface
109+
iface_attrs['type_name'] = 'vhostuser'
100110
LOG.debug(virsh_ins.dumpxml(vm_name).stdout_text)
101111
mac = vm.get_virsh_mac_address()
102112

@@ -148,7 +158,7 @@ def run(test, params, env):
148158
vm.destroy()
149159

150160
passt.check_passt_pid_not_exist()
151-
if os.listdir(socket_dir):
161+
if not vhostuser and os.listdir(socket_dir):
152162
test.fail(f'Socket dir is not empty: {os.listdir(socket_dir)}')
153163

154164
finally:
@@ -159,3 +169,4 @@ def run(test, params, env):
159169
utils_selinux.set_status(selinux_status)
160170
if os.path.exists(save_path):
161171
os.remove(save_path)
172+
utils_memory.set_num_huge_pages(shp_orig_num)

libvirt/tests/src/virtual_network/passt/passt_reconnect.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from virttest import virsh
1414
from virttest.libvirt_xml import vm_xml
1515
from virttest.staging import service
16+
from virttest.staging import utils_memory
1617
from virttest.utils_libvirt import libvirt_unprivileged
1718
from virttest.utils_test import libvirt
1819

@@ -69,10 +70,12 @@ def run(test, params, env):
6970
log_file = f'/run/user/{user_id}/passt.log'
7071
iface_attrs['backend']['logFile'] = log_file
7172
iface_attrs['source']['dev'] = host_iface
73+
vhostuser = 'yes' == params.get('vhostuser', 'no')
7274

7375
vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name,
7476
virsh_instance=virsh_ins)
7577
bkxml = vmxml.copy()
78+
shp_orig_num = utils_memory.get_num_huge_pages()
7679

7780
selinux_status = passt.ensure_selinux_enforcing()
7881
passt.check_socat_installed()
@@ -82,6 +85,10 @@ def run(test, params, env):
8285
if root:
8386
passt.make_log_dir(user_id, log_dir)
8487

88+
if vhostuser:
89+
iface_attrs['type_name'] = 'vhostuser'
90+
utils_memory.set_num_huge_pages(2048)
91+
vm_xml.VMXML.set_memoryBacking_tag(vm_name, access_mode="shared", hpgs=True, vmxml=vmxml)
8592
passt.vm_add_iface(vmxml, iface_attrs, virsh_ins)
8693
vm.start()
8794

@@ -142,3 +149,4 @@ def run(test, params, env):
142149
if root:
143150
shutil.rmtree(log_dir)
144151
utils_selinux.set_status(selinux_status)
152+
utils_memory.set_num_huge_pages(shp_orig_num)

0 commit comments

Comments
 (0)