IO_uring continua a se provar para ser uma das inovações fundamentais mais empolgantes para o kernel Linux da última década. Embora iniciado para E/S de armazenamento assíncrono, ele viu trabalhos recentes em torno de casos de uso de rede e também impulsionando outras inovações, como o novo driver”UBD”para um driver de bloco de espaço de usuário baseado em IO_uring. Ele também continua a ser incansavelmente otimizado por Jens Axboe e outros para potencial máximo de desempenho. A mais recente inovação em torno do IO_uring que foi anunciada esta semana na Linux Plumbers Conference 2022 em Dublin é o io_uring_spawn.

Josh Triplett, que é um ex-engenheiro notável da Intel Linux e mais recentemente focado na linguagem de programação Rust, onde ele co-lidera a equipe de linguagem Rust, anunciou seu trabalho em io_uring_spawn ontem na LPC 2022. resumo de sua palestra:

io_uring permite executar um lote de operações rapidamente, em nome do processo atual. Como o nome sugere, isso funciona excepcionalmente bem para cargas de trabalho de E/S. No entanto, uma das cargas de trabalho mais proeminentes no desenvolvimento de software envolve a execução de outros processos: make e outros sistemas de compilação lançam muitos outros processos ao longo de uma compilação. Como podemos iniciar esses processos mais rapidamente?

E se pudéssemos lançar outros processos e dar-lhes trabalho inicial usando io_uring, terminando com um exec? E se pudéssemos lidar com as etapas pré-executivas para um novo processo inteiramente no kernel, sem necessidade de espaço de usuário, eliminando a necessidade de fork ou mesmo vfork e eliminando a sobrecarga de CoW da tabela de páginas?

Nesta palestra, apresentarei o io_uring_spawn, um mecanismo para lançar novos processos vazios com um io_uring associado. Mostrarei como o kernel pode iniciar um processo em branco, sem tabelas de páginas copy-on-write iniciais, e inicializar todos os seus recursos a partir de um arquivo io_uring. Vou percorrer o caminho bem-sucedido e o caminho de tratamento de erros e mostrarei como obter informações sobre o processo iniciado. Por fim, mostrarei como o espaço de usuário existente pode aproveitar o io_uring_spawn para acelerar o posix_spawn e fornecer números de desempenho para cargas de trabalho comuns, incluindo compilação do kernel.

Na verdade, seus resultados de benchmark falam por si com io_uring_spawn sendo muito mais rápido que fork ou posix_spawn e até 6~10% mais rápido que vfork sendo atribuído como mais seguro e flexível.
Este é um começo muito promissor para io_uring_spawn para o qual ele diz que está”apenas começando”. Ele está ansioso para implementar o posix_spawn em cima dele, suportando um pool de processos pré-gerado e otimizando ainda mais o clone. Aqueles que desejam aprender muito mais sobre este promissor trabalho de io_uring_spawn podem ver a apresentação de Josh Tripplett abaixo e o Conjunto de slides em PDF.

Categories: IT Info