.\" -*- coding: UTF-8 -*- .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" This manpage is Copyright (C) 2006 Silicon Graphics, Inc. .\" Christoph Lameter .\" .\" FIXME Should programs normally be using move_pages() directly, or should .\" they rather be using interfaces in the numactl package? .\" (e.g., compare with recommendation in mbind(2)). .\" Does this page need to give advice on this topic? .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH move_pages 2 "31 октября 2023 г." "Linux man\-pages 6.06" .SH ИМЯ move_pages \- перемещает отдельные страницы процесса на другой узел .SH LIBRARY NUMA (Non\-Uniform Memory Access) policy library (\fIlibnuma\fP, \fI\-lnuma\fP) .SH СИНТАКСИС .nf \fB#include \fP .P \fBlong move_pages(int \fP\fIpid\fP\fB, unsigned long \fP\fIcount\fP\fB, void *\fP\fIpages\fP\fB[.\fP\fIcount\fP\fB],\fP \fB const int \fP\fInodes\fP\fB[.\fP\fIcount\fP\fB], int \fP\fIstatus\fP\fB[.\fP\fIcount\fP\fB], int \fP\fIflags\fP\fB);\fP .fi .SH ОПИСАНИЕ Вызов \fBmove_pages\fP() перемещает указанные в \fIpages\fP страницы процесса с \fIpid\fP в память узлов, заданных в \fInodes\fP. Результат перемещения отражается в \fIstatus\fP. В \fIflags\fP задаются ограничения на перемещаемые страницы. .P Значение \fIpid\fP представляет собой идентификатор процесса, в котором перемещаются страницы. Если \fIpid\fP равен 0, то \fBmove_pages\fP() перемещается страницы вызывающего процесса. .P Для перемещения страниц в другом процессе требуются следующие права: .IP \[bu] 3 Up to and including Linux 4.12: the caller must be privileged (\fBCAP_SYS_NICE\fP) or the real or effective user ID of the calling process must match the real or saved\-set user ID of the target process. .IP \[bu] .\" commit 197e7e521384a23b9e585178f3f11c9fa08274b9 Старые правила позволяли вызывающему обнаруживать различные виртуальные адреса, выбранные ядром, что лишает смысла случайность расположения раскладки адресного пространства процесса, принадлежащему тому же UID что и вызывающий; правила были изменены в Linux 4.13. Начиная с Linux 4.13, права регулируются проверкой режима доступа ptrace \fBPTRACE_MODE_READ_REALCREDS\fP целевого процесса; смотрите \fBptrace\fP(2). .P В аргументе \fIcount\fP задаётся количество перемещаемых страниц. Он определяет размер трёх массивов: \fIpages\fP, \fInodes\fP и \fIstatus\fP. .P .\" FIXME Describe the result if pointers in the 'pages' array are .\" not aligned to page boundaries Аргумент \fIpages\fP представляет собой массив указателей на страницы, которые должны быть перемещены. Данные указатели должны быть выровнены на границу страницы. Адреса указываются в том же виде, в каком доступны процессу с заданным \fIpid\fP. .P Аргумент \fInodes\fP представляет собой массив целых, которыми задаются желаемые местоположения каждой страницы. Каждый элемент массива представляет собой номер узла. Также, значением \fInodes\fP может быть NULL; в этом случае \fBmove_pages\fP() не перемещает страницы, а записывает в массив \fIstatus\fP номер узла, на котором расположена каждая страница в данный момент. Получение состояния каждой страницы может потребоваться для определения страниц, которые нужно переместить. .P \fIstatus\fP is an array of integers that return the status of each page. The array contains valid values only if \fBmove_pages\fP() did not return an error. Preinitialization of the array to a value which cannot represent a real numa node or valid error of status array could help to identify pages that have been migrated. .P В аргументе \fIflags\fP указываются типы перемещаемых страниц. Флаг \fBMPOL_MF_MOVE\fP означает, что будут перемещены только страницы, которые монопольно используются процессом. Флаг \fBMPOL_MF_MOVE_ALL\fP означает, что также будут перемещены страницы, которые используются совместно с другими процессами. Для использования флага \fBMPOL_MF_MOVE_ALL\fP процесс должен быть привилегированным (\fBCAP_SYS_NICE\fP). .SS "Состояние страницы в массиве состояний" В каждом элементе массива \fIstatus\fP могут возвращаться следующие значения: .TP \fB0..MAX_NUMNODES\fP Номер узла, в котором расположена страница. .TP \fB\-EACCES\fP Страница отображается несколькими процессами и может быть перемещена только, если указан флаг \fBMPOL_MF_MOVE_ALL\fP. .TP \fB\-EBUSY\fP Страница в данный момент занята и не может быть перемещена. Попробуйте позднее. Такое случается, если со страницей выполняется операция ввода\-вывода или другая подсистема ядра удерживается ссылку на эту страницу. .TP \fB\-EFAULT\fP Это нулевая страница или область памяти не отображена процессом. .TP \fB\-EIO\fP Не удалось выполнить обратную запись на страницу. Для перемещения требуется выполнить обратную запись, так как данные страницы неактуальны (dirty), но файловая система не предоставляет функцию переноса (migration), которая позволила бы переместить неактуальные страницы. .TP \fB\-EINVAL\fP Нельзя переместить неактуальные страницы. Файловая система не предоставляет функцию переноса (migration), поэтому нет возможности выполнить обратную запись на страницы. .TP \fB\-ENOENT\fP Страница отсутствует. .TP \fB\-ENOMEM\fP Не удалось выделить память на узле назначения. .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" .\" FIXME . Is the following quite true: does the wrapper in numactl .\" do the right thing? On success \fBmove_pages\fP() returns zero. On error, it returns \-1, and sets \fIerrno\fP to indicate the error. If positive value is returned, it is the number of nonmigrated pages. .SH ОШИБКИ .TP \fBPositive value\fP .\" commit a49bd4d7163707de377aee062f17befef6da891b The number of nonmigrated pages if they were the result of nonfatal reasons (since Linux 4.17). .TP \fBE2BIG\fP .\" commit 3140a2273009c01c27d316f35ab76a37e105fdd8 Слишком много перемещаемых страниц. Начиная с Linux 2.6.29, ядро не генерирует эту ошибку. .TP \fBEACCES\fP .\" FIXME Clarify "current cpuset" in the description of the EACCES error. .\" Is that the cpuset of the caller or the target? Один из узлов назначения не разрешён для текущего набора ЦП. .TP \fBEFAULT\fP Недоступен массив параметров. .TP \fBEINVAL\fP Указаны флаги, отличные от \fBMPOL_MF_MOVE\fP и \fBMPOL_MF_MOVE_ALL\fP, или предпринята попытка переместить (migrate) страницы нити ядра. .TP \fBENODEV\fP Один из узлов назначения недоступен (not online). .TP \fBEPERM\fP Вызывающий указал флаг \fBMPOL_MF_MOVE_ALL\fP, но у него не хватает привилегий (\fBCAP_SYS_NICE\fP). Или вызывающий попытался переместить страницы процесса, принадлежащие другому пользователю, но не имеет привилегий для этого (\fBCAP_SYS_NICE\fP). .TP \fBESRCH\fP Процесс не существует. .SH СТАНДАРТЫ Linux. .SH ИСТОРИЯ Linux 2.6.18. .SH ЗАМЕЧАНИЯ Информация о библиотеке доступна в \fBnuma\fP(7). .P .\" FIXME Clarify "current cpuset". Is that the cpuset of the caller .\" or the target? Используйте \fBget_mempolicy\fP(2) с флагом \fBMPOL_F_MEMS_ALLOWED\fP для получения набора узлов, которые доступны в текущем наборе ЦП. Заметим, что эта информация может измениться в любое время вручную или при автоматической перенастройке набора ЦП. .P Использование этого вызова может привести к тому, что расположение страниц (на узле) нарушит политику памяти, установленную для заданных адресов (см. \fBmbind\fP(2)) и/или заданного процесса (см. \fBset_mempolicy\fP(2)). То есть политика памяти не ограничивает узлы назначения, используемые \fBmove_pages\fP(). .P Заголовочный файл \fI\fP не включён в glibc, его можно найти в пакете с именем \fIlibnuma\-devel\fP или подобным названием. .SH "СМ. ТАКЖЕ" \fBget_mempolicy\fP(2), \fBmbind\fP(2), \fBset_mempolicy\fP(2), \fBnuma\fP(3), \fBnuma_maps\fP(5), \fBcpuset\fP(7), \fBnuma\fP(7), \fBmigratepages\fP(8), \fBnumastat\fP(8) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан aereiae , Alexey , Azamat Hackimov , Dmitriy S. Seregin , Dmitry Bolkhovskikh , ITriskTI , Max Is , Yuri Kozlov , Иван Павлов и Малянов Евгений Викторович . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .