mount: optimize mountinfo traversal by decoupling device discovery

This commit is contained in:
xujing 2024-10-12 11:43:42 +08:00
parent b14d7c2cf8
commit 6887b91844
2 changed files with 58 additions and 4 deletions

View File

@ -0,0 +1,50 @@
From 00ad3f02275b507a753495ace5e5f84cb38b604d Mon Sep 17 00:00:00 2001
From: Chen Guanqiao <chen.chenchacha@foxmail.com>
Date: Wed, 2 Oct 2024 13:10:21 +0800
Subject: [PATCH] mount: optimize mountinfo traversal by decoupling device
discovery
In mount_load_proc_self_mountinfo(), device_found_node() is synchronously called
during the traversal of mountinfo entries. When there are a large number of
mount points, and the device types are not significantly different, this results
in excessive time consumption during device discovery, causing a performance
bottleneck. This issue is particularly prominent on servers with a large number
of cores in IDC.
This patch decouples device discovery from the mountinfo traversal process,
avoiding redundant device operations. As a result, it significantly improves
performance, especially in environments with numerous mount points.
Signed-off-by: Chen Guanqiao <chen.chenchacha@foxmail.com>
---
src/core/mount.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/core/mount.c b/src/core/mount.c
index 28701df231..5261b80957 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -1857,6 +1857,7 @@ static int mount_setup_unit(
static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
_cleanup_(mnt_free_tablep) struct libmnt_table *table = NULL;
_cleanup_(mnt_free_iterp) struct libmnt_iter *iter = NULL;
+ _cleanup_set_free_ Set *devices = NULL;
int r;
assert(m);
@@ -1883,7 +1884,11 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {
if (!device || !path)
continue;
- device_found_node(m, device, DEVICE_FOUND_MOUNT, DEVICE_FOUND_MOUNT);
+ /* Just to achieve device name uniqueness. Note that the suppresion of the duplicate
+ * processing is merely an optimization, hence in case of OOM (unlikely) we'll just process
+ * it twice. */
+ if (set_put_strdup_full(&devices, &path_hash_ops_free, device) != 0)
+ device_found_node(m, device, DEVICE_FOUND_MOUNT, DEVICE_FOUND_MOUNT);
(void) mount_setup_unit(m, device, path, options, fstype, set_flags);
}
--
2.33.0

View File

@ -25,7 +25,7 @@
Name: systemd Name: systemd
Url: https://systemd.io/ Url: https://systemd.io/
Version: 255 Version: 255
Release: 22 Release: 23
License: MIT and LGPLv2+ and GPLv2+ License: MIT and LGPLv2+ and GPLv2+
Summary: System and Service Manager Summary: System and Service Manager
@ -66,9 +66,10 @@ Patch6012: backport-unit-check-for-correct-function-in-vtable.patch
Patch6013: backport-fix-homed-log-message-typo-error.patch Patch6013: backport-fix-homed-log-message-typo-error.patch
Patch6014: backport-bash-completion-add-systemctl-service-log-level-target.patch Patch6014: backport-bash-completion-add-systemctl-service-log-level-target.patch
Patch6015: backport-fix-log-message-not-match-glob-patterns-passed-to-disable-command.patch Patch6015: backport-fix-log-message-not-match-glob-patterns-passed-to-disable-command.patch
Patch6016: backport-main-pass-the-right-error-variable.patch Patch6016: backport-main-pass-the-right-error-variable.patch
Patch6017: backport-sd-event-fix-fd-leak-when-fd-is-owned-by-IO-event-source.patch Patch6017: backport-sd-event-fix-fd-leak-when-fd-is-owned-by-IO-event-source.patch
Patch6018: backport-fix-cgtop-sscanf-return-code-checks.patch Patch6018: backport-fix-cgtop-sscanf-return-code-checks.patch
Patch6019: backport-mount-optimize-mountinfo-traversal-by-decoupling-dev.patch
Patch9008: update-rtc-with-system-clock-when-shutdown.patch Patch9008: update-rtc-with-system-clock-when-shutdown.patch
Patch9009: udev-add-actions-while-rename-netif-failed.patch Patch9009: udev-add-actions-while-rename-netif-failed.patch
@ -1658,6 +1659,9 @@ fi
%{_unitdir}/veritysetup.target %{_unitdir}/veritysetup.target
%changelog %changelog
* Tue Nov 05 2024 xujing <xujing125@huawei.com> - 255-23
- DESC:optimize mountinfo traversal by decoupling device discovery
* Mon Sep 23 2024 xujing <xujing125@huawei.com> - 255-22 * Mon Sep 23 2024 xujing <xujing125@huawei.com> - 255-22
- DESC:fix cgroup v2 cpuset function error and optimize the code of cpuset and freezer - DESC:fix cgroup v2 cpuset function error and optimize the code of cpuset and freezer