본문 바로가기

리눅스 커널의 구조와 원리/8. 커널 타이머 관리

[리눅스커널] 커널이 실행 시각을 관리하는 방식을 왜 잘 알아야 할까?

커널이 실행 시각을 관리하는 방식을 왜 잘 알아야 하는지 생각해봅시다.

첫째, 코드를 읽는 능력을 더 키울 수 있습니다.

리눅스 커널 세부 함수나 드라이버 코드에서 실행 시간을 기준으로 흐름을 제어하는 경우가 많습니다. 커널 코드를 읽으면 타이머 관련 함수를 써서 실행 시간을 제어하는 루틴을 만날 가능성이 높습니다. 드라이버 코드를 읽다가 타이머 관련 함수를 만나면 바로 이해해야 드라이버 구조를 이해할 수 있습니다.

둘째, 커널 타이머 구조를 알면 안정적인 타이머 코드를 입력해 시간 흐름을 제어할 수 있습니다. 

다른 드라이버 코드를 참고해 타이머 코드 작성하는 작업은 누구나 할 수 있습니다. 하지만 커널 타이머 전체 실행 흐름을 아는 분은 커널 타이머가 Soft IRQ 서비스로 실행한다는 사실을 알기에 동적 타이머 핸들러를 간간결하게 작성할 것입니다.

셋째, 문제 해결 능력을 키울 수 있습니다.

타이머를 써서 실행 시간을 제어하는 코드를 작성한 후 문제가 생기면 ftrace로 커널 타이머 이벤트를 써서 타이머 세부 동작을 추적할 수 있습니다. Ftrace로 타이머가 제대로 등록됐는지 동적 타이머 핸들러가 호출될 시점인지까지 알 수 있습니다.

리눅스 커널의 시간을 처리하는 기법은 매우 다양하고 난이도가 높습니다. SoC(System On Chip)에서 제공하는 틱 디바이스와 timekeeping 그리고 HRTimer(High Resolution Timer)에 대한 기법도 있습니다. 이 주제는 리눅스 커널 입문자가 익히기는 어렵기 때문에 커널 타이머 관리 방법만 다룹니다. 커널 타이머 관리하는 기법을 제대로 익히면 다른 타이머 기법도 쉽게 분석할 수 있습니다.