NAME |LIBRARY |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |STANDARDS |HISTORY |NOTES |SEE ALSO |COLOPHON | |
migrate_pages(2) System Calls Manualmigrate_pages(2)migrate_pages - move all pages in a process to another set of nodes
NUMA (Non-Uniform Memory Access) policy library (libnuma,-lnuma)
#include <numaif.h>long migrate_pages(intpid, unsigned longmaxnode,const unsigned long *old_nodes,const unsigned long *new_nodes);
migrate_pages() attempts to move all pages of the processpid that are in memory nodesold_nodes to the memory nodes innew_nodes. Pages not located in any node inold_nodes will not be migrated. As far as possible, the kernel maintains the relative topology relationship insideold_nodes during the migration tonew_nodes. Theold_nodes andnew_nodes arguments are pointers to bit masks of node numbers, with up tomaxnode bits in each mask. These masks are maintained as arrays of unsignedlong integers (in the lastlong integer, the bits beyond those specified bymaxnode are ignored). Themaxnode argument is the maximum node number in the bit mask plus one (this is the same as inmbind(2), but different fromselect(2)). Thepid argument is the ID of the process whose pages are to be moved. To move pages in another process, the caller must be privileged (CAP_SYS_NICE) or the real or effective user ID of the calling process must match the real or saved-set user ID of the target process. Ifpid is 0, thenmigrate_pages() moves pages of the calling process. Pages shared with another process will be moved only if the initiating process has theCAP_SYS_NICEprivilege.
On successmigrate_pages() returns the number of pages that could not be moved (i.e., a return of zero means that all pages were successfully moved). On error, it returns -1, and setserrno to indicate the error.
EFAULTPart or all of the memory range specified byold_nodes/new_nodes andmaxnode points outside your accessible address space.EINVALThe value specified bymaxnode exceeds a kernel-imposed limit. Or,old_nodes ornew_nodes specifies one or more node IDs that are greater than the maximum supported node ID. Or, none of the node IDs specified bynew_nodes are on-line and allowed by the process's current cpuset context, or none of the specified nodes contain memory.EPERMInsufficient privilege (CAP_SYS_NICE) to move pages of the process specified bypid, or insufficient privilege (CAP_SYS_NICE) to access the specified target nodes.ESRCHNo process matchingpid could be found.
Linux.
Linux 2.6.16.
For information on library support, seenuma(7). Useget_mempolicy(2) with theMPOL_F_MEMS_ALLOWEDflag to obtain the set of nodes that are allowed by the calling process's cpuset. Note that this information is subject to change at any time by manual or automatic reconfiguration of the cpuset. Use ofmigrate_pages() may result in pages whose location (node) violates the memory policy established for the specified addresses (seembind(2)) and/or the specified process (seeset_mempolicy(2)). That is, memory policy does not constrain the destination nodes used bymigrate_pages(). The<numaif.h> header is not included with glibc, but requires installinglibnuma-devel or a similar package.
get_mempolicy(2),mbind(2),set_mempolicy(2),numa(3),numa_maps(5),cpuset(7),numa(7),migratepages(8),numastat(8)Documentation/vm/page_migration.rst in the Linux kernel source tree
This page is part of theman-pages (Linux kernel and C library user-space interface documentation) project. Information about the project can be found at ⟨https://www.kernel.org/doc/man-pages/⟩. If you have a bug report for this manual page, see ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩. This page was obtained from the tarball man-pages-6.15.tar.gz fetched from ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩ on 2025-08-11. If you discover any rendering problems in this HTML version of the page, or you believe there is a better or more up- to-date source for the page, or you have corrections or improvements to the information in this COLOPHON (which isnot part of the original manual page), send a mail to man-pages@man7.orgLinux man-pages 6.15 2025-05-17migrate_pages(2)Pages that refer to this page:swapon(2), syscalls(2), numa(3), capabilities(7), numa(7)
HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface. For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere. Hosting byjambit GmbH. | ![]() |