미니PC 홈서버 CPU가 94도까지 오르길래
마크 서버를 하나 더 팔까 하다가 문득 서버 온도가 궁금해졌다. sensors 쳐보니 Tctl 70도. 놀고 있는 서버가 70도면 좀 높은데?? 싶어서 Prometheus에 쌓인 24시간치를 뽑아봣다.
평균 68.9도
최저 60.2도
최고 94.1도
Ryzen 스로틀 한계가 95도다. 매일 밤 한계 바로 앞까지 가고 있었음. 85도 넘긴 시간만 하루 34분
부하도 없는데 왜
스파이크 난 시간대를 찍어보니 밤 11시부터 새벽 1시. 백업 도는 시간인가 했는데 크론에 그런거 없다. 친구들이 마크랑 팰월드 하는 시간이었음 근데 그 시간대 CPU 사용률이 12~17%다. 12스레드 중에 2코어 정도 쓴건데 이걸로 94도까지 감
이 미니PC에 든 칩이 Ryzen 5 5625U다. 노트북용 15W짜리. 쿨러도 노트북 수준인데 설계상 95도까지는 부스트를 밀어붙이게 돼있다. governor를 powersave로 해놨는데도 클럭을 찍어보니 4.17GHz. 절전 모드라며...
서버는 잠깐 일하고 쉬는 패턴이라 그 잠깐마다 풀부스트로 튀면서 열을 왕창 만드는 구조였다.
마지막 1GHz
전력은 클럭에 비례하는게 아니라 대략 클럭 곱하기 전압 제곱이다. 전압이 클럭 따라 비선형으로 오르니까 3.2GHz에서 4.4GHz 가는 마지막 구간이 발열의 절반 가까이를 만든다. 그 구간만 잘라내면 성능은 조금 잃고 열은 왕창 버는 거임
그래서 최대 클럭에 3.2GHz 캡을 걸었다. 재부팅해도 유지되게 systemd oneshot으로.
[Unit]
Description=Cap CPU max frequency to 3.2GHz
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'for f in /sys/devices/system/cpu/cpu*/cpufreq/scaling_max_freq; do echo 3200000 > "$f"; done'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
3.2GHz로 잡은 이유는 이 칩 기본 클럭(2.3GHz)보다는 한참 위라서. 마크 틱 처리 성능은 거의 그대로고 발열 급증 구간만 잘린다.
결과
평시 70도대 -> 52도
패키지 전력 41W -> 11W
게임 서버 체감 차이 없음
20도 가까이 떨어졌다. 청소기 들고 케이스 뜯을 필요도 없었음(귀찮았는데 다행)
케이스 개조는?
외부 팬이나 쿨링패드도 생각했었다. 미니PC는 흡기구랑 배기구가 몇 cm 옆이라 가만두면 자기가 뱉은 열기를 자기가 다시 마신다. 외부 바람으로 그 고인 공기만 흩어줘도 몇 도는 먹고 들어간다. 근데 그건 베이스라인 낮추는 얘기고 94도 스파이크는 부스트 클럭 때문이라 캡부터 햇다.
마치며
덕분에 마크 서버 하나 더 팔 여유가 생겼다. 그건 다음 글에서.