É tempo de festa! O kernel Linux 3.7 foi lançado no dia 11 de dezembro com o novo recorde de 16 milhões de linhas de código distribuídas em quase 41 mil arquivos. Ainda sob o codinome de "Terrified Chipmunk" (esquilo aterrorizado), a nova versão do kernel do pinguim precisou de 71 dias de amadurecimento desde a abertura de sua "janela de inclusão" (merge window). Neste período, praticamente 12.000 commits foram aceitos, o maior valor desde o kernel 2.6.25 e a maior densidade de commits por dia já alcançada pela gloriosa equipe de desenvolvedores deste que é um dos projetos de desenvolvimento colaborativo de software com maior sucesso da história.
As novidades do kernel 3.7, no entanto, vêm mais no sentido da evolução do que da revolução, isto é, temos suporte a novas versões de protocolos e de hardwares, mas não há muitos novos recursos — estes já estão agendados para as versões 3.8 e 3.9; veja adiante.
Rede
Na área de redes, a principal novidade é o TCP Fast Open no lado servidor, que complementa o recurso do lado cliente incluído no kernel 3.6. A técnica, desenvolvida por engenheiros do Google, tem como objetivo acelerar o estabelecimento de novas conexões HTTP por meio da inclusão de um payload nos pacotes que participam do 3-way handshake do TCP e, nos testes,
Cabe uma repetição do artigo sobre o kernel 3.6:
Tradicionalmente, o "three-way handshake" do protocolo TCP requer a transmissão de dois pacotes (um do cliente e um do servidor) antes de se iniciar o envio de dados propriamente ditos. Em conexões que trocam dados pequenos, isto significa um grande overhead — portanto, latência — antes de a conversa começar.
O TCP Fast Open (muito bem descrito neste artigo da LWN) é um procedimento para reduzir esse problema por meio da inclusão de dados já no primeiro pacote enviado do cliente para o servidor. O mecanismo envolve a geração de cookies TCP ao se estabelecer a primeira conexão entre o cliente e o servidor, funciona perfeitamente bem com interlocutores que ainda não tenham suporte à nova técnica e, segundo seus proponentes, oferece ganhos de desempenho entre 4% e 41% na latência das conexões típicas da Web, dependendo do cenário.
Além disso, o controverso NAT em IPv6 foi finalmente incluído no kernel. A controvérsia advém principalmente do fato de que o IPv6, com seu espaço quase infinito de endereços IP, não teria qualquer uso para o NAT (Network Address Translation), usado atualmente para permitir a conexão de mais máquinas à Internet por meio de um único IP público e causador de verdadeiros pesadelos para algumas aplicações que requerem NAT traversal. A principal demanda pelo NAT66, como é chamada essa modalidade de NAT para IPv6, vem justamente de administradores que desejam tornar "opaca" a topologia de suas redes internas. Segundo a especificação http://tools.ietf.org/html/rfc6296 do, no entanto, o padrão não viola o princípio do alcance ponto-a-ponto global da Internet, além de ser tecnicamente bem mais simples do que o tradicional NAT sobre IPv4 usado por tantos roteadores Internet afora.
Por último, chegou o suporte ao recurso vxlan, que permite transmitir pacotes Ethernet de camada 2 via UDP. Isto permite vários avanços, seja no número máximo de VLANs de um sistema (aumentado de 4.096 para mais de 16 milhões) ou na flexibilidade das VLANs (1 para N, em lugar de ponto-a-ponto). O vxlan é muito desejável em ambientes com amplo uso de virtualização.
Sistemas de arquivos
O protocolo SMB2, atualização do SMB (Server Message Block) implementada nos sistemas Windows a partir do Windows Vista, agora possuem suporte no sistema de arquivos CIFS implementado no Linux.
O NFS 4.1 finalmente se livrou do status de experimental. Os recursos mais chamativos dessa nova versão do famoso sistema de arquivos de rede é o pNFS (ou parallel NFS), que permite dsitribuir os conteúdos de um sistema de arquivos por múltiplos servidores, seja no nível dos blocos ou dos arquivos.
Enquanto isso, o aguardado Btrfs recebeu melhorias significativas no tratamento de operações síncronas em arquivos. O cenário mais beneficiado, de acordo com os desenvolvedores, oferecia desempenho particularmente ruim até o momento: imagens de máquinas virtuais localizadas em um sistema de arquivos Btrfs, com os sistemas operacionais hóspedes realizando muitas operações síncronas. O avanço pode até parecer pouco importante em princípio, mas seus benefícios são significativos para muitos administradores e usuários em casos reais de uso. Além disso, o antigo limite presente no Btrfs de 20 hard links por diretório foi aumentado para 65 mil.
O Ext4 também ganhou um novo recurso que, no entanto, não tem tanto apelo a muitos usuários: agora é capaz de redimensionar sistemas de arquivos maiores que 16 TiB.
ARM 64 (AArch64) e ARM 32
A fragmentação das arquiteturas ARM de 32 bits sempre causou problemas de manutenção e duplicação de código no kernel Linux. Para a versão de 64 bits, os desenvolvedores — fortemente auxiliados por funcionários da ARM — decidiram impedir a fragmentação e já criaram as bases da nova arquitetura de forma unificada, sob o nome de AArch64.
Na área do ARM 32, no entanto, a batalha não está perdida. O novo kernel permite criar uma única imagem compatível com múltiplas (sub-)arquiteturas. No momento, estas são Highbank, Mvebu, Picoxcell, Socfpga e Vexpress, mas, no futuro, o número certamente será expandido.
E outra novidade interessantíssima: os tímidos recursos de virtualização incluídos em certas CPUs ARM agora já têm suporte pelo Xen. O KVM, no entanto, ainda está apenas nos planos.
Segurança
A partir da versão 3.7, o kernel Linux já pode contar com a assinatura criptográfica de módulos. Desta forma, o kernel pode se recusar a carregar módulos que não tenham sido assinados, de forma a bloquear o uso de rootkits. Diversas distribuições comerciais já fazem isso há tempos.
A Intel vai introduzir um novo recurso de segurança nos processadores da família Haswell, a ser lançada em 2013. Sob o nome de SMAP (Supervisor Mode Access Prevention), a novidade impede alterações no conteúdo de páginas de memória de programas até pelo kernel, o que fecha uma importante porta de invasão por meio da execução de código maliciosamente injetado em páginas alheias.
Virtualização e perf
Os contêineres lxc, alternativa oficial do Linux à virtualização do espaço de usuário, ainda requer diversos ajustes. Um importante avanço, contudo, veio no Linux 3.7 com novos mecanismos de isolamento de namespaces de usuários. O kernel 3.8 deve trazer outra série de novidades que, ao final, tornarão mais fácil a criação e manipulação desses contêineres.
A infra-estrutura do perf conta agora com o perf-kvm para contabilizar e explicar os eventos de troca de ambiente virtualizado para físico na CPU, chamado de "VM exit". Nas primeiras gerações de CPUs com instruções de virtualização, a maioria das instruções privilegiadas de sistemas virtualizados exigiam a troca do ambiente na CPU. Por exemplo, isto ocorria a cada interrupção gerada pelo recebimento de um pacote de rede, o que prejudicava significativamente o desempenho desse sistema em máquinas virtuais. Posteriormente, novos recursos nas CPUs x86_64, como o Intel VT-d por exemplo, cortaram drasticamente a frequência do "VM exit". Agora, com o perf-kvm, torna-se ainda mais fácil "caçar" tais ocorrências de forma a otimizar ainda mais a infra-estrutura de virtualização do kernel.
Outra novidade do perf — mas sem relação com virtualização — é a ferramenta perf trace, que promete tornar mais prática a vida de quem depende do já idoso strace. Em vez de recorrer à chamada de sistema ptrace() como o strace, a nova ferramenta usará os recursos de tracing internos do kernel. Uma vantagem potencial é a abrangência desses recursos de tracing, que podem permitir o monitoramento de diversos aspectos relevantes além das chamadas de sistemas.
Vídeo
Os três principais divers de vídeo receberam grande volume de atividades nos commits. No caso do Nouveau pra placas NVIDIA, no entanto, as mudanças consistiram somente em uma forte re-estruturação do código do driver. No futuro, essa aparentemente pequena mudança pode significar a chegada muito mais rápida do suporte a novos recursos — quem sabe possamos começar pelo suporte completo ao SLI?
As novidades no driver Radeon para chips AMD já trazem mudanças mais perceptíveis. Configurar múltiplos monitores conectados a uma única placa se torna mais fácil e mais flexível do que antes. Para usuários de laptops com esses chips gráficos, o driver presente no novo kernel traz maior economia de energia e maior compatibilidade no controle do brilho de certos modelos de máquinas.
Por último, o i915 para chips Intel também traz mudanças nas profundezas do driver imperceptíveis ao usuário, assim como facilidades facilmente percebidas na seleção de saídas de vídeo e na definição do consumo máximo de energia que o chip de vídeo deve ter (via sysfs).
Drivers, áudio, celulares e vídeo games
O driver HDA para chips de áudio agora ativa por padrão as técnicas de economia de energia. Além disso, o driver também permite que dispositivos PCI ou PCI express entrem em sleep. Internamente, o kernel facilitou a configuração de canais de áudio.
O driver ipheth acrescentou suporte ao tethering (ancoragem, como alguns fabricantes chamam) do iPhone 5. Donos do Sony Playstation 3 podem usar novamente seu controle remoto para sua unidade Blu-Ray, mas agora por meio do subsistema HID (Human Interface Devices). Por último, o Nintendo Balance Board, feito para o console Wii, também dispõe de suporte no Linux 3.7.
Armazenamento
Se você utiliza RAID via software sobre dispositivos SSD, vai ficar feliz em saber que agora o subsistema md do kernel oferece suporte ao recurso discard, que tende a aumentar o desempenho dessa nova classe de dispositivos de armazenamento.
Ainda na área do RAID via software, o novo comando WRITE SAME tende a acelerar a criação de arrays por permitir a emissão de um único comando de gravação a múltiplos dispositivos — especialmente útil quando se deseja gravar o mesmo dado em vários discos.
No campo dos discos SATA, o novo recurso "Aggressive SATA device sleep" também recebeu suporte, o que permitirá uma redução ainda maior do consumo de energia nesses dispositivos.
Futuro
O recurso de cgroups (já cobertos aqui anteriormente) deve ganhar uma extensão ao controlador memory chamada kmem. Como o nome sugere, essa extensão permitirá limitar a memória dedicada pelo kernel ao gerenciamento da memória dos processos pertencentes ao cgroup. O principal uso imaginado para a extensão, no momento, é a contenção de fork bombs.
A opção CONFIG_EXPERIMENTAL, que identifica opções de configuração do kernel como experimentais, será removida no Linux 3.8. Até mesmo os estáveis kernels de distribuições dependem de opções marcadas como experimentais, o que indica que já não deveriam ser consideradas desta forma. A identificação de opções verdadeiramente experimentais deverá ser feita, daí em diante, com o termo "(EXPERIMENTAL)" na descrição das opções.
Sistemas que empregam a arquitetura NUMA (Non-Uniform Memory Architecture) possuem regiões de memória com acesso preferencial por determinada(s) CPU(s). No entanto, a memória do kernel dedicada a controlar processos não difere tais regiões. Para o kernel 3.8, já há dois conjuntos separados de patches para resolver isto de forma a tirar proveito máximo do acesso preferencial de cada CPU a sua zona de memória, inclusive por parte da memória do kernel.
Até a próxima!
Links interessantes (alguns usados na escrita deste artigo)
Outros artigos desta série
- As novidades do kernel Linux 3.6, 3.5, 3.4, 3.3, 3.2, 3.1, 3.0, 2.6.39 (e preview), 2.6.38 (também com preview), 2.6.37, 2.6.36, 2.6.35 e 2.6.34
Outros artigos deste autor
Confira também os outros artigos deste autor.
Tags: 
kernel
3.7
pablo_hess
linux