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) - 리얼맥

★ 글쓴이에게 고마우시면 커피한잔 후원(클릭) ★ 후원 정보를 입력하지 않았습니다.

"Xnu CPU Power Management 에 관하여 그리고 제온에서의 XCPM 버그"글의 댓글은 현재 27개 있습니다.
비회원은 54분 45초 후에 댓글을 열람할수 있습니다.
로그인 하시면 바로 확인 하실수 있습니다.



No 제목 조회 닉네임 등록일
968 팁/안정화| 별도드라이브에 설치된 맥/Windows를 하나의 드라이브로 2 346 Zyxwv 02.24
967 팁/안정화| (초 간단 팁) 운영체제 업데이트 이후 마우스 커서만 보일 경우 4 332 zisqo 02.22
966 팁/안정화| 맥 설치후 점검 및 안정화 작업 30 8641 아이뱅크 02.17
965 macOS팁| 파인더의 간단한 이해 6 597 아이뱅크 02.13
964 macOS팁| 시에라서 호명으로 시리를 불어오는 방법 2 407 아이뱅크 02.10
963 팁/안정화| 하드로 부팅하기 16 2781 아이뱅크 02.06
962 팁/안정화| 내장 사운드 잡기 ALC269 (Brix Only) ALC283 (Brix Pro & NUC) ALC885 ALC887 ALC888 ALC889 ALC892 AL... 2 770 순덕아 02.05
961 팁/안정화| Clover Config 에 내장된 kext patch 리스트 8 806 Mactopia 02.05
960 팁/안정화| [임시]잠자기 후 재부팅 되는 문제 4 871 니포 02.01
959 팁/안정화| 노트북 전원버튼 누르면 종료대화상자 나타나게 하는 방법입니다. 315 goldbat 01.30
958 팁/안정화| 10.12.4 dp1 업데이트 및 rx480 셋팅 변경점 16 1454 comed78 01.29
957 팁/안정화| [Cosmetic] Nvidia GTX 970 GPU 인젝션 18 1938 zisqo 01.23
956 팁/안정화| Kaby Lake설치시 참조 7 2197 아이뱅크 01.21
955 팁/안정화| rx480 사용자를 위한 선물 31 2491 comed78 01.21
954 macOS팁| 블랙스크린에서 마우스만 움직을경우..... 2 486 나레 01.19
953 팁/안정화| 잠자기가 안될때 초간단 해결방법! 2 739 홍대퀸카 01.16
952 팁/안정화| Intel HD 520 DVMT Bios 패치 안하고 할수 없을까???? 11 1225 goldbat 01.15
951 팁/안정화| 스카이레이크 시스템 부팅오류 8 1976 아이뱅크 01.12
950 팁/안정화| HP Z420/Z620, 삼성 950Pro/SM951 단독 부팅 설정 2 638 zisqo 01.10
949 팁/안정화| OS X (10.12) & Windows10 듀얼부팅시 블루투스페어링 유지 791 goldbat 01.09
948 팁/안정화| 맥/윈도우 듀얼 사용 시 시간 동기화(작업 스케줄러 이용) 9 761 Zyxwv 01.09
947 팁/안정화| XCPM 기능 적용시 bootargs -xcpm 해제해주세요. 14 710 개발인생40년 01.09
946 팁/안정화| 사운드가 먹통일때! 조치방법! 658 홍대퀸카 01.09
» 팁/안정화| HOT Xnu CPU Power Management 에 관하여 그리고 제온에서의 XCPM 버그 27 1722 개발인생40년 01.08
944 팁/안정화| 4K 디스플레이 레티나 적용이 어려우신 분을 위한 팁 14 1870 zisqo 01.05
943 팁/안정화| DSDT 초간단 추출 법 있습니다. 6 1439 개발인생40년 01.05
942 팁/안정화| [코드공개] Asrock X99 OC Formula (스피드 스텝, 잠자기, 깨우기 안정화) 5 660 개발인생40년 01.05
941 팁/안정화| 시에라 업그레이드 로딩에서 막히시는분들 1 512 동동이 01.04
940 팁/안정화| 에너지 절약 설정에 컴퓨터 잠자기 슬라이더가 없을 때 1 317 Zyxwv 01.04
939 팁/안정화| HP Z420/Z620 한 방 설치 가이드(Nvidia용) 45 3371 zisqo 01.01
938 macOS팁| Foobar 2000 레티나 디스플레이용 간단 설정 팁 359 zisqo 12.31
937 macOS팁| 애플 스크립트를 이용한 램디스크 자동 생성 설정 11 389 zisqo 12.30
936 macOS팁| 은밀히 감춰두고 싶은(혹은...지키고 싶은)파일들을 위하여... 2 372 들고양이 12.30
935 팁/안정화| 시에라에서 한영키로 한영 전환하기 5 1303 ylemkimon 12.29
934 macOS팁| 게으른 자를 위하여...(원격으로 전원 켜고 끄기) 7 557 들고양이 12.29
933 팁/안정화| Clover Config 에 TDP 항목이 추가 돠었네요. 4 598 Mactopia 12.29
932 팁/안정화| 외장그래픽을 이용하여 Rx470 완벽하게 잡기 7 715 각시수련 12.28
931 팁/안정화| zepa 40인치 4k hdmi 60hz 성공(제파 40인치 레티타 ok) 17 559 포카포카1 12.28
930 팁/안정화| Rx480을 좀더 네이티브하게 쓰기 867 각시수련 12.23
929 팁/안정화| 기가바이트 보드 사용하시는분들중 f20 바이오스 업뎃 하신분들 5 811 가르가스1 12.23
서버에 요청 중입니다. 잠시만 기다려 주십시오...