Re: pgsql: Introduce pg_shmem_allocations_numa view - Mailing list pgsql-hackers

From Bertrand Drouvot
Subject Re: pgsql: Introduce pg_shmem_allocations_numa view
Date
Msg-id aFuRoUieUVh+pMfZ@ip-10-97-1-34.eu-west-3.compute.internal
Whole thread Raw
In response to Re: pgsql: Introduce pg_shmem_allocations_numa view  (Tomas Vondra <tomas@vondra.me>)
Responses Re: pgsql: Introduce pg_shmem_allocations_numa view
List pgsql-hackers
Hi,

On Tue, Jun 24, 2025 at 04:41:33PM +0200, Christoph Berg wrote:
> Re: Bertrand Drouvot
> > Yes, I think compat_uptr_t usage is missing in do_pages_stat() (while it's used
> > in do_pages_move()).
> 
> I was also reading the kernel source around that place but you spotted
> the problem before me. This patch resolves the issue here:
> 
> diff --git a/mm/migrate.c b/mm/migrate.c
> index 8cf0f9c9599..542c81ec3ed 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -2444,7 +2444,13 @@ static int do_pages_stat(struct mm_struct *mm, unsigned long nr_pages,
>          if (copy_to_user(status, chunk_status, chunk_nr * sizeof(*status)))
>              break;
> 
> -        pages += chunk_nr;
> +        if (in_compat_syscall()) {
> +            compat_uptr_t __user *pages32 = (compat_uptr_t __user *)pages;
> +
> +            pages32 += chunk_nr;
> +            pages = (const void __user * __user *) pages32;
> +        } else
> +            pages += chunk_nr;
>          status += chunk_nr;
>          nr_pages -= chunk_nr;
>      }
> 

Thanks! Yeah, I had the same kind of patch idea in mind.

> > +               #define NUMA_QUERY_CHUNK_SIZE 16  /* has to be <= DO_PAGES_STAT_CHUNK_NR (do_pages_stat())*/
> > +
> > +               for (uint64 chunk_start = 0; chunk_start < shm_ent_page_count; chunk_start +=
NUMA_QUERY_CHUNK_SIZE){
 
> 
> Perhaps optimize it to this:
> 
> #if sizeof(void *) == 4
> #define NUMA_QUERY_CHUNK_SIZE 16  /* has to be <= DO_PAGES_STAT_CHUNK_NR (do_pages_stat())*/
> #else
> #define NUMA_QUERY_CHUNK_SIZE 1024
> #endif
> 
> ... or some other bigger number.

I had in mind to split the batch size on the PG side only for 32-bits, what about
the attached?

Regards,

-- 
Bertrand Drouvot
PostgreSQL Contributors Team
RDS Open Source Databases
Amazon Web Services: https://aws.amazon.com

Attachment

pgsql-hackers by date:

Previous
From: Michael Banck
Date:
Subject: Re: Safeguards against incorrect fd flags for fsync()
Next
From: Bertrand Drouvot
Date:
Subject: Re: pgsql: Introduce pg_shmem_allocations_numa view