x86 주요 단축키
  • 1 X86 톺아보기
  • 2 커스텀맥 최신글
  • 3 커뮤니티 최신글
  • 4 X86클럽 최신글
  • 5 인생은 랜덤
  • H 단축키 도움말
읽기 최소레벨 지정(미선택시 전체공개)  

Xnu CPU Power Management 에 관하여 그리고 제온에서의 XCPM 버그

 안녕하세요. 개발인생40년 입니다. 이 글에 대해서는 없는것 같아서 제가 한번 정리해보았습니다.

 아시겠지만, 맥 OS 는 Xnu 라는 오픈소스 커널을 기반으로 만들어졌습니다. 눈치 채셨겠지만, XCPM 은 Xnu CPU Power Management의 약자입니다. 메버릭스 이전 버전까지는 이 커널에서는 CPU 전력관리를 지원하지 않아서 AppleIntelCPUPowerManagement.kext 켁스트를 통해 전원관리를 해오고 있었습니다. 만일 여러분이 이 켁스트를 이용해서 스피드 스텝을 구현하는 경우 이는 옛날 방식으로 스피드 스텝을 적용한 것입니다. XCPM은 메브릭스 버전 부터 커널에 탑재 되기 시작했고, 이제 커널에서 CPU의 전원관리를 제공하게 됩니다. 아시는 분은 여기까지는 다 아시리라 생각됩니다. 아이비브릿지 이상의 CPU 라면 이 방식을 적용하는게 좋습니다. 시작하시기 전에 먼저 XCPM 지원하는 CPU 인지 먼저 확인하시기 바랍니다.

애플은 Xnu 커널의 소스코드를 https://opensource.apple.com 사이트를 통해서 공개하고 있습니다. 왜냐하면 오픈 소스이기 때문에 의무적으로 공개를 해야 하는 것이기 때문입니다. 아래의 코드는 이 커널 부분의 전원관리 부분의 일부 소스코드 이구요. C 언어로 만들어졌습니다. C 언어를 잘 하시는 분이라면 대강 무슨 내용인지는 알 수 있겠죠. 맞습니다. 구조체 몇개 선언하고 대강 변수 이름과 주석을 보면 CPU 인스트럭션 제어와 ACPI, sleep 과 관련된 걸 알 수 있습니다. 또 구현코드에는 어셈블리랑 CPU 인스트럭션을 직접적으로 넣고 빼고 하는 것이 있겠지요. 애플 답게 코딩 컨벤션도 깔끔하네요. (80 col 칼같이 지킨거 보면 너무 맘에 드네요. vim 이나 emacs 에서 많이들 개발하시는 듯..)

스크린샷 2017-01-08 오전 11.19.58.png

 

XCPM 방법으로 작동될 경우 AppleIntelCPUPowerManagement.kext 켁스트는 별 의미가 없으며, 따라서 AppleIntelInfo.kext 통해서 보는 아래 이미지도 별 의미가 없습니다. 

xcpm 모드 에서는 아래 콘솔화면 처럼 AppleIntelInfo.kext 에서 CPU-PStates, CPU-C3-Cores 등등도 안잡혀도 CPU 스텝핑 잘 돌아갑니다. 심지어  NullCPUPowerManagement.kext를 넣어도 잘 작동됩니다. 저도 그렇게 쓰고 있지요.. (AppleIntelCPUPowerManagement.kext 패치를 하지 않았기 때문에 전원관리 로그에서 에러 납니다. 그 에러를 로그에서 보기 싫어서 넣는거죠. 안넣어도 되구요_

스크린샷 2017-01-08 오전 11.08.50.png

아래는 제 클로버 폴더입니다. NullCPU 켁스트 사용하고 있음을 알 수 있습니다.

스크린샷 2017-01-08 오전 11.44.07.png

문제는 하스웰 CPU 의 경우 애플이 제품으로 출시한 적이 없죠. 따라서 커널 자체를 패치를 해주지 않는 이상은 XCPM 적용이 불가능합니다. XCPM 모드를 위해 Clover 개발팀(팀이라고 예매한... 그냥 소스포지 오픈소스 프로젝트라서... 오픈소스 그룹에서는 ) 에서 이 부분에 대한 commit 이 있었습니다. 그리고 그때 KernelToPatch 부분이 추가 되었습니다. (KextToPatch 와 혼돈해서는 안됩니다.)

헌데 제가 직접 XCPM 커널 패치를 통해 커널에서 이 CPU를 인식시키고 밴치마킹을 돌려보니 유독 제 CPU가 윈도우즈 환경에서 처럼의 성능을 못내는 겁니다. 그래서 찾아봤는데 해외 다른 유저가 이미 이 삽질을 시작했더군요. 그 원인을 찾았던 유저가 Insanelymac 사이트의 okrasit 유저입니다. 그래서 okrasit의 XCPM 패치라고 불리고 있구요. 이 패치 방법은 약간의 꼼수를 쓴것 같은데, 커널 패치를 통해 C1E/Halt 를 mwait 상태로 만들고 바이오스가 CPU 코어 모드를 C3 & C6모드로 진입하게 만들는 방법으로. 1,2,3,4.... 터보모드를 활성화 시키는 것입니다. 제 위의 Intel Power Gadget 를 보시면 클럭수는 고정되어 있는데 전압은 9w 이하로 떨어진 것을 보실 수 있습니다. 오버클럭은 아니고 CPU 를 터보모드를 제 성능을 발휘 할 수 있게 꼼수로 커널을 패치 한것입니다. 아래는 그 패치 방법입니다. 

만약 이 글을 읽는 여러분이 사용하고 있는 CPU가 제온이라면 이것을 적용하면 확실히 개선 될겁니다. 일각에서는 하스웰 다른 CPU도 개선이 된다고 하는데. 제가 다른 CPU가 없어서..

스크린샷 2017-01-08 오후 1.30.13.png

[ 사진 추가했습니다. 저리 나오면 CPUStepping 적용 된겁니다. ]

 

참고로 제 사양은 하스웰 제온 CPU 이며 X99 칩셋입니다. 부트 옵션은 따로 추가가 필요없습니다.

사양에 따라서 xcpm 적용을 위해 FakeCPUID를 사용하는 경우도 있으니 자신의 샤양에 따른 적용방법 검색해서 참고하시기 바랍니다.

적용되었는지 확인하는 방법은 부팅시 verbose 로그 또는 sudo dmesg 에서 XCPM: registered 라고 뜨면 적용이 된겁니다.

뜨지 않는다면 적용에 실패한 것입니다.

무튼 clover.plist 의 제 커널 패치 부분의 전체 코드를 여기에 붙여 넣겠습니다.

<참고사항>

1. 각기 커널 패치에는 제가 추가한 것도 있겠지만 대부분 해결책을 처방한 comment 저작자를 붙였습니다.

   이렇게 해두면 다음 업데이트에 문제가 생기면 저자 한테 메시지를 보내거나, 문제를 같이 해결할 수 있죠.

2. 각기 커널 패치는 문제를 해결하기 위한 제가 찾은 방법입니다. 즉, 제가 왜 이것을 추가했고 어떤 삽질이 있었는지 아셔야합니다.

   사실 각각이 뜻하는 걸 정리하면 좋은데.. 엄청난 스크롤압박이 올거 같군요.. (모니모니 해도 돈이 안되니! 이거 쓰느라 시간낭비하면 마누라한테 등짝 스매싱 날아옵니다...ㅠㅠ  죄송합니다.ㅎㅎㅎ)

3. 제가 지난 1월 9일 코드 공개한 내용을 확인하시기 바랍니다. (  링크: https://x86.co.kr/tip/1417868 )

   제가 코드를 공개한 건 나름의 이유가 있었습니다. 헌데 아무도 눈치를 못채시더군요. ㅜㅜㅜ

  이것 말고도 다른 내용도 있는데!

4. 소프트웨어 프로그래머, 개발자로써 회사에 다녀보시면 알겠지만 이렇게 훅 던져주고 가는 선배가 가장 좋은 선배십니다. ㅎㅎ

5. 비슷한 사양끼리는 뭉쳐서 Github 에 프로젝트를 만들어 같이 작업해보세요.

   우리나라도 소프트웨어 커뮤니티 문화가 성숙해보길 기대해봅니다.

6. 꼭 해내시길 기원합니다! 이 방법은 지금까지의 방법 중 가장 완벽한 스피트스텝 적용법이거든요! 화이팅요!

<dict>
    <key>Comment</key>
    <string>xcpm_bootstrap Sierra (c) Pike R. Alpha</string>
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>
        g8PEg/si
    </data>
    <key>MatchOS</key>
    <string>10.12</string>
    <key>Replace</key>
    <data>
        g8PBg/si
    </data>
</dict>
<dict>
    <key>Comment</key>
    <string>Thermal MONITOR_IF=Enabled=0x850089=0x1A0</string>
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>
        oAEAANwzAAAAAAAAAAAAAAAAAABAAAAAAQAFAA==
    </data>
    <key>Replace</key>
    <data>
        oAEAANwzAAAAAAAAAAAAAAAAAABAAAAACQAFAA==
    </data>
</dict>
<dict>
    <key>Comment</key>
    <string>xcpm performance fix 1 (wrsmr fix to get CPU max) © okrasit/0x199</string>
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>
        idjB4Ai5mQE=
    </data>
    <key>MatchOS</key>
    <string>10.12</string>
    <key>Replace</key>
    <data>
        uAArAAC5mQE=
    </data>
</dict>
<dict>
    <key>Comment</key>
    <string>SammlerG Sierra xcpm MSR Patch 3 / xcpm support Pike R. Alpha/0x82D390/MSR_PP0_POLICY 0x63a</string>
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>
        OgYAANwzAAAAAAAAAAAAAB8=
    </data>
    <key>Replace</key>
    <data>
        OgYAAAAAAAAAAAAAAAAAAAA=
    </data>
</dict>
<dict>
    <key>Comment</key>
    <string>C6/C7_If=E2-Enabled=0x7E000403</string>
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>
        4gAAAEwAAAAAAAAAAAAAAA8EAAAAAAAABQAAHg==
    </data>
    <key>Replace</key>
    <data>
        4gAAAEwAAAAAAAAAAAAAAA8EAAAAAAAAAwQAfg==
    </data>
</dict>
<dict>
    <key>Comment</key>
    <string>EIST_IF=Enabled</string>
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>
        qgEAANwzAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA==
    </data>
    <key>Replace</key>
    <data>
        qgEAANwzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
    </data>
</dict>
<dict>
    <key>Comment</key>
    <string>SammlerG Sierra xcpm MSR Patch 4 / xcpm support Pike R. Alpha</string>
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>
        QgYAANwzAAAAAAAAAAAAAB8AAAAAAAAAGAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAA
    </data>
    <key>Replace</key>
    <data>
        QgYAAAAAAAAAAAAAAAAAAB8AAAAAAAAAGAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAA
    </data>
</dict>
<dict>
    <key>Comment</key>
    <string>C1E_IF=Disabled=0x21040059=0x1FC</string>
    <key>Disabled</key>
    <false/>
    <key>Find</key>
    <data>
        /AEAANwzAAAAAAAAAAAAAAAAEAAAAAAAGgAEAA==
    </data>
    <key>Replace</key>
    <data>
        /AEAANwzAAAAAAAAAAAAAAAAAAAAAAAAWQAEIQ==
    </data>
</dict>

 

 

1st

CPU: Intel Xeon E5 12 core 24 thread 2.4Ghz

RAM: 32G

VGA: GTS250 업그레이드 고려중..

 

2st

Imac 27 inch 5k retina - 리억맥

 

My son's computer

iMac (Retina 4K, 21.5-inch, Late 2015) - 리얼맥

★ 글쓴이에게 고마우시면 커피한잔 후원(클릭) ★ 후원 정보를 입력하지 않았습니다.
  • 사운드가 먹통일때! 조치방법! ↪





이 사이트의 기능을 모두 활용하기 위해서는 자바스크립트를 활성화 시킬 필요가 있습니다.
브라우저에서 자바스크립트를 활성화하는 방법을 참고 하세요.
No 제목 조회 닉네임 등록일
공지
팁 게시판 다운로드 권한 : 꾸준회원 등업 필요 368 Mactopia 06.01
915 그래픽| nvidia web driver 새버젼 나오기전에 구버전으로 설치 및 사용하는 꼼수 3 492 lavapong 03.28
914 그래픽| 파이널컷 안될때 nvidia 웹드라이버, osx 드라이버 3 453 ChoiYeongeom 03.28
913 그래픽| web driver (gtx 750 ti사용중) 안되시는분들 이거 참고하시면 좋을거 같습니다 2 608 자연인 03.20
912 공통팁| 윈도우즈 (Windows) 10이 설치된 하드에 UEFI 멀티부팅으로 Mac OS 설치 4 1226 MacOwl 03.17
911 메인보드| (중복주의)Asrock 보드에서 uefi 부트 기본값이 윈도로 리셋되는 문제 회피하는 꼼수 7 383 lavapong 03.13
910 공통팁| 동일 SDD ( HDD ) 에서 Mac OS (커맥) /Windows/Linux Mint UEFI 멀티 부팅 성공 2 616 MacOwl 03.13
909 메인보드| Skylake HWP Enable 소개 33 1770 아이뱅크 03.12
908 공통팁| 노트북 커맥 에 대해서 ~~~ 7 1303 goldbat 03.11
907 CPU| Intel Power Gadget 이 멈추는 현상에 대한 고찰 1 291 스티븐안 03.09
906 그래픽| GTX 9xx번대 인식하기위한 GA-H170M-DS3H, GA-B150M-D3H 바이오스 버젼! 8 834 좌절금지 03.03
905 사운드| alc1150 사운드때문에 고생하시는분들 5 876 화니 03.03
904 공통팁| 커스텀맥 설치 전 바이오스 셋팅 9 917 Mactopia 03.02
903 공통팁| 멀티 부팅 - Mac & Windows 10 & Remix OS 12 1644 Zyxwv 03.02
902 소트프웨어| clone zilla 라는 백업 프로그램에 관한 내용입니다. 313 gurotwins 03.01
901 소트프웨어| 맥에서 부팅 후 간헐적으로 사운드가 죽을 때 초기화 시켜주기 4 351 faananan 02.26
900 메인보드| 커세어 수냉쿨러 USB케이블로 인한 잠자기 후 바로 깨어나는 현상 해결 방법 8 548 DearLiar 02.25
899 공통팁| 별도드라이브에 설치된 맥/Windows를 하나의 드라이브로 3 468 Zyxwv 02.24
898 공통팁| (초 간단 팁) 운영체제 업데이트 이후 마우스 커서만 보일 경우 4 428 ZISQO 02.22
897 공통팁| 맥 설치후 점검 및 안정화 작업 34 14247 아이뱅크 02.17
896 소트프웨어| 파인더의 간단한 이해 6 682 아이뱅크 02.13
895 소트프웨어| 시에라서 호명으로 시리를 불어오는 방법 2 503 아이뱅크 02.10
894 공통팁| 하드로 부팅하기 27 3951 아이뱅크 02.06
893 사운드| 내장 사운드 잡기 ALC269 (Brix Only) ALC283 (Brix Pro & NUC) ALC885 ALC887 ALC888 ALC889 ALC892 AL... 2 1082 순덕아 02.05
892 공통팁| Clover Config 에 내장된 kext patch 리스트 8 900 Mactopia 02.05
891 공통팁| [임시]잠자기 후 재부팅 되는 문제 4 1062 니포 02.01
890 소트프웨어| 노트북 전원버튼 누르면 종료대화상자 나타나게 하는 방법입니다. 402 goldbat 01.30
889 그래픽| 10.12.4 dp1 업데이트 및 rx480 셋팅 변경점 16 1576 comed78 01.29
888 그래픽| [Cosmetic] Nvidia GTX 970 GPU 인젝션 21 2361 ZISQO 01.23
887 메인보드| Kaby Lake설치시 참조 10 3629 아이뱅크 01.21
886 그래픽| rx480 사용자를 위한 선물 31 2735 comed78 01.21
885 소트프웨어| 블랙스크린에서 마우스만 움직을경우..... 2 534 나레 01.19
884 공통팁| 잠자기가 안될때 초간단 해결방법! 2 848 홍대퀸카 01.16
883 그래픽| Intel HD 520 DVMT Bios 패치 안하고 할수 없을까???? 11 1660 goldbat 01.15
882 메인보드| 스카이레이크 시스템 부팅오류 11 2754 아이뱅크 01.12
881 메인보드| HP Z420/Z620, 삼성 950Pro/SM951 단독 부팅 설정 5 829 ZISQO 01.10
880 공통팁| OS X (10.12) & Windows10 듀얼부팅시 블루투스페어링 유지 915 goldbat 01.09
879 공통팁| 맥/윈도우 듀얼 사용 시 시간 동기화(작업 스케줄러 이용) 9 900 Zyxwv 01.09
878 CPU| XCPM 기능 적용시 bootargs -xcpm 해제해주세요. 14 810 개발인생40년 01.09
877 사운드| 사운드가 먹통일때! 조치방법! 735 홍대퀸카 01.09
» CPU| HOT| Xnu CPU Power Management 에 관하여 그리고 제온에서의 XCPM 버그 27 2062 개발인생40년 01.08
서버에 요청 중입니다. 잠시만 기다려 주십시오...