Redução do kernel Linux e do filesystem para IoT

Essa é uma noticia mais de um mês atrás. mas já que estamos falando sobre o toybox na série "Muito além do GNU" essa semana, porque não estender mais o assunto para conhecer mais sobre a ferramenta?

Na Embedded Linux Conference que aconteceu do dia 21 a 23 de Fevereiro deste ano em Portland, Michael Opdenacker da Free Electrons apresentou a palestra sobre como reduzir o tamanho do sistema (tando o kernel quando o user space) já que Linux estava cedendo espaço na IoT para os RTOSes.

Link para o artigo com o vídeo em linux.com

Nessa, Michael apresentou utilizando ferramentos como o LLVM/Clang  3.8.1 no lugar do GCC (mesmo que o GCC 6.2 tenha apresentado melhoria diante o GCC 4.7 no ARM). Com o GCC podemos utilizar a opção -Os para reduzir o espaço enquanto que o LLVM/Clang faz isso “out of the box sem precisar fazer nada”. O LLVM/Clang compila o kernel também para a otimização de desempenho tornando-se melhor do que o que temos hoje com o GCC LTO hoje.

Chegaram a sugerir patches de melhoras para o GCC, mas os patches causaram novos problemas e os desenvolvedores temeram que isso criaria novos bugs dificeis de serem rastreados e por isso os patches não foram aceitos.

Outras tecnicas foram aparesentadas para utilizar com o GCC como a opção -mthumb (que no compilador do Ubuntu vem por padrão) para fazer uma mescla de instruções de 16 e 32 bits aos invés de somente 32 em procedores ARM, a opção “make tinyconfig” que é utilizada desde o kernel 3.18, para combinar junto ao “make allnoconfig” com mais algumas configurações e assim reduzir o tamanho dos binários 
“ela utiliza gcc optimize for size, assim o código pode ser mais lento mas se torna menor”
“Você habilita a compressão XZIP do kernel, e você economiza entre 6 a 10KB.”
Habilitar a opação obj-y no kernel Makefiles podendo compilar o kernel sem a necessidade do ptrace o tempo todo, que em ARM consome 14KB. 

no lado do user space, foram sugeridas ferramentas como o próprio toybox:

Site oficial to toybox

“Toybox possui as mesmas aplicações e a maioria dos mesmos recursos que o busybox, mas utiliza somente 84KB ao invés de 100KB,”
“Se você quiser um shell com apenas algunas algumas utilidades na linha de comando, toybox poderia lhe economizar milhares de bytes, embora ele seja menos configurável."
O uso da Musl que utiliza menos espaço do que glibc (sem duvida) ou que a uclibc foi outra opção sugerida por Michael. apresentando um teste de comparação entre bibliotecas compilando um programa hellho.c com o GCC 6.2, o resultado final com a musl foi de 7.3kb,  67KB com a uclibc-ng 1.0.22 e 49KB com a glibc.

Para reduzir o filesystem, Michael sugeriu o uso do initramfs que lhe permite realizar boot mais rápido uma vez que não inicializa um filesystem e drivers armazenados. Para sistemas com mais RAM, Michael sugere o uso de filesystems mais compactos com o squashfs, JFFS2 ou ZRAM. Michael conclui que ainda há melhorias significativas a serem feitas no kernel space e no userspace. Daí eu imagino:

Se Linux já é bom, imagina tendo essas melhorias. Espero ainda ver isso =)

Sou analista (bilíngue) de microinformática, professor de inglês, tradutor e interprete.

 Sou também redator no blog Diolinux e um dos tradutores da distribuição Funtoo. Já fiz parte da distribuição IPFire por um tempo também, uma distribuição que gosto muito na parte de administrar o servidor por uma interface web.
 Possuo um manual chamado Caixa de Ferramentas do UNIX traduzido por mim e revisado por mais amigos que abrange tanto Linux (dentre algumas distribuições) quanto Solaris, BSDs, Mac OS X e em alguns momentos o Windows (devido a integração cliente servidor).
 Recentemente estou trabalhando em um manual de migração para Linux.

Compartilhe isso

Leia outros posts

Próximo post
« Próximo post
Post Anterior
Próximo Post »

Compre na imago brinquedos

Compre na imago brinquedos
Utilize o cupom de desconto TOCADOTUX e ecnomize 5% na sua compra