mount: optimize mountinfo traversal by decoupling device discovery
This commit is contained in:
parent
523eef8b10
commit
6144e56b15
@ -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
|
||||
|
||||
10
systemd.spec
10
systemd.spec
@ -21,7 +21,7 @@
|
||||
Name: systemd
|
||||
Url: https://systemd.io/
|
||||
Version: 249
|
||||
Release: 84
|
||||
Release: 85
|
||||
License: MIT and LGPLv2+ and GPLv2+
|
||||
Summary: System and Service Manager
|
||||
|
||||
@ -673,8 +673,9 @@ Patch6624: backport-unit-don-t-gc-unit-in-oom-queue.patch
|
||||
Patch6625: backport-core-do-not-GC-units-jobs-that-are-in-the-D-Bus-queu.patch
|
||||
Patch6626: backport-sd-event-fix-fd-leak-when-fd-is-owned-by-IO-event-so.patch
|
||||
Patch6627: backport-Update-hwdb.patch
|
||||
Patch6628: backport-fix-cgtop-sscanf-return-code-checks.patch
|
||||
Patch6629: backport-seccomp-util-include-missing_syscall_def.h-to-make-__SNR_foo-mapped.patch
|
||||
Patch6628: backport-fix-cgtop-sscanf-return-code-checks.patch
|
||||
Patch6629: backport-seccomp-util-include-missing_syscall_def.h-to-make-__SNR_foo-mapped.patch
|
||||
Patch6630: backport-mount-optimize-mountinfo-traversal-by-decoupling-dev.patch
|
||||
|
||||
Patch9001: update-rtc-with-system-clock-when-shutdown.patch
|
||||
Patch9002: udev-add-actions-while-rename-netif-failed.patch
|
||||
@ -2189,6 +2190,9 @@ grep -q -E '^KEYMAP="?fi-latin[19]"?' /etc/vconsole.conf 2>/dev/null &&
|
||||
/usr/bin/systemd-cryptenroll
|
||||
|
||||
%changelog
|
||||
* Tue Nov 05 2024 xujing <xujing125@huawei.com> - 249-85
|
||||
- optimize mountinfo traversal by decoupling device discovery
|
||||
|
||||
* Mon Aug 26 2024 fuanan <fuanan3@h-partners.com> - 249-84
|
||||
- add backport-seccomp-util-include-missing_syscall_def.h-to-make-__SNR_foo-mapped.patch
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user