핵심 아키텍처
리눅스 Thermal Control은 4가지 주요 컴포넌트로 구성됩니다. Thermal Zone은 온도 센서와 그 정책을 대표하는 논리적 개체로, CPU, GPU, 전원 제어기 등 다양한 하드웨어 영역을 개별 모니터링합니다. Cooling Device는 CPU 주파수 스케일링, 팬 제어, GPU 주파수 조절 등 온도를 낮추는 실행 장치입니다. Trip Point는 온도 임계값으로 passive, active, critical 등 여러 유형이 존재하며, 이를 초과하면 커널은 자동으로 냉각 작동을 트리거합니다. Thermal Governor는 온도 상황에 대응하는 정책 엔진으로, step-wise(점진적 냉각), bang-bang(온/오프), fair-share(여러 냉각 장치에 부하 분산), power allocator 등이 지원됩니다.
sysfs 인터페이스 및 운영
/sys/class/thermal 경로를 통해 모든 열 영역과 냉각 장치에 접근할 수 있습니다. 각 thermal_zone[0-*]은 현재 온도(temp), 작동 모드(mode), 정책(policy), 트립 포인트 설정값과 유형(trip_point_*_temp/type) 등을 노출합니다. 냉각 장치는 cooling_device[0-*]로 표현되며, 최대/현재 냉각 상태(max_state, cur_state)를 제어합니다. 트립 포인트 초과 시 커널은 자동으로 해당하는 냉각 장치를 활성화하거나 상태를 높이며, critical 트립 포인트 초과 시 시스템 안전을 위해 orderly_poweroff()를 호출합니다.
실무 주의점
Hysteresis(히스테리시스) 값을 적절히 설정하여 임계값 근처에서의 온/오프 진동을 방지해야 합니다. CONFIG_THERMAL_EMULATION을 활성화하면 sysfs의 emul_temp 노드로 온도를 에뮬레이션하여 테스트할 수 있으나, 프로덕션 환경에서는 사용자 공간이 저온도 값으로 정책을 우회할 위험이 있습니다. Device Tree나 ACPI를 통해 열 영역과 냉각 장치의 바인딩을 사전 정의하거나, 드라이버 개발 시 thermal_zone_device_register() 및 thermal_cooling_device_register() API로 동적 등록할 때는 get_temp(), set_cur_state() 등 필수 콜백을 반드시 구현해야 합니다.