커널이 처음 부팅 될때

 

__init 매크로를 함수 이름에 붙이면 호출 합니다.

 

거의 대부분의 디바이스 드라이버나 기타 커널 라이브러리들이 이 매크로가 붙어 있고

이를 이용해서 초기화 과정을 거칩니다.

 

커널 부팅의 대부분을 이 함수들을 호출하면서 호출 합니다.

 

그래서 소모되는 시간과 어떤 것들이 호출되고 있는지 알고 싶을때가 있는데

이때 커널 커맨드에

 

    initcall_debug 

 

 을 주면 부팅시 다음과 같은 형태로 엄청난 메세지가 나옵니다. ㅠㅠ

 

Calling initcall 0xc001dadc: net_ns_init+0x0/0x114()
net_namespace: 64 bytes
initcall 0xc001dadc: net_ns_init+0x0/0x114() returned 0.
initcall 0xc001dadc ran for 2 msecs: net_ns_init+0x0/0x114()
Calling initcall 0xc000ec0c: ptrace_break_init+0x0/0x2c()
initcall 0xc000ec0c: ptrace_break_init+0x0/0x2c() returned 0.
initcall 0xc000ec0c ran for 0 msecs: ptrace_break_init+0x0/0x2c()
Calling initcall 0xc000f79c: consistent_init+0x0/0x100()
initcall 0xc000f79c: consistent_init+0x0/0x100() returned 0.
initcall 0xc000f79c ran for 0 msecs: consistent_init+0x0/0x100()
Calling initcall 0xc0012ac8: sysctl_init+0x0/0x30()
initcall 0xc0012ac8: sysctl_init+0x0/0x30() returned 0.
initcall 0xc0012ac8 ran for 5 msecs: sysctl_init+0x0/0x30()
Calling initcall 0xc00139a4: init_jiffies_clocksource+0x0/0x1c()
initcall 0xc00139a4: init_jiffies_clocksource+0x0/0x1c() returned 0.
initcall 0xc00139a4 ran for 0 msecs: init_jiffies_clocksource+0x0/0x1c()

이 메세지 중에 소모 시간은 ran 문장이 있는 부분을 보시면 됩니다.

Calling 으로 시작하는 것은 해당 initcall 을 호출하기 전에 찍는 것이고

첫번째 initcall 로 시작하는 것은 수행후 반환된 값

두번째 initcall 로 시작된것이 측정된 소모 시간입니다.

 

혹시 커널 부팅 과정을 최적화 하시고 싶다면 이 부분을 보시고

시간 많이 소모 하는 것인데 실제로 쓰지 않는 놈들이 있으면

제거 하시면 됩니다.

 

일명 빠른 부팅은 삽질의 결과라고 합니다. ^^

 

그럼 즐독~~