Linux 운영체제는 단순히 프로그램을 실행하는 것뿐만 아니라 시간도 매우 정밀하게 관리합니다. 프로세스 스케줄링, 네트워크 통신, 파일 시스템, 데이터베이스, 로그 기록 등 거의 모든 기능이 정확한 시간 정보를 기반으로 동작합니다.
이러한 시간 관리를 담당하는 핵심 요소가 바로 Timer(타이머) 와 Clock Source(클록 소스) 입니다.
이번 글에서는 Linux Kernel이 시간을 측정하는 방법과 Timer의 종류, Clock Source의 역할, 그리고 실무에서 확인하는 방법까지 자세히 알아보겠습니다.
Timer란?
Timer는 일정 시간이 지나면 Kernel에게 특정 작업을 수행하도록 알려주는 기능입니다.
예를 들어 다음과 같은 작업에 사용됩니다.
- 프로세스 스케줄링
- sleep() 함수
- TCP Timeout
- 재전송(Retransmission)
- 디스크 캐시 관리
- 시스템 예약 작업
즉, Linux에서 시간이 필요한 대부분의 기능은 Timer를 사용합니다.
Clock Source란?
Clock Source는 현재 시간을 계산하기 위해 사용하는 하드웨어 또는 타이머 장치입니다.
Kernel은 Clock Source를 이용하여 현재 시간이 얼마나 흘렀는지 계산합니다.
간단한 구조는 다음과 같습니다.
CPU
↓
Clock Source
↓
Kernel Time
↓
Scheduler
↓
Application
Clock Source의 정확도가 높을수록 시스템 시간도 더 정확해집니다.
Clock Source의 종류
Linux에서는 여러 종류의 Clock Source를 지원합니다.
대표적인 장치는 다음과 같습니다.
- TSC(Time Stamp Counter)
- HPET(High Precision Event Timer)
- ACPI PM Timer
- jiffies
- ARM Generic Timer
시스템 환경에 따라 Kernel이 가장 적합한 Clock Source를 자동으로 선택합니다.
TSC(Time Stamp Counter)
TSC는 CPU 내부에 있는 고속 카운터입니다.
특징은 다음과 같습니다.
- 매우 빠른 읽기 속도
- CPU 클럭 기반
- 대부분의 x86 서버에서 기본 사용
- 낮은 오버헤드
현재 대부분의 최신 Intel 및 AMD CPU에서는 안정적인 TSC를 제공합니다.
HPET(High Precision Event Timer)
HPET는 메인보드에 있는 고정밀 타이머입니다.
장점
- 높은 정확도
- 여러 Timer 지원
- 안정적인 시간 제공
단점
- TSC보다 느림
일부 환경에서는 HPET 대신 TSC가 더 좋은 성능을 제공합니다.
Jiffies란?
Jiffies는 Linux Kernel이 오래전부터 사용해 온 시간 단위입니다.
Kernel Tick이 한 번 발생할 때마다 Jiffies 값이 1씩 증가합니다.
예를 들어
Jiffies
1000
↓
1001
↓
1002
↓
1003
현재도 일부 Kernel 내부에서는 Jiffies를 사용하지만, 정밀한 시간 계산에는 고해상도 타이머가 더 많이 활용됩니다.
High Resolution Timer(HRTimer)
Linux는 High Resolution Timer(HRTimer)를 제공합니다.
특징은 다음과 같습니다.
- 나노초 단위 지원
- 높은 정확도
- 실시간 응용 프로그램 지원
- Tickless Kernel과 함께 사용
멀티미디어, 금융 시스템, 실시간 제어 시스템에서 많이 활용됩니다.
Tick과 Tickless Kernel
과거 Linux는 일정한 주기로 Timer Interrupt를 발생시켰습니다.
이를 Tick 방식이라고 합니다.
Tick
↓
10ms
↓
10ms
↓
10ms
하지만 최신 Linux는 Tickless Kernel(NO_HZ) 을 지원합니다.
필요할 때만 Timer Interrupt를 발생시키므로 다음과 같은 장점이 있습니다.
- CPU 절전
- 인터럽트 감소
- 성능 향상
- 전력 소비 감소
특히 서버와 노트북에서 효과가 큽니다.
현재 Clock Source 확인
현재 사용 중인 Clock Source는 다음과 같이 확인할 수 있습니다.
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
예시
tsc
사용 가능한 Clock Source 확인
cat /sys/devices/system/clocksource/clocksource0/available_clocksource
예시
tsc hpet acpi_pm
Timer 관련 정보 확인
Kernel Timer 정보 확인
cat /proc/timer_list
현재 Kernel Tick 확인
getconf CLK_TCK
Kernel Tick 설정 확인
grep CONFIG_HZ /boot/config-$(uname -r)
실무에서 자주 사용하는 명령어
현재 Clock Source 확인
cat /sys/devices/system/clocksource/clocksource0/current_clocksource
사용 가능한 Clock Source
cat /sys/devices/system/clocksource/clocksource0/available_clocksource
Kernel Timer
cat /proc/timer_list
CPU 정보
lscpu
Kernel 로그
dmesg | grep clock
Tick 설정
getconf CLK_TCK
실무 사례
예를 들어 가상 머신에서 시간이 자꾸 밀리는 현상이 발생했다고 가정해 보겠습니다.
다음 순서로 확인합니다.
- 현재 Clock Source 확인
- 사용 가능한 Clock Source 확인
dmesg에서 Clock 관련 오류 확인- NTP 동기화 상태 확인
- 가상화 환경(KVM, VMware, Hyper-V)의 시간 설정 점검
특히 가상화 환경에서는 Clock Source 선택이 시스템 시간 정확도에 큰 영향을 줄 수 있습니다.
자주 묻는 질문
Clock Source는 변경할 수 있나요?
가능합니다. 다만 시스템 안정성과 성능에 영향을 줄 수 있으므로 변경 전 충분한 검토가 필요합니다. 대부분의 경우 Kernel이 자동으로 가장 적합한 Clock Source를 선택합니다.
TSC와 HPET 중 어느 것이 더 좋은가요?
최신 CPU에서는 일반적으로 TSC가 더 빠르고 효율적입니다. 다만 오래된 시스템이나 일부 가상화 환경에서는 HPET가 더 안정적인 경우도 있습니다.
Tickless Kernel은 항상 좋은가요?
대부분의 서버와 데스크톱에서는 성능과 전력 효율 측면에서 장점이 있습니다. 하지만 일부 실시간 시스템에서는 환경에 따라 별도의 설정이 필요할 수 있습니다.
마무리
Linux Kernel은 Timer와 Clock Source를 이용해 시스템 시간을 매우 정밀하게 관리합니다. Timer는 일정 시간이 지난 후 필요한 작업을 수행하도록 예약하고, Clock Source는 시간을 정확하게 측정하는 기준 역할을 합니다. TSC, HPET, Jiffies, HRTimer, Tickless Kernel 등의 개념을 이해하면 시간 관련 성능 문제와 시스템 동작 원리를 더욱 깊이 이해할 수 있습니다.