FERRAMENTAS LINUX: O IO_uring a diciona o suporte para as Vectored FUTEX Waits no Kernel Linux 6.6

terça-feira, 15 de agosto de 2023

O IO_uring a diciona o suporte para as Vectored FUTEX Waits no Kernel Linux 6.6

 

Com o próximo ciclo do Kernel Linux 6.6, uma mudança empolgante foi recentemente incorporada à ramificação "for-next" do subsistema de blocos: o suporte IO_uring para futex/futexv.


Jens Axboe, renomado especialista em armazenamento Linux e principal desenvolvedor do IO_uring, adicionou recentemente o código à ramificação for-next do linux-block.git para habilitar esperas FUTEX vetorizadas. Em patches anteriores relacionados a esse suporte futex/futexv no IO_uring, Axboe explicou:

"A primeira solicitação de suporte futex com io_uring veio, tanto quanto me lembro, de Andres Freund, que estava trabalhando no PostgreSQL. A reestruturação de E/S assíncronas do PostgreSQL foi uma das primeiras a adotar o io_uring, e o suporte ao futex era uma extensão natural disso. Isso é relevante tanto para usabilidade quanto para eficiência e desempenho. Nas palavras de Andres:

"O suporte a esperas Futex no io_uring torna muito mais fácil evitar impasses em programas concorrentes que têm seu próprio pool de buffers: Obviamente, as páginas no pool de buffers do aplicativo devem ser bloqueadas durante as E/S. Se o iniciador da E/S A precisa esperar por um bloqueio mantido por B, o detentor do bloqueio B pode esperar até que a E/S A seja concluída. A capacidade de esperar por um bloqueio e conclusões de E/S ao mesmo tempo proporciona uma maneira eficiente de evitar tais impasses."

Em termos de eficiência, mesmo sem atingir todo o potencial, Andres diz:

"O suporte a ativação de Futex no io_uring é útil porque permite ativações direcionadas mais eficientes. Para alguns "bloqueios", o PostgreSQL tem filas implementadas no espaço do usuário, com lógica de ativação que não pode ser facilmente implementada com FUTEX_WAKE_BITSET em um único "futex de palavra" (imagine esperar até que as liberações do log de transações sejam concluídas até um determinado ponto). Portanto, uma "liberação de bloqueio" às vezes precisa ativar muitos processos em uma linha. -suja para realizar essas ativações através do io_uring leva a um aumento de 3% na taxa de transferência, com 12% menos mudanças de contexto, embora em uma carga de trabalho bastante extrema."


Esse suporte do IO_uring futex/futexv promete trazer melhorias significativas em eficiência e desempenho.

Outra adição à fila dessa ramificação na semana passada é o suporte IORING_OP_WAITID do IO_uring. O IORING_OP_WAITID é uma versão completamente assíncrona do waitid.

O Kernel Linux 6.6 está se preparando para ser mais um ciclo empolgante do kernel, com este lançamento previsto para o final do ano.




Fonte

Até a próxima !!



Nenhum comentário:

Postar um comentário