강좌 & 팁
커널이 처음 부팅 될때
__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 로 시작된것이 측정된 소모 시간입니다.
혹시 커널 부팅 과정을 최적화 하시고 싶다면 이 부분을 보시고
시간 많이 소모 하는 것인데 실제로 쓰지 않는 놈들이 있으면
제거 하시면 됩니다.
일명 빠른 부팅은 삽질의 결과라고 합니다. ^^
그럼 즐독~~