Hi David,
On Sat, Apr 20, 2024 at 07:33:16AM +0100, David CARLIER wrote:
> From d49d9d5966caead320f33f789578cb69f2aa3787 Mon Sep 17 00:00:00 2001
> From: David Carlier <[email protected]>
> Date: Sat, 20 Apr 2024 07:18:48 +0100
> Subject: [PATCH] MEDIUM: shctx: Naming shared memory context
>
> From Linux 5.17, anonymous regions can be name via prctl/PR_SET_VMA
> so caches can be identified when looking at HAProxy process memory
> mapping.
That's pretty cool, I wasn't aware of this feature, that's really
interesting!
However I disagree with this point:
> +#if defined(USE_PRCTL) && defined(PR_SET_VMA)
> + {
> + /**
> + * From Linux 5.17 (and if the `CONFIG_ANON_VMA_NAME` kernel
> config is set)`,
> + * anonymous regions can be named.
> + *
> + * The naming can take up to 79 characters, accepting valid
> ASCII values
> + * except [, ], \, $ and '.
> + * As a result, when looking for /proc/<pid>/maps, we can see
> the anonymous range
> + * as follow :
> + * `7364c4fff000-736508000000 rw-s 00000000 00:01 3540
> [anon_shmem:HAProxy globalCache]`
> + */
> + int rn;
> + char fullname[80];
> +
> + rn = snprintf(fullname, sizeof(fullname), "HAProxy %s", name);
> + if (rn < 0 || prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME,
> (uintptr_t)shctx,
> + totalsize, (uintptr_t)fullname) != 0) {
> + munmap(shctx, totalsize);
> + shctx = NULL;
> + ret = SHCTX_E_ALLOC_CACHE;
> + goto err;
> + }
> + }
> +#endif
You're making the mapping fail on any kernel that does not support the
feature (hence apparently anything < 5.17 according to your description).
IMHO we should just silently fall back to the default behavior, i.e. we
couldn't assign the name, fine, we continue to run without a name, thus
something like this:
rn = snprintf(fullname, sizeof(fullname), "HAProxy %s", name);
if (rn >= 0)
prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, (uintptr_t)shctx,
totalsize, (uintptr_t)fullname);
Could you please adjust it and verify that it's still OK for you ?
Likewise I can check it on a 5.15 here.
Thank you!
Willy