Quebrando alguns mitos do Yocto Project

- por Sergio Prado

Categorias: Yocto Project Tags: ,

O Yocto Project tem evoluído rapidamente, mas ainda existem alguns mitos relacionados a este projeto quando o comparamos com outras ferramentas de build como o Buildroot.

yocto-project

Um dos mitos do Yocto Project é o tempo excessivo de compilação.

Me lembro que no começo do projeto a primeira compilação levava mesmo muitas horas. Pois é, hoje leva um pouco mais que meia hora, se sua máquina for boa e se tiver uma conexão razoável com a Internet.

Para comparar os tempos de compilação, gerei uma distribuição completa para a Beaglebone Black com o Buildroot e com o Yocto Project. Para isso, utilizei uma máquina com o Ubuntu 14.04 64 bits, processador Intel i7-3770 3.40GHz (4 núcleos com Hyper-Threading) e 16GB de RAM.

A geração da distribuição completa (toolchain, bootloader, kernel, rootfs) no Buildroot levou aproximadamente 48 minutos:

$ wget https://buildroot.org/downloads/buildroot-2016.08.1.tar.gz
$ tar xfv buildroot-2016.08.1.tar.gz
$ cd buildroot-2016.08.1/
$ sed -i "s/^# BR2_TARGET_ROOTFS_TAR.*/BR2_TARGET_ROOTFS_TAR=y/" configs/beaglebone_defconfig
$ make beaglebone_defconfig
$ make
real 48m34.125s
user 53m0.828s
sys 9m51.594s

Já a geração da distribuição completa (toolchain, bootloader, kernel, rootfs) com o Yocto Project levou aproximadamente 46 minutos!

$ git clone -b krogoth git://git.yoctoproject.org/poky
$ source poky/oe-init-build-env
$ sed -i "s/^MACHINE.*/MACHINE ?= \"beaglebone\"/" conf/local.conf
$ time bitbake core-image-minimal
real 46m10.218s
user 231m39.627s
sys 46m55.965s

Agora vejam que interessante. O campo “user” do comando time representa o tempo total de CPU gasto pelo processo rodando em user space e o campo “sys” representa o tempo total de CPU gasto pelo processo rodando em kernel space. Isso significa que, se somarmos “user” e “sys” temos o tempo total de CPU consumido pelo processo.

Fazendo este cálculo, podemos verificar que a compilação do Buildroot consumiu aproximadamente 63 minutos e a compilação do Yocto Project consumiu aproximadamente 258 minutos (isso porque o Yocto Project processa muito mais receitas na sua primeira compilação). Porém, como o Yocto Project é muito melhor em paralelizar o trabalho de compilação, os tempos finais de compilação ficaram bem parecidos!

Um outro mito comum do Yocto Project é que ele gera um rootfs muito grande. Isso não é necessariamente verdade!

O Buildroot gerou um rootfs (arquivo no formato tar) de aproximadamente 2MB:

$ ls -lh output/images/rootfs.tar
-rw-r--r-- 1 sprado sprado 2,0M Nov 12 17:01 output/images/rootfs.tar

E o Yocto Project gerou um rootfs (arquivo no formato tar) de aproximadamente 5,3MB. Sim, é um pouco mais que o dobro da imagem gerada pelo Buildroot, mas não é nada muito excessivo.

$ bzcat tmp/deploy/images/beaglebone/core-image-minimal-beaglebone.tar.bz2 > rootfs.tar
$ ls -lh rootfs.tar
-rw-rw-r-- 1 sprado sprado 5,3M Nov 12 18:01 rootfs.tar

E se trocarmos a configuração da distro no local.conf para “poky-tiny“, que inclui menos componentes de software e utiliza a musl como biblioteca do sistema, o tamanho do rootfs gerado pelo Yocto Project diminui para 1,6MB, menor que o do Buildroot!

$ sed -i "s/^DISTRO.*/DISTRO ?= \"poky-tiny\"/" conf/local.conf
$ bitbake core-image-minimal
$ bzcat tmp/deploy/images/beaglebone/core-image-minimal-beaglebone.tar.bz2 > rootfs.tar
$ ls -lh rootfs.tar
-rw-rw-r-- 1 sprado sprado 1,6M Nov 13 11:02 rootfs.tar

É lógico que estes testes podem variar dependendo da capacidade da sua máquina de desenvolvimento e das características do kit de desenvolvimento e da imagem gerada. Minha intenção aqui é mostrar que o Yocto Project tem evoluído bastante nos últimos releases, e isso inclui melhorias nos tempos de compilação e no tamanho das imagens geradas.

O Buildroot é uma ferramenta fantástica, bem mais simples e intuitiva que o Yocto Project. Por outro lado, o Yocto Project é bem mais flexível, completo e dá um controle maior ao desenvolvedor de distribuições Linux. Na prática, estas ferramentas se complementam. Melhor para nós, que temos duas ótimas opções para construir distribuições Linux para dispositivos embarcados.

Um abraço,

Sergio Prado

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.