]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Add CHECK_FOR_INTERRUPTS into pg_numa_query_pages
authorTomas Vondra <tomas.vondra@postgresql.org>
Tue, 1 Jul 2025 10:58:35 +0000 (12:58 +0200)
committerTomas Vondra <tomas.vondra@postgresql.org>
Tue, 1 Jul 2025 10:58:35 +0000 (12:58 +0200)
Querying the NUMA status can be quite time consuming, especially with
large shared buffers. 8cc139bec34a called numa_move_pages() once, for
all buffers, and we had to wait for the syscall to complete.

But with the chunking, introduced by 7fe2f67c7c to work around a kernel
bug, we can do CHECK_FOR_INTERRUPTS() after each chunk, allowing users
to abort the execution.

Reviewed-by: Christoph Berg <myon@debian.org>
Reviewed-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Discussion: https://postgr.es/m/aEtDozLmtZddARdB@msg.df7cb.de
Backpatch-through: 18

src/port/pg_numa.c

index d5935207d0a13be0d59e2cf89dc560715830e504..c65f22020ea510bc211213753fd50563dcf255d3 100644 (file)
@@ -16,6 +16,7 @@
 #include "c.h"
 #include <unistd.h>
 
+#include "miscadmin.h"
 #include "port/pg_numa.h"
 
 /*
@@ -76,6 +77,8 @@ pg_numa_query_pages(int pid, unsigned long count, void **pages, int *status)
                unsigned long count_chunk = Min(count - next,
                                                                                NUMA_QUERY_CHUNK_SIZE);
 
+               CHECK_FOR_INTERRUPTS();
+
                /*
                 * Bail out if any of the chunks errors out (ret<0). We ignore
                 * (ret>0) which is used to return number of nonmigrated pages,