1. 개요
Embedded Llinux를 사용하는 많은 장치들이 부팅속도를 줄이려고 많은 노력을 한다. 요즘은 Zero-Boot, 혹은 Super-FastBoot 등과 같이 메모리 덤프작업을 통해서 전원 인가 후 1초만에 어플리케이션이 실행 되도록 하는 기술이 이슈가 되고 있는데, 여러 모듈과 연동하고 있는 산업용 장비 같은 경우, 초기화 시에 모듈의 이상유무를 검증해야 해서 이런 기술이 적용되기 힘든경우가 존재한다. 이런경우 순수하게 리눅스의 부팅 시 사용하지 않는 모듈을 제거 하거나 다른 모듈로 대체 해나가면서 최적화 하는 방법이 필요 한데 이런경우에 사용하면 유용한 툴이 bootgraph 와 bootchart2를 이용하는 방법이다.
bootgraph 와 bootchart2는 부팅 과정을 시간별로 그래프화 하여 모듈의 부팅 시 시작 시점 및 실행 시간을 알 수 있도록 기능을 제공 한다.
1.1 bootgraph
bootgraph 는 Linux Kernel Source에 포함된 perl script로 Linux Kernel Source/scripts/bootgraph.pl 로 존재 한다.
bootgraph를 사용해서 부팅 과정을 분석 하기 위해서는 다음과 같은 작업을 해야 한다.
1) Kernel Config 내용 중 CONFIG_PRINTK_TIME, CONFIG_KALLSYMS 을 Enable 시켜줘야 한다.
2) Kernel Config 내용 중 버퍼 오버플로어를 대비해서 CONFIG_LOG_BUF_SHIFT 를 14 에서 18 로 변경한다.
3) u-boot의 boot prameter에 "printk.time=1 initcall_debug=1"를 추가 한다.
ex> bootargs=noinitrd rootfstype=ubifs ubi.mtd=4 xxxxxxxxxxxxxxxxxx printk.time=1 initcall_debug=1
내용적용 후 Kernel Booting Log용
[ 0.000000] Linux version 2.6.39.1 (dark2pee@dev-ubuntu) (gcc version 4.3.3 (GCC) ) #53 Wed Jul 2 11:01:05 KST [ 0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7f [ 0.000000] CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache [ 0.000000] Machine: OMAP3 SIO [ 0.000000] Reserving 4194304 bytes SDRAM for VRAM [ 0.000000] Memory policy: ECC disabled, Data cache writeback [ 0.000000] OMAP3630 ES1.2 (l2cache iva neon isp 192mhz_clk )
: [ 0.039642] CPU: Testing write buffer coherency: ok [ 0.039855] calling spawn_ksoftirqd+0x0/0x50 @ 1 [ 0.039916] initcall spawn_ksoftirqd+0x0/0x50 returned 0 after 0 usecs [ 0.039947] calling init_workqueues+0x0/0x250 @ 1
|
4) 부팅 완료 후 부팅 로그를 dmesg 를 이용하여 저장한다.
target# dmesg > /tmp/bootlog |
5) 저장된 bootlog를 개발서버로 복사 하여 bootgraph 스크립트를 이용하여 그래프화 한다.
server$ cat bootlog | perl /linux-kernel-xxxxx/scripts/bootgraph.pl > bootlog.svg |
6) 결과
해당 모듈의 부팅 시간을 확인 하여 필요 없는 부분을 삭제 한다.