Projects
Mega:23.03
systemd
_service:tar_scm:backport-fileio-start-with-4k-...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:backport-fileio-start-with-4k-buffer-for-procfs.patch of Package systemd
From b3f5d2f4044751a4a741e033a9bc621ede573cb2 Mon Sep 17 00:00:00 2001 From: Anita Zhang <the.anitazha@gmail.com> Date: Tue, 14 Sep 2021 16:33:10 -0700 Subject: [PATCH] fileio: start with 4k buffer for procfs There's a very gradual increase of anonymous memory in systemd-journald that blames to 2ac67221bb6270f0fbe7cbd0076653832cd49de2. systemd-journald makes many calls to read /proc/PID/cmdline and /proc/PID/status, both of which tend to be well under 4K. However the combination of allocating 4M read buffers, then using `realloc()` to shrink the buffer in `read_virtual_file()` appears to be creating fragmentation in the heap (when combined with the other allocations systemd-journald is doing). To help mitigate this, try reading /proc with a 4K buffer as `read_virtual_file()` did before 2ac67221bb6270f0fbe7cbd0076653832cd49de2. If it isn't big enough then try again with the larger buffers. (cherry picked from commit 5aaa55d841249f057fd69e50cf12a52e9781a6ce) Conflict:NA Reference:https://github.com/systemd/systemd/commit/b3f5d2f4044751a4a741e033a9bc621ede573cb2 --- src/basic/fileio.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/basic/fileio.c b/src/basic/fileio.c index 39abf985eb..1046e5b9b4 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -433,6 +433,11 @@ int read_virtual_file(const char *filename, size_t max_size, char **ret_contents } n_retries--; + } else if (n_retries > 1) { + /* Files in /proc are generally smaller than the page size so let's start with a page size + * buffer from malloc and only use the max buffer on the final try. */ + size = MIN3(page_size() - 1, READ_VIRTUAL_BYTES_MAX, max_size); + n_retries = 1; } else { size = MIN(READ_VIRTUAL_BYTES_MAX, max_size); n_retries = 0; -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2