Linux x86_64E/S assíncrona & eventos#425
io_uring_setup
Cria uma instância io_uring: duas filas circulares compartilhadas com o kernel para submissão e conclusão de operações de I/O assíncronas de alta performance.
Descrição
A interface de I/O assíncrono mais moderna e de menor overhead do Linux. Ao contrário do AIO tradicional, cobre praticamente qualquer operação (não só I/O de arquivo com O_DIRECT) — read/write, accept/connect, openat, send/recv, e até chamadas arbitrárias via linked ops — e pode operar quase inteiramente sem syscalls adicionais após a configuração inicial, através de memória compartilhada e (opcionalmente) um kernel thread de polling.
Header:
linux/io_uring.hman 2Desde o kernel 5.1Assinatura
int io_uring_setup(u32 entries, struct io_uring_params * params);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| entries | u32 | Tamanho desejado da fila de submissão (arredondado para a próxima potência de 2). |
| params | struct io_uring_params * | Configura flags e recebe os deslocamentos de memória das filas compartilhadas. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | entriesu32 |
| rsi | argumento 2 | paramsstruct io_uring_params * |
Valor de retorno
Um descritor de arquivo representando a instância io_uring em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EFAULT(14)
- Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).
- EINVAL(22)
- Argumento inválido.
- EMFILE(24)
- Limite de arquivos abertos do processo atingido.
- ENOMEM(12)
- Memória insuficiente para completar a operação.
- EPERM(1)
- Operação não permitida (falta de privilégio).