top of page
  • Zach Pfeffer

Yocto 2.2.3 Based Linux Kernel Development Only 25% Efficient


This post lists the efficiency of Linux Kernel development using Yocto. It shows that developers who use Yocto to do kernel development spend at least 75% of their recompile time waiting on the Yocto build system.

Set Up

This experiment was done in VirtualBox Version 5.1.30 r118389 (Qt5.6.2) running on this computer and OS setup.

It was run in Yocto 2.2.3 included with PetaLinux Tools 2017.4 which can be set up using these instructions.

Some Data

Time to Execute BitBake

-C, no recompile

real 1m22.290s user 0m43.175s sys 0m15.436s

-f, no recompile

real 1m16.877s user 0m41.936s sys 0m14.508s

-C, recompile

real 1m40.471s user 0m56.294s sys 0m18.285s

-f, recompile

real 1m41.264s user 0m55.497s sys 0m19.174s

Some Observations

  • Its costs more than 1 min to use Yocto 2.2.3 in this set up.

  • There was a 82% Yocto 2.2.3 overhead to recompile a single Linux kernel file with -C

  • There was a 75% Yocto 2.2.3 overhead to recompile a single Linux kernel file with -f

  • These numbers imply that if your developers use Yocto to do kernel development, Yocto is costing you 75% to 82% of your development cost

  • The overhead suggests that using Yocto bitbake is not an efficient way to do Linux kernel development

  • Observing the experiment, the situation could be helped by speeding up "Initializing tasks"

Experiment

bitbake -c compile -C compile virtual/kernel

Output

Output Files Changed

Sorted Files changed

bitbake -c compile -f virtual/kernel

Output

Output Files Changed

Sorted Files Changed

diff

diff.cC.cf.nochange


touch /home/pfefferz/plprj4/mtd_board/build/tmp/work-shared/plnx_aarch64/kernel-source/init/main.c

bitbake -c compile -C compile virtual/kernel

Output

Output Files Changed

Sorted Files Changed

touch /home/pfefferz/plprj4/mtd_board/build/tmp/work-shared/plnx_aarch64/kernel-source/init/main.c

bitbake -c compile -f virtual/kernel

Output

Output Files Changed

Sorted Files Changed

diff

diff.cC.cf.change

Script

References

bottom of page