Merge pull request #31587 from yuwata/udev-rps-follow-ups

udev: follow-ups for RPS setting
This commit is contained in:
Luca Boccassi 2024-03-02 11:47:44 +00:00 committed by GitHub
commit e440426221
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 88 additions and 104 deletions

View file

@ -1397,12 +1397,10 @@ int config_parse_rps_cpu_mask(
mask = allocated;
}
if (streq(rvalue, "disable")) {
if (streq(rvalue, "disable"))
cpu_set_reset(mask);
return 0;
}
if (streq(rvalue, "all")) {
else if (streq(rvalue, "all")) {
r = cpu_mask_add_all(mask);
if (r < 0) {
log_syntax(unit, LOG_WARNING, filename, line, r,

View file

@ -283,9 +283,6 @@ def compare_kernel_version(min_kernel_version):
return version.parse(kver) >= version.parse(min_kernel_version)
def udev_reload():
check_output(*udevadm_cmd, 'control', '--reload')
def copy_network_unit(*units, copy_dropins=True):
"""
Copy networkd unit files into the testbed.
@ -316,7 +313,7 @@ def copy_network_unit(*units, copy_dropins=True):
has_link = True
if has_link:
udev_reload()
udevadm_reload()
def copy_credential(src, target):
mkdir_p(credstore_dir)
@ -338,7 +335,7 @@ def remove_network_unit(*units):
has_link = True
if has_link:
udev_reload()
udevadm_reload()
def clear_network_units():
has_link = False
@ -351,7 +348,7 @@ def clear_network_units():
rm_rf(network_unit_dir)
if has_link:
udev_reload()
udevadm_reload()
def copy_networkd_conf_dropin(*dropins):
"""Copy networkd.conf dropin files into the testbed."""
@ -798,6 +795,15 @@ def resolvectl(*args):
def timedatectl(*args):
return check_output(*(timedatectl_cmd + list(args)), env=env)
def udevadm(*args):
return check_output(*(udevadm_cmd + list(args)))
def udevadm_reload():
udevadm('control', '--reload')
def udevadm_trigger(*args, action='add'):
udevadm('trigger', '--settle', f'--action={action}', *args)
def setup_common():
print()
@ -1315,7 +1321,7 @@ class NetworkctlTests(unittest.TestCase, Utilities):
# This test may be run on the system that has older udevd than 70f32a260b5ebb68c19ecadf5d69b3844896ba55 (v249).
# In that case, the udev DB for the loopback network interface may already have ID_NET_LINK_FILE property.
# Let's reprocess the interface and drop the property.
check_output(*udevadm_cmd, 'trigger', '--settle', '--action=add', '/sys/class/net/lo')
udevadm_trigger('/sys/class/net/lo')
output = networkctl_status('lo')
print(output)
self.assertIn('Link File: n/a', output)
@ -1378,7 +1384,7 @@ class NetworkdMatchTests(unittest.TestCase, Utilities):
check_output('ip link set dev dummy98-1 down')
check_output('ip link set dev dummy98-1 name dummy98-2')
check_output(*udevadm_cmd, 'trigger', '--action=add', '/sys/class/net/dummy98-2')
udevadm_trigger('/sys/class/net/dummy98-2')
self.wait_address('dummy98-2', '10.0.2.2/16', ipv='-4', timeout_sec=10)
self.wait_online('dummy98-2:routable')
@ -2460,22 +2466,12 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
self.wait_online('ifb99:degraded')
def test_rps_cpu_0(self):
copy_network_unit('12-dummy.netdev', '25-rps-cpu-0.link')
start_networkd()
self.wait_links('dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(int(output.replace(',', ''), base=16), 1)
@unittest.skipUnless(os.cpu_count() >= 2, reason="CPU count should be >= 2 to pass this test")
def test_rps_cpu_1(self):
copy_network_unit('12-dummy.netdev', '25-rps-cpu-1.link')
copy_network_unit('12-dummy.netdev', '12-dummy.network', '25-rps-cpu-1.link')
start_networkd()
self.wait_links('dummy98')
self.wait_online('dummy98:carrier')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
@ -2483,10 +2479,10 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
@unittest.skipUnless(os.cpu_count() >= 2, reason="CPU count should be >= 2 to pass this test")
def test_rps_cpu_0_1(self):
copy_network_unit('12-dummy.netdev', '25-rps-cpu-0-1.link')
copy_network_unit('12-dummy.netdev', '12-dummy.network', '25-rps-cpu-0-1.link')
start_networkd()
self.wait_links('dummy98')
self.wait_online('dummy98:carrier')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
@ -2494,96 +2490,86 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
@unittest.skipUnless(os.cpu_count() >= 4, reason="CPU count should be >= 4 to pass this test")
def test_rps_cpu_multi(self):
copy_network_unit('12-dummy.netdev', '25-rps-cpu-multi.link')
copy_network_unit('12-dummy.netdev', '12-dummy.network', '25-rps-cpu-multi.link')
start_networkd()
self.wait_links('dummy98')
self.wait_online('dummy98:carrier')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(int(output.replace(',', ''), base=16), 15)
def test_rps_cpu_all(self):
def test_rps_cpu(self):
cpu_count = os.cpu_count()
copy_network_unit('12-dummy.netdev', '25-rps-cpu-all.link')
copy_network_unit('12-dummy.netdev', '12-dummy.network')
start_networkd()
self.wait_links('dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(f"{int(output.replace(',', ''), base=16):x}", f'{(1 << cpu_count) - 1:x}')
def test_rps_cpu_disable(self):
copy_network_unit('12-dummy.netdev', '25-rps-cpu-all.link', '24-rps-cpu-disable.link')
start_networkd()
self.wait_links('dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(int(output.replace(',', ''), base=16), 0)
def test_rps_cpu_empty(self):
copy_network_unit('12-dummy.netdev', '24-rps-cpu-empty.link')
start_networkd()
self.wait_links('dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(int(output.replace(',', ''), base=16), 0)
def test_rps_cpu_0_empty(self):
copy_network_unit('12-dummy.netdev', '25-rps-cpu-0-empty.link')
start_networkd()
self.wait_links('dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(int(output.replace(',', ''), base=16), 0)
def test_rps_cpu_0_and_empty(self):
copy_network_unit('12-dummy.netdev', '25-rps-cpu-0.link', '24-rps-cpu-empty.link')
start_networkd()
self.wait_links('dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(int(output.replace(',', ''), base=16), 0)
def test_rps_cpu_invalid(self):
copy_network_unit('12-dummy.netdev', '24-rps-cpu-invalid.link')
start_networkd()
self.wait_links('dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(int(output.replace(',', ''), base=16), 0)
def test_rps_cpu_0_invalid(self):
copy_network_unit('12-dummy.netdev', '25-rps-cpu-0-invalid.link')
start_networkd()
self.wait_links('dummy98')
self.wait_online('dummy98:carrier')
# 0
copy_network_unit('25-rps-cpu-0.link')
udevadm_trigger('/sys/class/net/dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(int(output.replace(',', ''), base=16), 1)
remove_network_unit('25-rps-cpu-0.link')
def test_rps_cpu_0_and_invalid(self):
copy_network_unit('12-dummy.netdev', '25-rps-cpu-0.link', '24-rps-cpu-invalid.link')
start_networkd()
self.wait_links('dummy98')
# all
copy_network_unit('25-rps-cpu-all.link')
udevadm_trigger('/sys/class/net/dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(f"{int(output.replace(',', ''), base=16):x}", f'{(1 << cpu_count) - 1:x}')
remove_network_unit('25-rps-cpu-all.link')
# disable
copy_network_unit('24-rps-cpu-disable.link')
udevadm_trigger('/sys/class/net/dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(int(output.replace(',', ''), base=16), 0)
remove_network_unit('24-rps-cpu-disable.link')
# set all again
copy_network_unit('25-rps-cpu-all.link')
udevadm_trigger('/sys/class/net/dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(f"{int(output.replace(',', ''), base=16):x}", f'{(1 << cpu_count) - 1:x}')
remove_network_unit('25-rps-cpu-all.link')
# empty -> unchanged
copy_network_unit('24-rps-cpu-empty.link')
udevadm_trigger('/sys/class/net/dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(f"{int(output.replace(',', ''), base=16):x}", f'{(1 << cpu_count) - 1:x}')
remove_network_unit('24-rps-cpu-empty.link')
# 0, then empty -> unchanged
copy_network_unit('25-rps-cpu-0-empty.link')
udevadm_trigger('/sys/class/net/dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(f"{int(output.replace(',', ''), base=16):x}", f'{(1 << cpu_count) - 1:x}')
remove_network_unit('25-rps-cpu-0-empty.link')
# 0, then invalid -> 0
copy_network_unit('25-rps-cpu-0-invalid.link')
udevadm_trigger('/sys/class/net/dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(int(output.replace(',', ''), base=16), 1)
remove_network_unit('25-rps-cpu-0-invalid.link')
# invalid -> unchanged
copy_network_unit('24-rps-cpu-invalid.link')
udevadm_trigger('/sys/class/net/dummy98')
output = check_output('cat /sys/class/net/dummy98/queues/rx-0/rps_cpus')
print(output)
self.assertEqual(int(output.replace(',', ''), base=16), 1)
remove_network_unit('24-rps-cpu-invalid.link')
class NetworkdL2TPTests(unittest.TestCase, Utilities):
@ -5248,8 +5234,8 @@ class NetworkdSRIOVTests(unittest.TestCase, Utilities):
with open(os.path.join(network_unit_dir, '25-sriov.link'), mode='a', encoding='utf-8') as f:
f.write('[Link]\nSR-IOVVirtualFunctions=4\n')
udev_reload()
check_output(*udevadm_cmd, 'trigger', '--action=add', '--settle', f'/sys/devices/netdevsim99/net/{ifname}')
udevadm_reload()
udevadm_trigger(f'/sys/devices/netdevsim99/net/{ifname}')
output = check_output('ip link show dev eni99np1')
print(output)
@ -5264,8 +5250,8 @@ class NetworkdSRIOVTests(unittest.TestCase, Utilities):
with open(os.path.join(network_unit_dir, '25-sriov.link'), mode='a', encoding='utf-8') as f:
f.write('[Link]\nSR-IOVVirtualFunctions=\n')
udev_reload()
check_output(*udevadm_cmd, 'trigger', '--action=add', '--settle', f'/sys/devices/netdevsim99/net/{ifname}')
udevadm_reload()
udevadm_trigger(f'/sys/devices/netdevsim99/net/{ifname}')
output = check_output('ip link show dev eni99np1')
print(output)
@ -5280,8 +5266,8 @@ class NetworkdSRIOVTests(unittest.TestCase, Utilities):
with open(os.path.join(network_unit_dir, '25-sriov.link'), mode='a', encoding='utf-8') as f:
f.write('[Link]\nSR-IOVVirtualFunctions=2\n')
udev_reload()
check_output(*udevadm_cmd, 'trigger', '--action=add', '--settle', f'/sys/devices/netdevsim99/net/{ifname}')
udevadm_reload()
udevadm_trigger(f'/sys/devices/netdevsim99/net/{ifname}')
output = check_output('ip link show dev eni99np1')
print(output)
@ -5296,8 +5282,8 @@ class NetworkdSRIOVTests(unittest.TestCase, Utilities):
with open(os.path.join(network_unit_dir, '25-sriov.link'), mode='a', encoding='utf-8') as f:
f.write('[Link]\nSR-IOVVirtualFunctions=\n')
udev_reload()
check_output(*udevadm_cmd, 'trigger', '--action=add', '--settle', f'/sys/devices/netdevsim99/net/{ifname}')
udevadm_reload()
udevadm_trigger(f'/sys/devices/netdevsim99/net/{ifname}')
output = check_output('ip link show dev eni99np1')
print(output)