Linux x86_64E/S assíncrona & eventos#427
io_uring_register
Registra recursos (buffers, descritores de arquivo, eventfd) com uma instância io_uring para reduzir overhead por operação.
Descrição
Pré-registrar buffers e descritores evita que o kernel precise validar/mapear esses recursos a cada operação individual, sendo uma das principais fontes do ganho de desempenho de io_uring sobre AIO tradicional.
Header:
linux/io_uring.hman 2Desde o kernel 5.1Assinatura
int io_uring_register(
unsigned int fd,
unsigned int opcode,
void * arg,
unsigned int nr_args
);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| fd | unsigned int | Descritor da instância io_uring. |
| opcode | unsigned int | IORING_REGISTER_BUFFERS, IORING_REGISTER_FILES, etc. |
| arg | void * | Argumento cujo formato depende de `opcode`. |
| nr_args | unsigned int | Número de elementos em `arg`. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | fdunsigned int |
| rsi | argumento 2 | opcodeunsigned int |
| rdx | argumento 3 | argvoid * |
| r10 | argumento 4 | nr_argsunsigned int |
Valor de retorno
Depende de `opcode`; em geral 0 em sucesso, -1 em erro, com errno definido.
Códigos de erro (errno)
- EBADF(9)
- Descritor de arquivo inválido.
- EBUSY(16)
- Dispositivo ou recurso ocupado.
- EINVAL(22)
- Argumento inválido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).