
오버클럭킹: 원리와 위험성
CPU를 공짜로 빠르게 만들 수 있다고? 제조사가 정해준 속도를 강제로 뚫어버리는 '오버클럭'의 원리와 내가 CPU를 태워먹을 뻔한 이야기.

CPU를 공짜로 빠르게 만들 수 있다고? 제조사가 정해준 속도를 강제로 뚫어버리는 '오버클럭'의 원리와 내가 CPU를 태워먹을 뻔한 이야기.
맥북 배터리는 왜 오래 갈까? 서버 비용을 줄이려면 AWS Graviton을 써야 할까? 복잡함(CISC)과 단순함(RISC)의 철학적 차이를 정리해봤습니다.

AI 시대의 금광, 엔비디아 GPU. 도대체 게임용 그래픽카드로 왜 AI를 돌리는 걸까? 단순 노동자(CUDA)와 행렬 계산 천재(Tensor)의 차이로 파헤쳐봤습니다.

빠른 SSD를 샀는데 왜 느릴까요? 1차선 시골길(SATA)과 16차선 고속도로(NVMe). 인터페이스가 성능의 병목이 되는 이유.

LP판과 USB. 물리적으로 회전하는 판(Disc)이 왜 느릴 수밖에 없는지, 그리고 SSD가 어떻게 서버의 처리량을 100배로 만들었는지 파헤쳐봤습니다.

처음 컴퓨터를 조립할 때 이런 말을 들었습니다. "국민 오버만 해도 성능이 10%는 올라가." 귀가 솔깃했습니다. 돈 한 푼 안 들이고 비싼 CPU 성능을 낼 수 있다니, 이건 무조건 해야 하는 거 아닌가? 라고 생각했죠.
당시 저는 i5-9600K를 샀는데, 인터넷에서 "K 시리즈는 오버클럭 가능"이라는 글을 봤습니다. K가 붙으면 뭔가 특별한 건가? 라는 생각에 BIOS에 들어가서 숫자를 건드리기 시작했습니다.
3.7GHz를 4.0GHz로 올렸습니다. 재부팅. 잘 되네? 다시 4.3GHz로 올렸습니다. 재부팅. 또 잘 되네? 그래서 욕심이 났습니다. 4.6GHz까지 올렸습니다.
그리고 10분 뒤, 제 화면은 파랗게 변했습니다. (블루스크린) 그제서야 깨달았습니다. "세상에 공짜 점심은 없다."
오버클럭킹(Overclocking)의 원리를 이해하는 데는 '북소리에 맞춰 노를 젓는 갤리선(Galley Ship)' 비유가 딱이었습니다.
기본 상태(Base Clock)에서는 북소리가 적당한 빠르기로 울립니다. 노잡이들은 힘들이지 않고 규칙적으로 노를 젓습니다. 3.7GHz라는 속도는 인텔이 "이 정도면 모든 배(CPU)가 안전하게 항해할 수 있다"고 보증한 속도입니다.
그런데 제가(사용자) 더 빨리 가고 싶어서 북을 극한으로 빠르게 치기 시작합니다. (클럭 속도를 높임).
처음엔 노잡이들이 죽기 살기로 따라갑니다. 배가 빨라집니다(성능 향상). 하지만 북소리가 너무 빨라지면 노잡이들이 발이 꼬이거나, 노를 놓치거나, 거품을 물고 쓰러집니다. 이게 바로 시스템 불안정(블루스크린)입니다.
여기서 중요한 걸 깨달았습니다. 클럭 속도를 올리는 방법이 두 가지라는 점입니다.
Base Clock(BCLK)은 말 그대로 '기본 북소리'입니다. 보통 100MHz로 고정되어 있습니다. CPU 최종 속도는 이렇게 계산됩니다.
최종 속도 = Base Clock × Multiplier
3.7GHz = 100MHz × 37
Base Clock을 건드리면 CPU뿐만 아니라 메모리, PCIe, 심지어 USB까지 영향을 받습니다. 북소리 자체를 바꾸는 거니까요. 그래서 저는 이 방법은 안 썼습니다. 너무 위험하더군요.
대부분의 오버클럭은 이 방법을 씁니다. K 시리즈의 핵심이 바로 "언락된 Multiplier"였습니다.
4.6GHz = 100MHz × 46
Base Clock은 100MHz로 그대로 두고, Multiplier만 37에서 46으로 올리는 겁니다. 이러면 다른 부품에는 영향이 없고 CPU만 빨라집니다.
저는 이걸 "레이스카를 공장 속도 제한에서 풀어주는 것"이라고 받아들였습니다. 차는 원래 200km/h로 달릴 수 있는데, 공장에서 안전을 위해 150km/h로 제한을 걸어둔 겁니다. K 시리즈는 그 제한을 풀 수 있는 차인 거죠.
Multiplier를 46까지 올렸는데도 계속 블루스크린이 떴습니다. 저는 "클럭만 올리면 되는 거 아닌가?"라고 생각했는데, 그게 아니었습니다.
노잡이들이 북소리는 따라가고 싶은데, 체력이 딸리는 거였습니다.그래서 전압(Voltage)을 더 줬습니다. CPU의 기본 전압은 보통 1.2V 정도입니다. 저는 이걸 1.25V로 올렸습니다.
확실히 효과가 있었습니다. 밥을 든든히 먹으니 더 빠른 북소리도 버텨냈습니다. 하지만 문제가 생겼습니다. 밥을 많이 먹고 격하게 움직이니 몸에서 열이 펄펄 나기 시작한 겁니다.
여기서 저는 무서운 공식을 알게 됐습니다.
전력 소모 = 전압² × 주파수
Power = Voltage² × Frequency
전압을 1.2V에서 1.3V로 올리면 (약 8% 증가), 전력 소모는 17%나 증가합니다. 전압이 제곱으로 들어가기 때문입니다.
처음엔 이게 이해가 안 갔습니다. "왜 선형적으로 늘어나지 않고 제곱으로 늘어나지?" 나중에 전기공학 개념을 찾아보니, 전력(Power)은 전압(V) × 전류(I)인데, 전압을 올리면 전류도 같이 늘어나기 때문이라고 하더군요. 그래서 V × I = V × (V/R) = V²/R이 되는 거였습니다.
이 공식을 알고 나니 "왜 오버클럭을 하면 전기세가 많이 나오는지" 이해가 됐습니다.
전압을 올리자 CPU 온도가 가파르게 올라갔습니다. Prime95라는 스트레스 테스트 프로그램을 돌렸는데, 온도가 90도까지 찍히더군요.
그러자 갑자기 클럭 속도가 4.6GHz에서 3.5GHz로 뚝 떨어졌습니다. 이게 바로 서멀 쓰로틀링(Thermal Throttling)이었습니다.
CPU는 자기 보호 메커니즘이 있습니다. 온도가 너무 올라가면 (보통 90~100도) 스스로 클럭을 낮춰서 열을 줄입니다. 마치 노잡이들이 "더워서 못 해먹겠다"고 파업하는 것과 같습니다.
저는 HWMonitor라는 프로그램으로 실시간 온도를 모니터링했습니다.
# Linux에서는 sensors 명령어로 확인 가능
sensors
# 출력 예시:
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +92.0°C (high = +80.0°C, crit = +100.0°C)
Core 0: +91.0°C (high = +80.0°C, crit = +100.0°C)
Core 1: +93.0°C (high = +80.0°C, crit = +100.0°C)
보시다시피 Package 온도가 92도까지 올라갔습니다. 이러면 쓰로틀링이 걸립니다.
그래서 저는 사제 쿨러(타워형 공랭 쿨러)를 달고, 나중에는 수랭 쿨러까지 동원했습니다. 수랭 쿨러는 말 그대로 물을 순환시켜서 열을 빼내는 방식입니다.
수랭 쿨러를 달고 나니 같은 4.6GHz 오버클럭에서도 온도가 75도 정도로 떨어졌습니다. 쓰로틀링이 걸리지 않으니 성능이 안정적으로 유지됐습니다.
결국 "빠른 북소리(높은 클럭) + 많은 밥(높은 전압) + 강력한 냉방(좋은 쿨러)" 조합으로 오버클럭에 성공했습니다.
문득 궁금해졌습니다. "인텔이나 AMD는 바보인가? 처음부터 이렇게 빠르게 해서 팔면 되잖아?" 이 의문은 '실리콘 복권(Silicon Lottery)'과 '비닝(Binning)' 개념을 알고 풀렸습니다.
반도체는 붕어빵처럼 똑같이 찍어내도, 어떤 놈은 튼튼하고 어떤 놈은 비실비실합니다. 같은 웨이퍼(Wafer)에서 나온 칩인데도 성능이 천차만별입니다.
인텔이나 AMD는 웨이퍼에서 칩을 찍어낸 후, 각각의 칩을 테스트합니다.
테스트 과정:
1. 각 칩에 다양한 전압과 클럭을 적용
2. 안정성 테스트 (온도, 오류율 측정)
3. 성능에 따라 등급 분류 (Binning)
결과:
- 최상급: i9 (5.0GHz 이상 가능)
- 상급: i7 (4.5GHz 이상 가능)
- 중급: i5 (4.0GHz 이상 가능)
- 하급: i3 (3.5GHz 이상 가능)
놀라운 건, 물리적으로는 거의 똑같은 칩인데 테스트 결과에 따라 i3이 될 수도, i9이 될 수도 있다는 점입니다.
제조사는 "가장 비실한 놈도 안전하게 돌아가는 속도"를 정품 스펙으로 정합니다. 그래야 AS 요청이 안 들어오니까요.
예를 들어 i5-9600K의 스펙이 3.7GHz인 건, "모든 i5-9600K 칩이 3.7GHz에서는 100% 안정적"이라는 뜻입니다. 하지만 어떤 칩은 4.8GHz도 돌아가고, 어떤 칩은 4.2GHz에서 불안정할 수 있습니다.
저는 운이 좋았습니다. 제 칩은 4.6GHz에서 1.25V로 안정적으로 돌아갔습니다. 하지만 친구가 같은 i5-9600K를 샀는데, 4.6GHz를 돌리려면 1.32V가 필요하더군요.
같은 제품인데 왜 이런 차이가 날까요? 실리콘 결정 구조의 미세한 차이, 웨이퍼에서의 위치(가장자리 vs 중심부), 제조 과정의 미세한 변수 등이 영향을 미칩니다.
이게 바로 실리콘 복권입니다. 같은 돈 주고 샀는데, 어떤 사람은 좋은 칩을 받고, 어떤 사람은 평범한 칩을 받는 거죠.
오버클럭은 이 "안전 마진(Safety Margin)"을 깎아먹는 행위였습니다. 운 좋으면(실리콘 복권 당첨) 큰 성능 향상을 얻지만, 운 나쁘면 그냥 터지는 겁니다.
오버클럭에 성공했다고 끝이 아닙니다. "정말 안정적인가?"를 검증해야 합니다. 그냥 부팅만 되면 되는 게 아니라, 몇 시간씩 풀로드를 걸어도 에러 없이 돌아가야 진짜 성공입니다.
Prime95는 CPU에 100% 부하를 걸어서 안정성을 테스트하는 프로그램입니다. 소수(Prime Number)를 계산하면서 모든 코어를 최대한 혹사시킵니다.
저는 이걸 8시간 돌렸습니다. 밤새 돌려놓고 아침에 확인하는 거죠.
Prime95 테스트 결과:
- 4.6GHz, 1.25V
- 테스트 시간: 8시간
- 에러: 0건
- 최고 온도: 78도
- 평균 온도: 72도
에러가 하나도 안 나오면 "안정적인 오버클럭"이라고 판단할 수 있습니다.
Prime95는 안정성 테스트고, Cinebench는 실제 성능을 측정하는 프로그램입니다. 3D 렌더링 작업을 시켜서 점수를 매깁니다.
Cinebench R20 결과:
- 순정 (3.7GHz): 2,450점
- 오버 (4.6GHz): 3,050점
- 성능 향상: 약 24%
24% 성능 향상이면 꽤 큰 겁니다. 하지만 이게 공짜가 아니라는 걸 알았습니다.
Prime95 같은 프로그램 말고, 직접 스트레스 테스트 스크립트를 만들어봤습니다.
import multiprocessing
import time
import psutil
def stress_test_worker():
"""CPU 코어 하나를 100% 사용하는 함수"""
end_time = time.time() + 60 # 60초 동안 실행
while time.time() < end_time:
# 의미 없는 계산을 반복해서 CPU 사용률 올리기
_ = sum([i**2 for i in range(10000)])
def run_stress_test():
"""모든 CPU 코어에 부하 걸기"""
cpu_count = multiprocessing.cpu_count()
print(f"CPU 코어 수: {cpu_count}")
print("스트레스 테스트 시작...")
# 모든 코어에 프로세스 할당
processes = []
for _ in range(cpu_count):
p = multiprocessing.Process(target=stress_test_worker)
p.start()
processes.append(p)
# CPU 온도와 사용률 모니터링
for i in range(60):
cpu_percent = psutil.cpu_percent(interval=1)
temps = psutil.sensors_temperatures()
if 'coretemp' in temps:
core_temps = [t.current for t in temps['coretemp']]
avg_temp = sum(core_temps) / len(core_temps)
print(f"[{i+1}초] CPU 사용률: {cpu_percent}% | 평균 온도: {avg_temp:.1f}°C")
# 프로세스 종료
for p in processes:
p.join()
print("스트레스 테스트 완료")
if __name__ == "__main__":
run_stress_test()
이 스크립트를 돌리면 모든 CPU 코어가 100%로 올라가면서 온도가 쭉쭉 올라가는 걸 볼 수 있습니다. 오버클럭 후에 이걸 돌려보면 쓰로틀링이 걸리는지, 온도는 얼마나 올라가는지 직접 확인할 수 있습니다.
오버클럭을 이해하고 나니, 이런 비유가 딱 맞았습니다.
"공장에서 안전을 위해 150km/h로 제한을 건 레이스카를, 고속도로에서 200km/h로 풀어주는 것"차(CPU)는 원래 200km/h로 달릴 수 있습니다. 엔진도 튼튼하고, 구조도 탄탄합니다. 하지만 제조사(인텔)는 "혹시 모를 사고"를 대비해서 150km/h로 제한을 걸어뒀습니다.
그런데 운전자(사용자)가 "나는 고속도로(쿨링 시스템)도 좋고, 운전(모니터링)도 잘하니까 200km/h로 달려도 돼"라고 판단해서 제한을 푸는 겁니다.
물론 위험은 있습니다.
하지만 제대로만 하면, 공짜로(?) 성능을 올릴 수 있습니다.
서버 개발을 하면서 클라우드(AWS) 환경에서는 오버클럭이란 개념이 없다는 걸 알았습니다. 안정성이 생명인 서버에서, 24% 성능 올리겠다고 1%의 다운될 확률을 감수하는 건 무모한 일이니까요.
하지만 개인 PC, 특히 게이밍이나 영상 편집용 PC에서는 여전히 매력적인 선택지입니다.
저는 이 경험을 통해 몇 가지를 정리했습니다.
저는 이 경험을 통해 "성능, 전력, 발열, 안정성" 이 4가지가 서로 얽혀있는 트레이드오프 관계라는 걸 뼈저리게 받아들였습니다.
하나를 올리면 다른 하나가 떨어집니다.
결국 이거였습니다. "세상에 공짜는 없다. 하지만 제대로 알고 하면, 값어치는 할 수 있다."