Jornal - Linux News

Remover syscall do Kernel

 
Imagem de juliano ramos
Remover syscall do Kernel
por juliano ramos - sexta, 6 Jul 2018, 15:21
 

Esforço para remover todas as invocações de chamadas (syscall) do espaço do Kernel

Há um esforço em andamento para reduzir e, finalmente, remover todas as invocações de chamadas do sistema de dentro do espaço do kernel. Dominik Brodowski estava liderando esse esforço, e ele postou alguns patches para remover muitos casos do kernel. Entre outras coisas, disse ele, esses patches facilitariam a limpeza e a otimização dos pontos de entrada do syscall , e também a limpeza das partes do kernel que ainda precisavam fingir estar no espaço do usuário, apenas para que pudessem continuar usando syscalls.

A lógica por trás desses patches, conforme expressa por Andy Lutomirski , era impedir que o código do usuário tivesse acesso à memória do kernel. O compartilhamento de syscalls entre o espaço do kernel e o espaço do usuário tornou isso impossível no momento. Andy esperava que os patches entrassem no kernel rapidamente, sem precisar esperar por mais limpeza.

Linus Torvalds não tinha absolutamente nenhuma crítica a esses patches, e ele indicou que esta era uma mudança bem desejada. Ele se ofereceu para fazer um pouco de limpeza extra com o cronograma de lançamento do kernel para facilitar as tarefas de Dominik. Linus também concordou com Andy que qualquer esforço de limpeza poderia esperar - ele não se importava em aceitar patches feios para atualizar as convenções de chamadas do syscall primeiro, e depois aceitar os patches de limpeza mais tarde.

Ingo Molnar previu que, com as mudanças de Dominik, o tamanho do kernel compilado diminuiria - sempre uma coisa boa. Mas Dominik disse que não, e na verdade ele correu alguns números rápidos para Ingo e descobriu que com seus patches, o kernel compilado era na verdade alguns bytes maiores. Ingo ficou surpreso, mas não envergonhado, dizendo que o ligeiro aumento no tamanho não seria um obstáculo.

Este projeto é semelhante - embora talvez menor em escopo - ao esforço para se livrar do bloqueio do kernel grande (BKL). No caso da BKL, ninguém poderia descobrir por anos nem mesmo como começar a substituí-la, até que finalmente as pessoas decidiram converter todas as instâncias de BKL em implementações locais idênticas que poderiam ser substituídas gradualmente com travas mais especializadas e menos pesadas. Depois disso, foi apenas uma questão de slogging através de cada um até que, finalmente, mesmo as instâncias mais exigentes foram substituídas por código de bloqueio mais especializado.

Dominik parece estar usando uma técnica similar agora, em que áreas do kernel que ainda precisam de syscalls podem se mascarar como espaço do usuário, enquanto áreas do kernel que são mais fáceis de corrigir são limpas primeiro.