Pergunta: quantos dias são necessários para os desenvolvedores do kernel Linux assimilarem 10.247 commits que resultam num total de 29.733 arquivos? Acertou quem respondeu 71!
O kernel Linux 3.6, o mais volumoso da história (como de praxe a cada nova versão) foi lançado no dia 30 de setembro e finalmente conta com um novo codinome, "Terrified Chipmunk". Seus commits, produzidos por uma comunidade de mais de 200 empresas (num total de 1.200 pessoas colaborando) são os menos numerosos desde a versão 3.1, mas, como todos já sabem, isto não indica nenhum arrefecimento dessa frenética comunidade. Muito pelo contrário: o novo kernel está repleto de novidades interessantíssimas!
Standby híbrido em notebooks
Todo dono de um computador portátil já conhece os recursos de suspender para a memória (suspend to RAM) e hibernar (hibernate ou suspend to disk). O primeiro envolve salvar o estado do sistema na memória e desligar o restante do hardware, de forma a manter um consumo mínimo de energia e permitir que o notebook seja "acordado" em menos de cinco segundos.
A hibernação é semelhante, mas suspende o sistema e grava o estado da memória no disco (geralmente, na partição de swap) e desliga completamente o hardware. Com isto, a bateria dura ainda mais, mas a máquina leva mais de alguns segundos para "acordar", já que é preciso passar pelo carregador de boot normamlente (como num boot normal) e depois ainda carregar os vários gigabytes do disco para a memória.
E o que acontece quando você suspende o sistema para a memória e, mesmo consumindo pouca bateria, ela acaba? Isto é equivalente ao famoso dedoff ou caboff: o sistema é desligado sem que seu estado seja gravado no disco. Ao religar a máquina, ela faz um novo boot, executa o fsck nos discos e carrega o sistema novamente do zero.
O novo recurso suspend to both faz o que o nome sugere: suspende o estado do sistema tanto para a memória quanto para o disco. Desta forma, enquanto houver bateria o sistema acordará rapidamente. E no caso de a bateria do notebook acabar, todo o estado da memória será recuperado diretamente do disco, de forma que não se arrisca cair numa situação de inconsistência do sistema.
Sistemas de arquivos
O btrfs foi o grande ganhador de recursos no kernel 3.6. Ele não oferece suporte a quotas de usuários, mas recebeu dois recursos que mimetizam seu resultado: limites de tamanhos (quotas) para subvolumes e também grupos de quotas. Com isto, o administrador pode "criar um subvolume separado para o diretório home de cada usuário e atribuir um tamanho máximo a ele", como define muito bem o kernelnewbies. E, para definir a mesma quota para múltiplos subvolumes de uma única vez, basta criar um grupo de quotas e atribuir todos os subvolumes desejados a esse grupo.
Outro recurso interessante do btrfs é a possibilidade de calcular as diferenças entre subvolumes ou snapshots. Ele permite gerar um arquivo de diff entre um subvolume e seu snapshot e depois aplicar as diferenças, o que pode ser muito bom para tarefas de backup.
Por último, os tão desejados clones de arquivos que o mecanismo de copy-on-write do btrfs permite agora podem abranger múltiplos subvolumes. Até o kernel 3.5, somente arquivos de um mesmo subvolume podiam ter seu conteúdo "desduplicado" pelo comando cp --reflink.
Por último, uma forma de ataque relativamente simples foi corrigida no kernel. Se ativada via sysctl, essa correção impede que o kernel siga links (tanto simbólicos quanto hard links) que apontem para algum local superior (isto é, mais próximo da raiz) da árvore de diretórios. Como de costume, a LWN cobre muito bem este assunto.
Armazenamento e swap
Fazer swap em dispositivos de bloco NBD (network block device) ou sistemas de arquivos NFS -- ou seja, pela rede -- jamais foi recomendável: em caso de uso intensivo da swap, o sistema pode sofrer um deadlock e jamais retornar à atividade.
O Linux 3.6 ganha, finalmente, a posibilidade de fazer swap pela rede sem esses riscos com mecanismos explicados em 2011 na LWN.
Outra novidade na área de storage é uma interface que permite a programas avisar ao kernel quando uma partição mudar de tamanho. A interface será usada pelo resizepart, novo programinha a ser incluído na próxima versão do pacote util-linux.
TCP Fast Open
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.
O Linux 3.6 já conta com a parte cliente desse suporte. Falta ainda a inclusão do suporte ao lado servidor para tornar o kernel Linux ainda mais avançado e desejável para serviços de rede.
Golpe contra o bufferbloat
O problema do bufferbloat já foi explicado aqui algumas vezes e está bem detalhado Internet afora: resumidamente, trata-se do excesso de buffers de transmissão de pacotes de rede em cada um dos dispositivos por onde passa um pacote entre sua origem e seu destino.
O mais recente golpe aplicado contra esse problema é o recurso de TCP small queues, também muito bem detalhado na LWN. Com ele, o kernel observa constantemente o tamanho dos buffers de escrita (ou seja, saída) dos sockets com respeito aos limites de transmissão. Caso os buffers já estejam acima do limite estabelecido por padrão, 128 KiB por socket o novo pacote não entrará na fila e precisará aguardar.
Os resultados relatados pelo desenvolvedor do patch do kernel impressionam: há uma redução real do tamanho dos buffers e nenhuma perda de throughput a principal preocupação quando se diminui o tamanho de um buffer.
Gerenciamento de energia
Dispositivos PCI Express possuem alguns estados de economia de energia, sendo o mais profundo deles o corte total da alimentação, também chamado de D3cold. A partir da versão 3.6, o Linux oferece suporte a este estado em tais dispositivos, o que permite reduzir ainda mais o consumo de energia do sistema como um todo em diversas situações.
Cgroups de HugeTLB
O subsistema de cgroups (veja três artigos abaixo) recebeu no Linux 3.6 um novo controlador: hugetlb. Com a novidade, torna-se possível limitar o uso de páginas gigantes (huge pages) de memória para cada cgroup.
Curiosamente (na minha opinião, pelo menos), este recurso ganhou um controlador à parte, em vez de ser incluído no controlador de memória.
Virtualização
Já foi incluído na árvore principal do kernel o driver tcm_vhost. Embora ainda tenha qualidade de staging, ele está disponível fora dessa árvore. Com ele, máquinas virtuais sobre KVM serão capazes de utilizar dispositivos SCSI do anfitrião com apenas uma perda mínima de desempenho. Esse KVM...
Outra novidade é uma redução geral no tratamento de interrupções geradas pelo hóspede e enviadas ao sistema anfitrião, o que pode trazer certa melhoria de desempenho em vários tipos de tarefas.
Ainda na área de virtualização, as tecnologias de virtualização de I/O embutidas em nos processadores x86(_64) modernos agora promovem um isolamento mais eficaz de dispositivos PCI e PCI Express por meio dos IOMMU Groups, que também estão ajudando a construir o framework VFIO (Virtual Function I/O). No futuro, o VFIO permitirá ganhos consideráveis de desempenho ao entregar dispositivos PCI e PCI Express diretamente para máquinas virtuais via espaço de usuário o que também, de quebra, reduz o risco desta tarefa para o anfitrião.
Futuro
A próxima versão do kernel, segundo o Linux Weather Forecast e The H Open, deve sair no começo de dezembro e trazer novidades no suporte a processadores ARM de 64 bits, ao recurso Supervisor Mode Access Preventionde hardwares Intel, ao protocolo SMB 2.1 no sistema de arquivos CIFS, ao protocolo de roteamento GRE em IPv6, ao TCP Fast Open no lado servidor e à extensão IMA appraisal, para uso de TPM (Trusted Platform Module).
Olhando mais longe, o mesmo site aponta como possíveis acréscimos ao nosso kernel livre preferido os patches do Android, a estabilização do sistema de arquivos Btrfs, a eterna inclusão de mais recursos da árvore realtime, o suporte à ABI x32 e a "naturalização" dos cgroups, também já abordados anteriormente aqui no blog.