100% 당첨매일매일 출석 도장 찍고 포인트 받아가세요
  • 권한 글쓴이가 전체공개한 글 입니다.
    감정

    About 개발인생40년 ( 팔로워 1 / 팔로잉 0)

    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 버그

     안녕하세요. 개발인생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>
    
    

     

     



  • No 감정 제목 저장 권한 조회 닉네임 8로
    공지
    클로버 컨피규레이터 기본 사전 17.09.07 37 공개 1445 ariC.
    공지
    팁 게시판 제한 및 다운로드 권한 꾸준회원 등업 필요 공개 1488 mactopia
    공지
    입문자를 위한 x86 안내서 56 공개 53757 아이뱅크
    575 사운드 | 사운드가 먹통일때! 조치방법! 공개 803 홍대퀸카 1
    » CPU | HOT | Xnu CPU Power Management 에 관하여 그리고 제온에서의 XCPM 버그 27 공개 2360 개발인생4 1
    573 커맥팁 | 4K 디스플레이 레티나 적용이 어려우신 분을 위한 팁 14 공개 2696 ZISQO 1
    572 커맥팁 | DSDT 초간단 추출 법 있습니다. 6 공개 2024 개발인생4 1
    571 MB | [코드공개] Asrock X99 OC Formula (스피드 스텝, 잠자기, 깨우기... 5 공개 853 개발인생4 1
    570 커맥팁 | 시에라 업그레이드 로딩에서 막히시는분들 1 공개 631 동동이 1
    569 MB | 베플 | HP Z420/Z620 한 방 설치 가이드(Nvidia용) 46 공개 4905 ZISQO 1
    568 커맥팁 | Clover Config 에 TDP 항목이 추가 돠었네요. 4 공개 730 macto 1
    567 그래픽 | 외장그래픽을 이용하여 Rx470 완벽하게 잡기 7 공개 857 각시수련 1
    566 그래픽 | zepa 40인치 4k hdmi 60hz 성공(제파 40인치 레티타 ok) 17 공개 715 포카포카1 1
    565 그래픽 | Rx480을 좀더 네이티브하게 쓰기 공개 986 각시수련 1
    564 MB | 기가바이트 보드 사용하시는분들중 f20 바이오스 업뎃 하신분들 5 공개 994 가르가스1 1
    563 그래픽 | Intel HD5x0 그래픽 및 기본 BIOS Setup 6 공개 2339 좌절금지 1
    562 사운드 | 그래픽 사운드가 잡지 못할때 3 공개 1059 세지니 1
    561 그래픽 | i7-6700K, Ga-z170x-ud5, RX480 설치후기 2 공개 1099 양호 1
    560 커맥팁 | 써드 파티 모니터 인치 표시 오류 해결 5 공개 841 ZISQO 1
    559 커맥팁 | 듀얼 부팅시 efi 폴더 수정으로 윈도우 부트로드날려 먹었을때~~ 2 공개 953 goldb 1
    558 커맥팁 | 부팅시마다 뜨던 오류 메시지를 해결했습니다. ^^ 3 공개 826 각시수련 1
    557 그래픽 | rx480 모든 포트 잡는 법. 4 공개 843 각시수련 1
    556 그래픽 | Rx480 내장그래픽 없이 부팅성공 사례 3 공개 915 각시수련 1
    555 그래픽 | RX480으로 멀티부팅 구성할때 부팅하는 법 10 공개 688 각시수련 1
    554 커맥팁 | 새로운 Clover Boot-Argument 옵션 공개 715 macto 1
    553 그래픽 | RX480 잡긴했습니다. 참고만 하십시오. 3 공개 1420 각시수련 1
    552 사운드 | Audio_HDMI_pikeralphaALC 패치 강좌 5 공개 1655 좌절금지 1
    551 MB | 스카이레이크용 config.plist 강좌 3 공개 1687 좌절금지 1
    550 커맥팁 | 베플 | 에어드랍 속도 저하 또는 블루투스 장치 초기화 방법 1 공개 488 ZISQO 1
    549 MB | 메모리 채널 설정및 약간의 오버 클럭 설정 5 공개 738 ZISQO 1
    548 커맥팁 | Clover 새로운 옵션 몇가지 공개 983 macto 1
    547 커맥팁 | 부팅별오류 해결 2 공개 7859 아이뱅크 1
    546 그래픽 | (Sierra 10.12.1)GeForce GTX 9xx버전 해상도/블랙아웃 10초해결 5 공개 1881 힐딱 1
    545 그래픽 | IntelGraphics HD5x0 HDMI 2560 x 1440, Clover HDMI AUDIO 10 공개 1844 좌절금지 1
    544 그래픽 | Config.plist/ACPI/DSDT Fixes를 이용한 GPU 인젝션 9 공개 2835 ZISQO 1
    543 커맥팁 | Config.plist 를 이용한 DSDT 내부 Rename Fix 9 공개 877 BBong 1
    542 커맥팁 | 시에라 업그레이드시 체크사항 2 공개 1786 아이뱅크 1
    541 CPU | [연재] Intel 社 CPU 파헤치기 (下) rev161202 2 공개 814 KsJ 1
    540 CPU | [연재] Intel 社 CPU 파헤치기 (上) rev.161129 6 공개 1300 KsJ 1
    539 커맥팁 | 베플 | Arbitrary를 이용한 Devices Cosmetic 11 공개 869 ZISQO 1
    538 MB | 스카이레이크 cpu, 기가바이트 B150M-DS3H config.plist + 25 공개 4020 David 1
    537 커맥팁 | 윈도우10을 레거시모드로 설치되어 있을때 부팅가능 15 공개 1393 아이뱅크 1
    536 커맥팁 | 팁이라기엔 뭔가 필요없는 팁 1 공개 495 LeeDe 1
  • 서버에 요청 중입니다. 잠시만 기다려 주십시오...