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 <devne...@gmail.com>
> 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

Reply via email to