오버클러킹이 불가능한 인텔 CPU에서 MSR을 이용한 TDP와 터보 파라미터 수정

면책조항

  • MSR 수정은 CPU (혹은 시스템 보드) 의 보증을 무효화 시킬 수 있습니다. 조심해서 진행하세요. 전 이 글로 인해 발생한 어떠한 피해에 대해 책임을 지지 않습니다.
  • MSR 주소는 CPU 마다 (아주 많이) 다릅니다. 인텔의 문서를 참고하여 직접 사용하고 있는 CPU의 MSR 주소를 확인하세요.
  • 인텔 i7-8550U (카비레이크 리프레시) 에서만 테스트 되었습니다.
  • 이 글의 영어 번역본이 존재합니다. 영어를 모국어로 사용하는 분이라면 이쪽을 읽는걸 고려해보세요.

시작

윈도우 에선 Intel XTU 를 사용하여 터보 파라미터와 TDP 관련 설정을 변경할 수 있습니다. 하지만 다른 운영체제에선 (유저 친화적인) 도구가 존재하지 않습니다. 이 글에서 저는 MSR (Model-Specific Registers) 를 직접 수정하여 비슷한 결과를 만들어 낼 것입니다.

당신의 CPU에 대해 더 자세히 알아보세요

우리 주변엔 많은 CPU들이 존재하고, 우리는 그들을 흔히 불리는 이름 – 예를 들어서 ‘Core i7’ – 으로 부릅니다. 하지만 이 정도론 충분하지 않습니다. 사실, 어떤 CPU는 우리가 같은 흔히 불리는 이름으로 불러도 내부적으론 너무 다릅니다. 그리고 어떤 CPU는 다른 이름으로 불리지만 내부적으로는 다른 CPU과 같게 동작하기도 합니다. 인텔에서는 CPU를 CPU familymodel로 분류합니다. 예를 들어,

/proc/cpuinfo 가 CPU family와 model을 10진수로 반환하는 것에 유의하세요.

일부 의존성

리눅스에선 msr-toolsmsr 커널 모듈이 필요합니다. 적합한 설정을 사용하여 커널 모듈을 자동으로 삽입하게 할 수도 있습니다. (예를 들어서 아치리눅스에서 echo msr > /etc/modules-load.d/msr.conf)

위의 도구를 사용하여 MSR에서 데이터를 rdmsr 0x(주소) 의 형식으로 읽을 수 있고, MSR에 데이터를 wrmsr 0x(주소) 0x(값) 형식으로 쓸 수 있습니다. 데이터를 읽을 때, 특정 비트마스크를 -f 15:0 (비트 0에서 비트 15까지, 역순으로) 의 형식으로 적용할 수 있습니다.

전력/에너지/시간 단위

제 CPU는 MSR_RAPL_POWER_UNIT 레지스터가 606h 에 존재합니다.

이 단위들은 앞으로 다룰 레지스터에 이미 존재하는 값을 수정하는데에 필요합니다.

패키지 전력 제한

이제 재미있는 부분이 시작됩니다, MSR_PKG_POWER_LIMIT 레지스터는 프로세서 패키지의 전력 제한 변수를 가지고 있습니다.

만약 비트 63이 0이라면, 저 값들은 0x610 레지스터에 기록하는 방법으로 바꿀 수 있습니다. 패키지 전력 제한을 더 높은 값으로 바꾸고, 전력 제한 시간을 더 늘려서 (만약 온도 스로틀링에 영향을 받지 않는다는 가정 아래에) 프로세서의 성능을 향상시킬 수 있습니다.

터보 부스트 배율 제한

MSR_PLATFORM_INFO[28] 레지스터의 값이 1 이라면, 터보 부스트 배율 제한 변수도 바꿀 수 있습니다.

실제 예제 – i7-8550U 프로세서를 튜닝

위의 정보를 사용하여 제 프로세서인 i7-8550U의 MSR을 수정할 수 있었습니다.

이 프로세서가 전체 코어 로드 시 37 배율로 제한되어 있기 때문에, 이 제한을 40 배율로 바꿨습니다. 또한 23와트 제한을 25와트로, 그리고 부스트 시간을 1073741824로 바꿨습니다.

원래 값

수정한 값

결과

turbostat 을 사용하여 TDP 제한과 시간, 그리고 터보 부스트 배율이 바뀐 걸 확인할 수 있었습니다. 이미 제 프로세서가 15W TDP에서도 열 스로틀링의 영향을 받기 때문에 실제 성능 향상에 대해선 테스트 할 수 없었습니다.

만약 이 작업을 실행해도 실제로 성능이 향상되지 않는다면 이 글도 보세요.

“오버클러킹이 불가능한 인텔 CPU에서 MSR을 이용한 TDP와 터보 파라미터 수정”의 4개의 생각

  1. 안녕하세요 저도 i7 8550u 프로세서 노트북 사용자입니다. 제 노트북 역시 전력제한때문에 제 성능을 다 못뽑고있습니다. ㅠㅠ 운영체제는 윈도우 사용중인데 xtu를 사용해봐도 제조사 전력제한인지 tdp 조정이 먹히지 않더라고요.. 최근 올리신 글인 mchbar 수정방법에 대해서도 값 수정이 가능하지만 실제로 tdp제한이 풀리지는 않았습니다. 저에게 남은 방법은 msr수정뿐인것 같아서 여쭤봅니다. 구글링을 해봐도 윈도우에서 동작하는 msr tools 은 없는것 같더라고요 ㅠㅠ 만약 리눅스에서 위의 방법대로 msr로 tdp제한을 수정하고 다시 윈도우를 설치한다면 수정한 msr은 유지되는지 초기화되는지가 궁금합니다…

    1. 안녕하세요, 우선 XTU 프로그램이 MSR를 수정하는 것이기 때문에, MSR를 수정해서 성능이 실제로 향상되지 않는다면 리눅스에서 MSR을 수정하셔도 되지 않을거에요. 무엇보다도 MSR과 MCHBAR는 휘발성 레지스터라 시스템 전원이 차단되면 내용이 다시 공장 상태로 초기화되니, 리눅스에서 값을 설정하셔도 전원을 완전히 껐다가 다시 켜면 도루묵이에요. 윈도우에서 XTU로 이미 시도를 해 보셨다고 했으면 MCHBAR를 건드려 봐야 하는데요,

      윈도우에서 MCHBAR를 수정할 수 있는 수단이 없다고 생각했는데, 어떤식으로 테스트 해 보셨나요? 그리고 어떤 종류의 노트북을 사용하고 계신가요?

      1. 노트북은 삼성 NT500R5Y-GD7A로 i7-8550u 프로세서에 외장그래픽으로 mx150 달려있는 기종이에요. 윈도우에서 Bar Edit 프로그램으로 mchbar 직접 수정이 가능하여 PL1, PL2를 수정해봤지만 TDP제한은 그대로였습니다. 한가지 제가 발견한점은 XTU로 PL1, PL2를 수정하게 되면 mchbar값도 같이 바뀌더라고요. 그래서 XTU가 mchbar만 수정한다고 생각하여 혹시 MSR을 수정해보면 될까 생각해봤지만, 미노리님의 말씀대로라면 XTU가 MSR과 mchbar를 모두 수정하는것 같습니다. 만약 이런경우에는 제조사에서 바이오스를 통해 전력제한을 걸어논것일까요? 바이오스개조는 사실상 불가능한것 같은데 고민입니다 ㅠㅠ

        1. XTU 대신 한번 ThrottleStop 으로도 해보실래요? 찾아보니 XTU에 대한 버그라거나에 대한 불만이 좀 있는 것 같네요…

          그래도 안되신다면 한번 라이브 USB 등으로 리눅스에서도 시도 해 보세요, 만약 리눅스에선 된다면 윈도우에서 사용하는 툴 중 일부가 문제라는 게 될테니까요.

          제가 윈도우를 사용하지 않는 사람이라서 역시 윈도우의 경우엔 자세하게 모르겠네요, 죄송해요.

댓글 남기기