Linux x86_64Memória#279
move_pages
Move páginas individuais e específicas de um processo para nós NUMA escolhidos, ou apenas consulta sua localização atual.
Descrição
Controle mais fino que `migrate_pages`: opera por endereço de página individual em vez de por conjunto de nós inteiro.
man 2Desde o kernel 2.6.18
Assinatura
long move_pages(
int pid,
unsigned long count,
void ** pages,
const int * nodes,
int * status,
int flags
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| pid | int | Processo alvo; 0 significa o chamador. |
| count | unsigned long | Número de páginas em `pages`. |
| pages | void ** | Endereços das páginas a mover/consultar. |
| nodes | const int * | Nó de destino para cada página, ou NULL para apenas consultar a localização atual. |
| status | int * | Recebe o nó atual (ou código de erro) de cada página. |
| flags | int | MPOL_MF_MOVE, MPOL_MF_MOVE_ALL. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | pidint |
| rsi | argumento 2 | countunsigned long |
| rdx | argumento 3 | pagesvoid ** |
| r10 | argumento 4 | nodesconst int * |
| r8 | argumento 5 | statusint * |
| r9 | argumento 6 | flagsint |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EACCES(13)
- Permissão negada.
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
- EINVAL(22)
- Argumento inválido.
- ENODEV(19)
- Dispositivo inexistente.
- EPERM(1)
- Operação não permitida (falta de privilégio).
- ESRCH(3)
- Processo inexistente.