x86 주요 단축키
  • 1 X86 톺아보기
  • 2 커스텀맥 최신글
  • 3 파트너즈 최신글
  • 4 커뮤니티 최신글
  • 5 소모임 최신글
  • 6 인생은 랜덤
  • H 단축키 도움말
읽기 최소레벨 지정  

About KsJ

Odd Customer

 

[https://www.x86.co.kr/Customac/1160224에 새로운 내용으로 글이 작성되었습니다.]

 

 

너무나 많고 방대한 양은 이제 지쳤습니다, 이 글 하나로 당신의 CPU가 편히 쉴 수 있기를 바랍니다.

끝판왕, 당신의 CPU에 휴식시간을 부여하라!편에 오신것을 환영합니다 :)

 

그동안 스피드스텝, 그리고 잠자기와 관련하여 연구해오면서?

쌓인 자료가 상당해졌습니다. 그리고 그것들을 모아 글로써 올렸는데, 편수만 대략 6편이더군요.

 

그렇게 올렸음에도 불구하고, 모든걸 전달하지 못한 아쉬움이 남습니다.

단 한 분이라도 더, 그리고 단 하나의 CPU라도 더 혜택을 누렸으면 한달까요?

 

그래서 Retina편에 이은 두번째 끝판왕 편을 마련하게 되었습니다.

이 글에는 CPU, SSDT, 잠자기와 관련하여 올렸던 6개의 글이 적절히 짬뽕되고 다시 재수정되어

좀 더 알아듣기 쉽고 적용하기 쉽게 바뀌었음을 미리 말씀드립니다.

 

그럼 시작하도록 하겠습니다.

 

1. 스피드 스텝과 관련한 CPU의 구조

1-1. P-State와 C-State가 뭔가요?

 

씨피유에는 크게 두가지의 전력관리 기술을 가지고 있습니다.

하나는 P-State, 나머지 하나는 C-State라는 것입니다.

 

이 두가지는 서로다른 동작방식을 통하여 서로가 서로를 보조하며

CPU가 실제로 소모하는 소모전력량 (TDP)를 감축합니다.

 

이것을 조금더 쉽게 비유하자면, 하나는 일손을 조절하여

일손이 많이 필요한 작업에는 그만큼 일손을 많이 불러들여 작업을 하고

일손이 별로 필요없는 경우에는 최소한만의 인력을 가지고 작업하는 것입니다.

 

그리고 나머지 하나는 같은 인력으로 일을 할 때에

작업에 걸맞는 도구를 사용하여 들어가는 에너지를 최소화시키는 것입니다.

 

바로 P-State이 전자에 해당되는 내용이며 C-State은 후자에 해당되는 내용입니다.

그렇지만, 단순히 이 두가지를 포괄적으로만 이해하기 쉽게 풀어쓴 것일 뿐

실제로는 두개의 모드 내에서도 그 급에따라 분류가 나뉘어지게 됩니다.

 

아래는 이것을 조금더 보기쉽게 그림으로 풀어낸 부분입니다.

cp.png

 

P-state은 P0 ~ Pn으로 나뉘어지며 씨피유가 활동중인 상태일 때의 전력 소모량 감축 기술입니다.

이부분은 C0라 불뤼는 Cpu-Activate 상태의 C-State모드에서 동작하는 부분입니다.

 

만약 씨피유가 더이상 일손이 필요하다고 생각되지 않을 경우

C0라는 모드를 변경하여 C1~C10의 상태에 있게 되는데, 이 모드별로 씨피유가 동작하는

범위의 차이가 매우 다양하게 나타납니다.

 

C1은 단순히 Halt라 불뤼는 부분으로써 그냥 작업을 쉬는 것입니다.

이때 코어가 완전히 꺼지는 것이 아니라, 코어의 동작속도를 매우 낮추어 쉬게됩니다.

 

C3/C4 모드는 씨피유가 잡아먹는 전압을 강하시킵니다.

그리고 L2 Cache를 부분적으로 비웁니다.

이 상태에서도 코어는 아직 동작중인 상태에 있습니다.

 

C6/C7 모드는 위의 모드들과는 달리 씨피유의 코어를 완전히 쉬게해줍니다.

그리고 L2 Cache를 완전히 비워버립니다.

 

위 그림에는 나와있지 않지만, C8~C10 모드도 존재하는데,

C8 이후의 기능은 인텔 씨피유의 하스웰 (하스웰은 모바일) 기종 이후부터 사용되어집니다.

 

C8/C9/C10 모드로 동작하게되면

C6/C7 상태에서 점차적으로 L3 Cache를 부분적으로 비우며

코어가 언제든지 다시 활성화상태로 돌아갈 수 있는, 예비 전력레일의 전압과 전력을 낮추게됩니다.

그리고 이보다 더 깊게 들어가게 되면 최종적으로 L3 Cache마저도 비워버리고

예비 전력레일마저 꺼버리게됩니다.

 

이렇게 CPU는 저희가 알지 못했던 그러한 기술을 사용하여

최적의 상태로 최고의 성능을 낼 수 있게끔 열심히 일을 하고 있다는 것입니다.

 

/* 1-2는 추가로 작성되었습니다. */

1-2. P-State와 C-State는 SSDT와 사촌지간?

 

여러분이 사용중이시고 너무나도 익숙해져버린 DSDT와 SSDT는

사실은 다소 높은 난이도를 자랑하는 중증의 컴덕후(?)들이 알아듣는 용어입니다.

 

이 DSDT, SSDT는 ACPI에 소속되어있는 친구들인데,

DSDT는 시스템의 기본적이면서도 서로 다른 부분들에 대하여 총 기술해둔 문서이고

DSDT가 주축이라면 SSDT는 보조로써 기타 장치에 대하여 추가기술해둔 문서라 볼 수 있겠습니다.

 

따라서 이 2가지는 컴퓨터에 대한 거의 대부분의 정보를 기술하고 있는 문서라 볼 수 있고

이것들을 잘만 조작하면? 어마무시한 일을 할 수 있다는 것을 조금만 머리를 굴려보면 알 수 있습니다.

 

여기서 CPU랑 관련이 깊은것은 SSDT로 둘 수 있는데, DSDT에서는 CPU에 대한 정보를

간략하게 코어 몇개 있어. 나머지는 외부 스크립트에 기술해두었으니 참조해서 볼게! 라는식으로만

시스템에게 말을 하기때문에, 실제로 CPU에 대한 정보가 없습니다.

 

그렇게? ACPI에서 SSDT (Secondary System Description)을 뒤져보면

CPU0Ist와 CPUPm으로 기술하고있는 씨피유 관련 정보 SSDT를 찾을 수 있습니다.

 

이것들은 CPU에 대한 정보를 나누어 기술하는건데 가장큰 특징을 꼽자면,

처음인 0번코어에 모든부분을 기술해두고 나머지 코어는 0번정보를 참조하여

쓰는 방식으로 동작한다라는 것입니다.

 

P-State, C-State에 대한 정보는 바로 이 SSDT에 존재하며

특히 CPU0Ist에 기술되어있다고 보면 되겠습니다.

 

여기서 조금 짚고 넘어가보아야 할 것은 CPUPm에 관한 부분은

CPU0Ist를 참조하는 좀 더 포괄적인 CPU관련 SSDT로써, 씨피유의 전력관리 및 동작에 있어

좀 더 큰 틀을 기술하고 있는 부분이라 볼 수 있습니다.

 

뺑글뺑글 돌려 말씀드렸는데, 간략하게 정리하자면

씨피유에 대한 정보는 DSDT의 경우는 간략기술이고,  SSDT에 자세히 기술되어있다는 것입니다.

따라서 이 SSDT에 기술된 내용 중 일부인 P-State와 C-State부분을 우리가 가로채서

다른 내용이 동작되게끔 해주어야한다는 것이죠.

 

이 과정에서 ssdtPRGen.sh등과 같은 SSDT파일들이 사용되는데

실제로 이 패치는 DSDT에 적용할 때가 가장 효력이 크게 나타나는편입니다.

 

왜냐하면 원리가 다르기 때문인데, DSDT는 SSDT를 참조합니다

그리고 SSDT는 CPU0IST가 담긴 SSDT와 CPUPm이 담긴 SSDT가 있는데

이때 DSDT는 CPU0Ist를 참조하고 CPUPm도 CPU0Ist를 참조합니다.

 

이 과정에서 만약 Original CPU0Ist대신에 다른 정보가 담긴 SSDT가 대체된다면

기존에 적용되는 CPU0Ist의 원본 값이 모두 무시되어버립니다.

이 이야기는 무엇을 의미하냐면, 혹시라도 모를 시스템 상의 고유한 값을 무시해버릴 수 있다는 것을 의미합니다.

 

가능하면 CPU는 덧붙이기 식으로 들어가야합니다.

만약 이 내용을 DSDT에 대신하여 넣어주게되면 시스템은 DSDT를 참고할 때 다음과 같이 참고합니다.

 

1. DSDT에 CPU P-State와 C-State가 기술된 것을 먼저 적용함

2. DSDT에서 참조하는 CPU0Ist SSDT를 추가로 적용함

(이때 이 값은 모두 덮어씌워지지 않고 참조용으로 보조로드될 가능성이 농후함)

3. CPUPm SSDT에서 참조하는 CPU0Ist SSDT정보에는 변경사항이 없음.

 

SSDT에는 ACST, APST, APPT, APCT등 여러가지 부분들이 기술되어있습니다.

여기서 중요한건 ACST, APST입니다. 바로 C_State, P_State를 의미하기 때문입니다.

 

하지만? 막상 찾아보면 CPUPm에서나 CPU0CST와 APCST를 로드할 뿐,

실질적으로 APST, ACST에대한 부분은 찾아볼 수 없습니다.

 

PST정도야 비슷한 것으로 _PSS가 있는데 이마저도 정보가 엉터리라는 것이지요.

바로 저희는 이러한 부분을 노려 _PSS는 냅두고 CPUPm이 로드하는 APST, ACST를 추가로

DSDT에 기술하여 정보를 로드시키는데에 주 목적이 있습니다.

 

다만 ACST는 아래에서 설명드리겠지만, 고유한 네이티브 값이 존재하기때문에

잘못 건드리면 원래보다 못한 상황이 연출될 수 있기때문에 패치하지 않습니다.

 

따라서, APST만 건드려주면 되는데 이것을 어떻게 건드려줄지에 대해서는

우선 CPU가 P-State, C-State를 잘 동작시키는지부터 확인하는 것이 우선이므로

먼저 CPU의 상태를 살펴보는 것부터 알아보도록 하겠습니다.

 

2. CPU의 상태 [P-State, C-State]를 확인해보자

 

그렇다면 이러한 CPU의 P-State과 C-State이 잡혀있는지

알 수 있는 방법은 없을지 궁금하실겁니다.

 

첨부파일에서 info4CPU 압축파일을 다운받아줍니다.

압축을 풀어주시면 AppleIntelInfo.kext와 IntelPowerGadget 설치 프로그램이 나오는데,

인텔 파워가젯의 경우에는 브로드웰 혹은 스카이레이크군에서 설치가 안되는 경우가 있습니다.

 

이 경우에는 CPU의 정보가 제대로 시스템에 로드되지 않아서 나오는 현상인데

클로버의 패치를 통하여 CPU정보를 올바르게 넣어주시면 설치가 될겁니다.

 

그래도 만약 설치가 안되거나 실행이 안되신다면 과감하게

HateIntelGadget 압축파일을 다운받아주시기 바라겠습니다 :)

단촐하지만 각 코어의 소모전력을 알려주는 프로그램입니다.

[인텔이 공식으로 지원하는 API로 제작되어 신뢰성이 있습니다]

 

켁스트는 직접 설치하시면 나중에 제거가 귀찮으므로 커맨드라인을 사용하여줍니다.

커맨드라인 입력창을 띄워줍니다. (터미널창입니다)

 

그리고 아래 명령어를 쳐줍니다.

 

Sudo chown -R 0:0 

 

엔터를 누르지 마시고 저 상태에서 0:0다음에 띄어쓰기를 해줍니다.

그런 후 터미널 창에 다운받으신 켁스트를 드래그 앤 드랍해주시면 경로가 적혀집니다.

 

그런 후에 엔터를 눌러줍니다.

그리고 같은 방식으로 Sudo kextLoad 를 쳐주고 띄어쓰기 한번 해주신 후에

드래그 앤 드랍으로 켁스트를 터미널창에 넣어주고 경로가 적혀지면 엔터를 눌러줍니다.

 

마지막으로 sudo cat /tmp/AppleIntelInfo.dat을 쳐줍니다.

아래는 정상적으로 적용된 상태의 터미널 사진입니다.

스크린샷 2016-03-07 오후 7.39.57.png

 

그리고 저상태에서 엔터를 꾹 누르면 아래처럼 나옵니다.

스크린샷 2016-03-07 오후 7.41.04.png

여기서 주의깊게 살펴야 할 것은 C3,C6,C7부분입니다.

코어가 제대로 0,1,2,3 나온 것이 보이시나요?

만약 여러분의 씨피유가 i7등이라면 0~7까지 나와야합니다.

 

그리고 P-State는 위의 사진을 보면 8~22 사이의 숫자가 생략된 것이 보이실겁니다.

원래는 이렇게 나오면 P-State가 정상적으로 잡힌 것이 아닙니다.

거의 모든 배수에 대해 촘촘하게 나와주어야 제대로 잡힌 것이라 볼 수 있는데,

 

여러분이 현재 켜두고 있는 모든 프로그램을 전부 종료해주세요.

아 물론 사파리르 종료하지 않으셔도 됩니다 ^^;

 

그런 상태에서 느긋하게 기다리시면서 마지막 문구인 sudo cat /tmp/AppleIntelInfo.dat을 쳐주시면

아래의 화면처럼 배수가 좀더 촘촘히 나오는걸 볼 수 있습니다.

 

스크린샷 2016-03-07 오후 7.45.23.png

그런데 아마도 대부분의 경우는 P-State가 제대로 잡혀있지 않아서

위의 사진처럼 촘촘하게 잡혀나오는 경우가 별로 없기 때문에, 따로 패치를 해주어야하는데

그부분은 조금 있다가 글의 아래부분에서 같이 해보도록 하겠습니다.

우선은 C-State의 추가 점검이 남았기 때문입니다.

 

참고로 위의 P-State을 확인 할 때에 백그라운드 프로세서를 모두 종료하여야 하는 이유는

씨피유가 충분히 쉴 수 있는 조건을 마련해주어야 하기 때문입니다.

일은 열심히 줘놓고 쉬라고 하면 말이 안되니깐요.

 

C-State을 확인하기 전에, 로드해준 켁스트를 언로드시켜줍니다.

명령어는 sudo kextunload를 해주시고

띄어쓰기 하신 후 켁스트 드래그 앤 드랍하시고 엔터해주시면 됩니다.

[나중에 패치 후 정상 작동확인을 위하여 삭제하는 하지 말아주세요]

 

그럼 켁스트도 삭제했겠다!

이제 C-State가 정말로 제대로 잡힌게 맞는건지 확인을 하기 위하여 Intel Power Gadget을 열어줍니다.

그리고 Power부분이 어떻게 움직이는지 유심히 살펴봐줍니다.

 

만약 그래프가 아래처럼 나온다면?

스크린샷 2016-03-07 오후 7.50.13.png

 

유감스럽게도 여러분의 씨피유는 C-State가 제대로 동작하고 있지 않을 가능성이 높습니다.

이부분을 확인하실 때에도 반드시 백그라운드 프로세서 및 모든 프로세서는 다 종료해주시고

순수하게 인텔파워가젯만 켜놓은 상태에서 확인하셔야합니다.

 

카카오톡같은 것도 전부 종료입니다.

[의심가는건 전부 종료해주세요.]

 

그리고 다시 파워가젯을 끄고 킨 후에 소모전력량을 체크해줍니다.

만약 아래 사진처럼 나왔다면 정상적으로 동작하는 것입니다.

스크린샷 2016-03-07 오후 7.54.45.png

보이시나요? 앞서 보여드렸던 그래프와는 전혀 딴판인, 매우 안정적인 그래프가말이죠

심지어 전력을 확인해보니 위에 0.14W라고 적혀있네요.

 

바로 위처럼 나오면 C-State이 제대로 동작한다고 볼 수 있겠습니다.

그러나 여러분의 씨피유는 저렇게 나올 수도 혹은 나오지 않을 수도 있을겁니다.

왜냐하면 제대로 패치가 되지 않았을 수 있기 때문이죠.

 

만약 여러분의 컴퓨터에서 Intel Power Gadget을 설치할 수 없거나 실행할 수 없는 경우라면!

다운받으셨던 HateIntelGadget 파일의 압축을 해제하고 로그램을 실행시켜주세요.

 

아마도 아래처럼? 단촐하지만 씨피유의 각 코어가 소모하는 소모전력이 나올겁니다.

스크린샷 2016-03-08 오후 9.56.22.png

 

자, 그럼 확인도 다 해봤겠다 만약 자신의 씨피유가 P-State과 C-State을 제대로

수행하지 못하는 것 같다고 판단이 되신다면 지금부터 작업하는 것들을

유심히 살펴보셔서 따라해주시면 되겠습니다.

 

3. CPU의 P-State와 C-State를 잡아보자!

3-1. P-State와 C-State 워밍업

 

우선 스피드 스텝을 위하여 반드시 로드되어야하는 켁스트들이 있습니다.

이 친구들이 정상적으로 로드되는지를 살펴보시면 되겠습니다.

 

X86PlatformPlugin.kext

X86PlatformShim.kext

 

혹은

 

ACPI_SMC_PlatformPlugin.kext

 

그리고

 

AppleLPC.kext

AppleAPIC.kext

AppleACPI*.kext

 

여기서 우리가 주로 패치하게될 친구들은

X86Platform~ 켁스트와 LPC켁스트 그리고 APIC 이 3가지의 켁스트들입니다.

 

우선 여러분의 부트로더를 살펴봐주세요.

카멜레온이든 클로버든, 여러분의 의도와는 상관없이 아마도

P-State, C-State관련 옵션이 켜져있을 수 있어요.

이부분들을 모두 꺼주세요.

 

왜냐면, 부트로더들이 지원하는 CPU의 전력관리 옵션은

강제로 표준화시켜서 적용하는 것이기 때문에 예기치 못한 오류와 동작 이상을

불러일으킬 가능성이 있기 때문이에요.

 

그리고 여러분이 따로 적용해둔 DSDT나 SSDT가 있다면 과감하게 백업을 해주고

시스템 적용을 해제시켜주신 후에 재부팅을 해줍니다.

혹은 여러분이 적용해둔 DSDT에 추가로 패치해주셔도 상관이 없습니다 ^^.

 

그리고 바이오스에서 C-State관련 기술이 disable되어있다면,

Auto 혹은 Enabled로 변경해주시기 바라겠습니다.

 

또한 여러분의 파워서플라이가 하스웰 전력모드를 지원하는지 확인해주세요.

일부 파워서플라이는 하스웰의 새로운 전력관리기술을 지원하지 않아

부득이하게 C-State의 C6/C7으로 진입 시 컴퓨터가 강제종료되는 현상이 일어날 수 있습니다.

 

확인하실 때에는 자신의 파워서플라이가 12V2에서 미니멈 0.05A를 만족하는지 확인해주시면 됩니다.

0.05A랑 같거나 0.05A보다 작은 숫자면 이상이 없는거에요.

 

모든 확인과 준비가 끝났다면, 첨부파일에서 MaciASL을 다운받아주세요.

이 프로그램은 여러분의 컴퓨터에서 SSDT, DSDT를 추출하여 수정할 수 있는

프로그램이기 때문에 이거 하나로도 충분히 작업이 가능합니다.

 

아 참, 여러분의 씨피유 값들을 좀 더 수월하게 넣기 위하여

첨부파일의 ssdtPRGen을 다운받아주셔서 바탕화면에 폴더채로 압축을 풀어줍니다.

 

그리고 폴더 안의 ssdtPRGen.sh를 터미널에 드래그 앤 드랍으로 가져다 실행시켜주시면

폴더 안에 ssdt.dsl과 ssdt.aml이 생성되는데, 반드시 ssdt.dsl혹은 ssdt.aml을 챙겨줍니다.

 

3-2. P-State와 C-State 패치를 위한 DSDT, SSDT작업

 

이제, MaciASL을 켜줍니다.

그리고 _PR이라 되어있는 부분을 선택해줍니다.

 

스크린샷 2016-03-07 오후 8.12.39.png

 

이부분을 선택하면, 아마도 우측화면에 아래처럼 작성되어있을거에요.

 

...~~~

    Scope (_PR)
    {
        Processor (CPU0, 0x01, 0x00001810, 0x06) {}
        Processor (CPU1, 0x02, 0x00001810, 0x06) {}
        Processor (CPU2, 0x03, 0x00001810, 0x06) {}
        Processor (CPU3, 0x04, 0x00001810, 0x06) {}
        Processor (CPU4, 0x05, 0x00001810, 0x06) {}
        Processor (CPU5, 0x06, 0x00001810, 0x06) {}
        Processor (CPU6, 0x07, 0x00001810, 0x06) {}
        Processor (CPU7, 0x08, 0x00001810, 0x06) {}
    }

 

...~~~~

 

이제 저 부분에 SSDT 내용을 패치해줄겁니다.

그런데 재미난 사실은? 여러분의 SSDT를 여기에 패치해 줄 때

오로지 P-State만 패치해주고, C-State은 건드리지 않는다는 것입니다.

 

이 이유는 C-State을 순수하게 오리지널로 여러분의 씨피유의 특성에 맞게끔

패치해 주기 위해선 고유 Latency라는 값이 필요한데, 이것을 구할 수 있는 방법이

없기 때문입니다.

 

그로 인하여 시스템에게 권한을 넘겨 알아서 자율적으로 사용하게끔 해주는 것입니다.

 

Processor (CPU0, 0x01, 0x00001810, 0x06) {} 여기를 보시면

{} <<이게 있을겁니다. 이 중괄호 사이에 여러분이 작성하게 될 내용을 넣어줄 것이므로 -_-;;

 

당황하지 마시고 헷갈리시는 부분이 있다면 첨부파일에서

followMeDSDT 압축파일을 다운받아주셔서 이것을 토대로

비슷하게 작성해나가면 되겠습니다.

 

Method (_INI, 0, NotSerialized)
            {
                Store ("eFxsDiT version......: 1.2 / Mac OS X 10.11.3 (Build 15D21)", Debug)
                Store ("host processor.......: Intel(R) Core(TM) i5-4670 CPU @ 3.4GHz", Debug)
                Store ("target processor.....: i5-4670", Debug)
                Store ("number of processors.: 1", Debug)
                Store ("baseFequency.........: 800", Debug)
                Store ("frequency............: 3400", Debug)
                Store ("busFrequency.........: 100", Debug)
                Store ("logicalCPUs..........: 4", Debug)
                Store ("maximum TDP..........: 84", Debug)
                Store ("packageLength........: 31", Debug)
                Store ("turboStates..........: 4", Debug)
                Store ("maxTurboFrequency....: 3800", Debug)
                Store ("machdep.xcpm.mode....: 1", Debug)
            }

 

우선은 위와같은 _INI로 보이는 부분을 아까 추출하였던 ssdt.aml에서 복사하여

DSDT의 CPU0에다가 넣어줍니다.

 

Name (APLF, Zero)
            Name (APSN, 0x04)
            Name (APSS, Package (0x1F)
            {
                Package (0x06)
                {
                    0x0ED8, 
                    0x00014820, 
                    0x0A, 
                    0x0A, 
                    0x2600, 
                    0x2600
                }, 

                Package (0x06)
                {
                    0x0E74, 
                    0x00014820, 
                    0x0A, 
                    0x0A, 
                    0x2500, 
                    0x2500
                }, 

                Package (0x06)
                {
                    0x0E10, 
                    0x00014820, 
                    0x0A, 
                    0x0A, 
                    0x2400, 
                    0x2400
                }, 

                Package (0x06)
                {
                    0x0DAC, 
                    0x00014820, 
                    0x0A, 
                    0x0A, 
                    0x2300, 
                    0x2300
                }, 

                Package (0x06)
                {
                    0x0D48, 
                    0x00014820, 
                    0x0A, 
                    0x0A, 
                    0x2200, 
                    0x2200
                }, 

                Package (0x06)
                {
                    0x0CE4, 
                    0x00013ADD, 
                    0x0A, 
                    0x0A, 
                    0x2100, 
                    0x2100
                }, 

                Package (0x06)
                {
                    0x0C80, 
                    0x00012DD8, 
                    0x0A, 
                    0x0A, 
                    0x2000, 
                    0x2000
                }, 

                Package (0x06)
                {
                    0x0C1C, 
                    0x0001210F, 
                    0x0A, 
                    0x0A, 
                    0x1F00, 
                    0x1F00
                }, 

                Package (0x06)
                {
                    0x0BB8, 
                    0x00011482, 
                    0x0A, 
                    0x0A, 
                    0x1E00, 
                    0x1E00
                }, 

                Package (0x06)
                {
                    0x0B54, 
                    0x00010832, 
                    0x0A, 
                    0x0A, 
                    0x1D00, 
                    0x1D00
                }, 

                Package (0x06)
                {
                    0x0AF0, 
                    0xFC1C, 
                    0x0A, 
                    0x0A, 
                    0x1C00, 
                    0x1C00
                }, 

                Package (0x06)
                {
                    0x0A8C, 
                    0xF041, 
                    0x0A, 
                    0x0A, 
                    0x1B00, 
                    0x1B00
                }, 

                Package (0x06)
                {
                    0x0A28, 
                    0xE4A0, 
                    0x0A, 
                    0x0A, 
                    0x1A00, 
                    0x1A00
                }, 

                Package (0x06)
                {
                    0x09C4, 
                    0xD939, 
                    0x0A, 
                    0x0A, 
                    0x1900, 
                    0x1900
                }, 

                Package (0x06)
                {
                    0x0960, 
                    0xCE0B, 
                    0x0A, 
                    0x0A, 
                    0x1800, 
                    0x1800
                }, 

                Package (0x06)
                {
                    0x08FC, 
                    0xC316, 
                    0x0A, 
                    0x0A, 
                    0x1700, 
                    0x1700
                }, 

                Package (0x06)
                {
                    0x0898, 
                    0xB859, 
                    0x0A, 
                    0x0A, 
                    0x1600, 
                    0x1600
                }, 

                Package (0x06)
                {
                    0x0834, 
                    0xADD4, 
                    0x0A, 
                    0x0A, 
                    0x1500, 
                    0x1500
                }, 

                Package (0x06)
                {
                    0x07D0, 
                    0xA387, 
                    0x0A, 
                    0x0A, 
                    0x1400, 
                    0x1400
                }, 

                Package (0x06)
                {
                    0x076C, 
                    0x9970, 
                    0x0A, 
                    0x0A, 
                    0x1300, 
                    0x1300
                }, 

                Package (0x06)
                {
                    0x0708, 
                    0x8F90, 
                    0x0A, 
                    0x0A, 
                    0x1200, 
                    0x1200
                }, 

                Package (0x06)
                {
                    0x06A4, 
                    0x85E6, 
                    0x0A, 
                    0x0A, 
                    0x1100, 
                    0x1100
                }, 

                Package (0x06)
                {
                    0x0640, 
                    0x7C71, 
                    0x0A, 
                    0x0A, 
                    0x1000, 
                    0x1000
                }, 

                Package (0x06)
                {
                    0x05DC, 
                    0x7331, 
                    0x0A, 
                    0x0A, 
                    0x0F00, 
                    0x0F00
                }, 

                Package (0x06)
                {
                    0x0578, 
                    0x6A25, 
                    0x0A, 
                    0x0A, 
                    0x0E00, 
                    0x0E00
                }, 

                Package (0x06)
                {
                    0x0514, 
                    0x614E, 
                    0x0A, 
                    0x0A, 
                    0x0D00, 
                    0x0D00
                }, 

                Package (0x06)
                {
                    0x04B0, 
                    0x58AA, 
                    0x0A, 
                    0x0A, 
                    0x0C00, 
                    0x0C00
                }, 

                Package (0x06)
                {
                    0x044C, 
                    0x5039, 
                    0x0A, 
                    0x0A, 
                    0x0B00, 
                    0x0B00
                }, 

                Package (0x06)
                {
                    0x03E8, 
                    0x47FB, 
                    0x0A, 
                    0x0A, 
                    0x0A00, 
                    0x0A00
                }, 

                Package (0x06)
                {
                    0x0384, 
                    0x3FEF, 
                    0x0A, 
                    0x0A, 
                    0x0900, 
                    0x0900
                }, 

                Package (0x06)
                {
                    0x0320, 
                    0x3814, 
                    0x0A, 
                    0x0A, 
                    0x0800, 
                    0x0800
                }
            })            

 

그리고 이어서, 위의 부분도 추출한 ssdt.aml에서 복사하여 DSDT에 넣어줍니다.

여기서 부터가 중요한데, _CST, ACST라고 되어있는 부분은 건너 뛸겁니다.

 

그리고 바로 마지막단의 

Method (_DSM, 4, NotSerialized)
            {
                Store ("Method _PR.CPU0._DSM Called", Debug)
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x02)
                {
                    "plugin-type", 
                    One
                })
            }

 

이 문구를 DSDT Cpu0에다가 넣어주시면 되겠습니다.

이렇게 해주셔야 CPU0의 P-State만 패치되고 C-State은 패치되지 않으며

마지막단의 _DSM을 통하여 X86PlatformPlugin.kext, X86PlatformShim.kext가 로드됩니다.

 

만약 두 켁스트가 로드되지 않는경우는 AppleLPC, AppleAPIC 켁스트가 로드되어있지 않아서

정상동작이 되지 않는 것이므로 남은 씨피유에 대한 작업을 마무리 한 후 같이 패치해보도록 하겠습니다.

 

이렇게 CPU0이 끝났다면, CPU1부터는 아래처럼 패치해주시면 됩니다.

Processor (CPU1, 0x02, 0x00001810, 0x06)
        {
            Method (APSS, 0, NotSerialized)
            {
                Store ("Method _PR.CPU1.APSS Called", Debug)
                Return (^^CPU0.APSS)
            }
        }

 

CPU1~3까지는 쿼드코어인 경우

Method (APSS, 0, NotSerialized)
            {
                Store ("Method _PR.CPU1.APSS Called", Debug)
                Return (^^CPU0.APSS)
            }

를 넣어 패치해줍니다.

이때 Method _PR.CPU1 << 이 숫자는 넣어주는 씨피유의 숫자에 맞게 수정해줍니다.

그리고 i7등의 씨피유라면 CPU1~CPU7까지 전부 패치해주시면 됩니다.

 

3-3. P-State와 C-State 패치를 위한 LPC, APIC 작업

 

여러분의 씨피유가 이제 모양새를 갖춰나가고 있습니다.

마지막으로 중요한 LPC, APIC 켁스트를 로드하게끔 패치해주겠습니다.

 

만약 여러분이 켁스트를 확인해 보았더니 APIC는 정상적으로 로드된다!

그러시면 패치해주지 않으셔도됩니다.

 

브로드웰 이상의 기종부터는 APIC의 패치가 필요할 수 있는데,

파이커 아저씨가 올려준 APIC 패치를 소개합니다.

이 패치는 스카이레이크 전용 패치이므로 함부로 적용하시면 안됩니다.

 

해당 패치는 제가 올려둔 글이 있으므로 링크로 대체합니다.

https://www.x86.co.kr/successtip/1078176

 

이어서 AppleLPC.kext를 패치하는 방법입니다.

해당 패치방법은 샨님께서 소개해주신 방법이 있고, 제가 사용하는 간편한 방식이 있는데

두가지 모두 적용이 가능하므로 ^^ 둘다 링크로 대체하겠습니다.

 

1. IanMinChangShin님의 방법으로 AppleLPC 로드하기

https://www.x86.co.kr/successtip/1095488

 

2. DSDT방식으로 AppleLPC 로드하기

https://www.x86.co.kr/successtip/1012055

 

이렇게 패치가 모두 완료되었다면 완성된 DSDT본을 들고 ^^...

클로버나 카멜레온에게 DropDSDT등을 통하여 인식시켜준 후, 재부팅을 시켜줍니다.

 

부팅이 이상없이 되었다면, 여러분이 패치한게 제대로 적용되었는지 확인해보시고

문제없이 적용되었고 켁스트들도 다 로드되었다면 다시 2번으로 올라가서

씨피유가 정상동작하는지 살펴보도록합니다.

 

제대로 동작하는게 확인되었다면, 성공입니다! 축하드려요 짝짝짝.

 

4. 우리를 기다리고 있는 마무리 작업

4-1. AGPM 켁스트 수정하기

 

아직 작업은 모두 끝나지 않았답니다 -_-++ 후후.

진정한 휴식을 위하여 씨피유가 잘 잘 수 있게 만들어 주는 것도 임무입니다 ㅎㅎ.

 

잠자기를 위하여 몇가지 패치를 더 해줄건데, 많지는 않습니다.

첫째로 AGPM패치입니다. 해당 패치는 제가 공개를 안 했는데 말이죠 (궁시렁)

대부분 X86Platform 관련 켁스트가 로드되면 정상적으로 AppleGraphicsPowerManagement.kext라는 것이 함께 로드됩니다.

 

그런데 간혹가다 기종문제로 인하여 AGPM오류가 나오면서 기종 정보를 찾을 수 없다고 나오는데

이런 경우에는 여러분의 기종을 직접 추가로 패치해주어야만 한답니다.

 

AppleGraphicsPowerManagement.kext를 패키지보기 한 후

Info.plist를 첨부파일의 PlistEdit Pro를 다운받아 열어줍니다.

 

혹은 파인더를 열어주시고 command + shift + g 를 동시에 눌러주시고

/System/Library/Extensions/AppleGraphicsPowerManagement.kext/Contents 를 붙여넣기 해주신 후

엔터를 눌러주시면 해당 위치로 바로 이동되니 참고해주시면 감사하겠습니다.

 

이 파일을 바로 수정하면 안되므로 바탕화면에 옮겨줍니다.

그리고 다운받은 PlistEdit Pro로 해당 파일을 열어줍니다.

 

차례대로 IOKitPersonalities -> AGPM -> Machines로 들어가줍니다.

와우 값들이 겁나 많습니다.... 여기서 자신이 사용한 SMBIOS 정보와 일치하는 맥으로 들어가줍니다.

 

저는 iMac 17,1을 사용중이에요.

따라서 Mac-DB15BD556843C820 로 들어가도록 하겠습니다.

 

스크린샷 2016-03-07 오후 8.52.56.png

 

펼쳐보면 위의 사진처럼 저옵가 나와요.

그런데 중요한건 여러분이 사용하는 정보가 저기에 있느냐라는겁니다.

 

아마 대부분 없을건데, 이러한 경우에는 자신이 사용하는 그래픽 기종과 동종모델을

사용하고 있는 맥 시리즈가 있는지 찾아보는것입니다.

 

제 경우는 HD4600을 사용중이기 때문에 iMac 14,2군이 가장 흡사한 그래픽을 사용하므로

해당 맥의 정보를 보기 위하여 위의 사진에서 해당 맥 보드를 찾아 펼쳐줍니다.

 

iMac 14, 2에 해당되는 맥 보드값은 Mac-27ADBB7B4CEE8E61이므로 정보를 살펴보면 아래처럼 나옵니다.

스크린샷 2016-03-07 오후 8.58.08.png

 

10de 시리즈는 지포스시리즈이므로 패스하고

제가 필요한 부분은 IGPU부분이므로 해당 부분을 복사해줍니다.

 

그리고 이 값을 제가 사용중인 smbios 모델과 동일한 부분의 IGPU에다가 덮어씌워줍니다.

스크린샷 2016-03-07 오후 9.00.28.png

위는 적용하기 전 사진입니다. 보기에도 값이 별로 없는게 보이시죠?

 

스크린샷 2016-03-07 오후 9.00.51.png

그러나 패치를 해준 후에는 이렇게 값이 빵빵해졌습니다 ㅎㅎ.

이렇게 패치가 완료되었다면 수정된 plist를 Info.plist라는 이름으로 바탕화면에 저장해줍니다.

그리고 이 Info.plist를 처음에 들어갔던! AGPM.kext의 Info.plist를 대신하여 넣어줍니다.

[만일을 대비하여 원본은 항상 백업해줍니다]

 

그리고 켁스트 유틸리티 등을 사용하여 권한복구와 켁스트 캐시 리빌드를 해줍니다.

첨부파일의 KCPM Utility Pro를 다운받아주신 후 실행시켜주세요.

 

스크린샷 2016-03-07 오후 9.05.30.png

실행하신 후 Maintenance 탭을 누르신 후에 Execute버튼을 눌러줍니다.

그리고 기다리시면 권한복구와 켁스트캐시가 리빌드됩니다.

 

4-2. DSDT에서 USB 수정하기

 

마지막으로 잠자기 시에 자주 깨는 원인으로 꼽히는 USB를 패치하도록 하겠습니다.

이 유에스비는 원인이 매우 다양한편에 속해있는데, 해당 패치를 하면서 ^^...

USB 3.0 픽스까지 같이 해보도록 하겠습니다.

 

유에스비도 잡으려고 열심히 난리부르스를 쳤었는데요, 유에스비 3.0은 인식을 간단하게

시킬 수 있는 패치법이 따로 있습니다.

 

우선은 터미널창을 띄워주시구요, 만약 여러분이 사용중인 보드가 100Series 대의 보드라면

2번으로 패치해주시고 100보다 작은 숫자의 보드라면 1번으로 패치해주시면 되겠습니다.

 

1번패치 (70 ~ 90 Series Board).

sudo perl -pi -e 's|\x00\x00\x83\xBD\x8C\xFE\xFF\xFF\x10|\x00\x00\x83\xBD\x8C\xFE\xFF\xFF\x15|' /System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBXHCIPCI.kext/Contents/MacOS/AppleUSBXHCIPCI

 

2번패치 (1xx Series Board).

sudo perl -pi -e 's|\x00\x00\x83\xBD\x8C\xFE\xFF\xFF\x10|\x00\x00\x83\xBD\x8C\xFE\xFF\xFF\x1b|' /System/Library/Extensions/IOUSBHostFamily.kext/Contents/PlugIns/AppleUSBXHCIPCI.kext/Contents/MacOS/AppleUSBXHCIPCI

 

패치를 완료하신 후에, DSDT를 열어줍니다.

여러분이 위에서 수정하셨던 그 DSDT를 말이죠 ㅎㅎ

 

DSDT에서 EHC1, EHC2, XHC부분을 살펴보셔서 DSM부분이 없으시다면

아래의 값을 위 3곳에다가 모두 넣어주시면 되겠습니다.

 

Method (_DSM, 4, NotSerialized)
            {
                Store (Package (0x0D)
                    {
                        "AAPL,current-available", 
                        0x0834, 
                        "AAPL,current-extra", 
                        0x0A8C, 
                        "AAPL,current-in-sleep", 
                        0x03E8, 
                        "AAPL,current-extra-in-sleep", 
                        0x0834, 
                        "AAPL,max-port-current-in-sleep", 
                        0x0A8C, 
                        "AAPL,device-internal", 
                        0x02, 
                        Buffer (One)
                        {
                            0x00
                        }
                    }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }

 

이 값은 모든 버전에서 다 통하는 값은 아닙니다.

여러분에게 맞는 값들이 구글에 돌아다니니 DSDT USB fix 등으로 검색하셔서 찾아보시면

다양한 버전의 패치가 나올겁니다.

 

그리고 위 3곳에 대한 PRW도 확인해줍니다.

 

Method (_PRW, 0, NotSerialized)
            {
                Return (GPRW (0x0D, 0x04))
            }

 

위의 값처럼 0x0D, 0x04가 아니라면 수정해줍니다.

혹시라도 이렇게 수정했는데 잠자기가 잘 안된다거나 동작이상이 보인다면

여러분의 보드에 맞는 패치된 DSDT를 구글링하셔서 구하신 후 참조하셔서 패치해주셔야합니다.

 

대부분은 0x0D, 0x04로도 패치가 잘 먹습니다 ㅎㅎ.

이 패치 또한 followMeDSDT에 패치된 사안이기 때문에 참고하셔서 패치하시면 되겠습니다.

 

유에스비 패치 관련하여 좀 더 자세하게 알고싶으신 분들은?

https://www.x86.co.kr/successtip/1027189 글귀를 참고해주세요.

 

4-3. DSDT에서 기타 Kext 로드하기

 

마지막으로 DSDT에서 KT Controller, IMEI Controller, AppleSMCLMU, AppleACPIEC 등을 로드시켜보겠습니다.

해당 패치방법은 위에서 언급한 LPC를 로드하는 방식과 흡사합니다.

 

아래는 IMEI 패치를 위한 문구입니다.

 

Device (IMEI)
        {
            Name (_ADR, 0x00160000)
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero))
                {
                    Return (Buffer (One)
                    {
                        0x03
                    })
                }

                Return (Package (0x04)
                {
                    "subsystem-id", 
                    Buffer (0x04)
                    {
                        0x70, 0x72, 0x00, 0x00
                    }, 

                    "subsystem-vendor-id", 
                    Buffer (0x04)
                    {
                        0x86, 0x80, 0x00, 0x00
                    }
                })
            }
        }

 

이 값을 PCI0쪽에다가 추가로 넣어주시면 되겠습니다.

물론 subsystem-vendor-id등은 여러분에게 맞는 값으로 넣어주셔야

제대로 켁스트가 로드됩니다!

 

그리고 EC, LMU켁스트들은 로드하는 방법에 대하여

https://www.x86.co.kr/successtip/1104469 글로 작성해두었습니다.

다소 불친절하기는 하여도, 추가적인 패치를 감행하실 때에 도움이 될거라 생각합니다.

 

4-4. 잠자기와 관련된 몇가지 옵션 설정하기

 

이제 마무리로 몇가지 추가 작업만 해주면 됩니다.

pmset -g assertions를 통하여 잠자기에 방해가되는 프로그램을 확인해주세요.

 

잠자기를 하신 후 잠을 자다가 다시 일어나는 경우가 있는데

이 때 바로 터미널에다가 pmset -g assertions를 치시면 아래처럼 잠을 잘 수 없는 이유가 나옵니다.

 

스크린샷 2016-03-07 오후 9.23.46.png

 

위의 경우에는 노래를 틀고 있는 중 (coreaudiod)이며 Near Lock이라는 프로세서로 인하여 잠을 잘 수 없다고합니다.

이렇게 잠을 잘 수 없는 이유를 알 수 있기 때문에 해당 문구를 통하여 잠을 제대로 자는지, 못자는지를 살펴볼 수 있습니다.

 

그리고 pmset -g 를 통하여 시스템 잠자기의 설정값을 확인해주세요.

스크린샷 2016-03-07 오후 9.25.37.png

 

위의 경우에는 파워냅이 1로 활성화되어있고 파워는 4시간이되면 자동으로 종료됩니다.

그리고 대기모드로는 3시간이 지나면 자동으로 전환되며 잠자기의 모드는 3번모드입니다.

 

잠자기도 여러가지 모드로 나뉘어집니다.

 

hibernatemode 0 [얕은 잠자기]

이 모드는 램에만 전류를 유지시켜 잠자기를 유지하는 모드인데 전력소모가 가장 큽니다.

(그런데 컴터 켜논거에 비해선 새발의 피보다도 적습니다.)

하드디스크를 사용하지 않기 때문에 램의 전류가 끊기면 모든 작업이 손실된다는 단점이 있습니다.

다만, 잠자기 옵션 중에서는 복귀시간이 가장 빠릅니다.

 

hibernatemode 1 [깊은 잠자기] (standbyMode)

이 모드는 잠을 자면 하드디스크에 램정보를 모두 저장하고 파워를 차단합니다.

잠자기에서 복귀시 하드디스크의 정보를 읽어 램으로 다시 정보를 복구시키고 작업을 이어갑니다.

속도가 가장 느리지만, 데이터가 안전하게 유지된다는 이점이 있습니다.

[해당 모드는 맥북시리즈의 smbios를 사용중인 경우만 쓸 수 있다고합니다]

 

hibernatemode 3 [얕은잠자기 + 깊은잠자기 = 안전한 잠자기]

이 모드는 일정 시간동안 0번으로 동작하다가 특정 시간이 지나면 1번으로 동작하는 잠자기 모드입니다.

이때 관련하는 옵션으로는 standbydelay, autopoweroffdelay가 관여합니다.

standbydelay는 잠자기 시작후 깊은잠자기까지 들어가는데 걸리는 시간 (초단위)을 의미하며

autopoweroffdelay는 전원차단을 언제 할 것인지에 대한 시간 (초단위)을 의미합니다.

[해당 모드도 맥북시리즈의 smbios를 사용중인 경우만 쓸 수 있다하는데, 확실하지는 않습니다.]

 

hibernatemode 25 [1번과 흡사]

이 모드도 1번과 흡사하나 약간의 동작방식의 차이가 있다고합니다.

자세한건 검색을해보시면 될 것 같습니다.

 

여러분이 주 타겟으로 사용하게될 부분은 0~3번이 될텐데

만일 ssd등을 사용중이시라면 잠자기는 0번 혹은 컴퓨터 종료를 추천드립니다.

파일의 읽고쓰는 과정에서 수명 단축이 일어나기 때문이며, ssd 부팅속도상

잠자기까지 실천해야할 정도로 큰 필요성을 느끼지 못하기 때문입니다.

[노트북이라면 더하겠죠?]

 

해당 값의 수정 방법은 sudo pmset -a hibernatemod 0 식으로 수정하여 사용하시면 되겠습니다.

 

그리고 블루투스를 사용하는 경우에는 옵션에서 블루투스 장비로 깨우기 허용이 있습니다.

이부분을 해제해주시는 것을 추천드립니다.

 

실제로 정품 블루투스 마우스를 사용하는 경우가 아니라면

일부 기종에 대하여 잠자기 시 마우스로 인하여 잠자기가 깨버리는 현상이 일어날 수 있다고

애플 공식 문서에서 언급을 하고 있습니다.

 

잠자기와 관련한 몇가지 문제점들은 아래의 글타래를 참고해주시면 감사드리겠습니다.

https://www.x86.co.kr/successtip/1080724

 

이렇게 모든 패치가 마무리 되었다면 최종적으로

위에서 설명드렸던 방식을 사용하여 켁스트 리빌드를 다시 해주고? 

재부팅을 해줍니다. 문제가 없다면 성공입니다@

[고생하셨습니다!!]

 

5. 마무리를 하며...

 

이렇게 패치가 모두 마무리되었습니다.

여러분의 씨피유가 안녕하기를 바랄 뿐입니다 ㅎㅎ,,,,,.

 

비로소 모든 것들이 정리된듯한 느낌과 함께 개운해지는 것만 같은건 제 착각이려나요?

여러분들의 소중한 의견과 덧글들, 그리고 추천이 지금의 이 글을 탄생시킨 원동력이라 생각합니다 ㅎㅎㅎㅎ.

 

이제 잠자기는 더 이상 연구하는 것이 무리라 생각되어 종료하려합니다.

거의 모든 것들의 종지부를 찍은 것 같은 느낌마저 듭니다만, 커맥의 세계에서는 정답이 없고

끝이 없는 무한한 삽질만이 존재하기때문에 그냥 자기 스스로 어느정도 선을 긋고 만족해야하는 부분이 있는건 어쩔 수 없는 것 같습니다.

 

다만, 얼마나 더 연구하고 더 리얼맥에 가까워 질 수 있느냐는

그러한 선을 긋지 않고 앞으로 계속 나아가는 것과 비례한다고 말할 수 있을 것 같습니다.

 

음,, 어쩌다보니 글이 엄청나게 길어져버렸습니다만

몇몇 글타래들 마저도 다 포함하고 좀 더 구체적으로 작성했다면 아마도

글이 1.5배는 더 길어졌을거라 생각합니다.

 

안타깝게도, 잠자기는 답이 없는 것 같습니다. 이렇게 패치하고 저렇게 패치해도

원하는 방식대로 입맛에 맞게 패치하기가 어려울 뿐 더러 직접적인 패치방법이 없기 때문입니다.

모든 기술이 한데 어우러진 만큼 모든 부분을 패치해야 간접적으로 같이 패치가 될 뿐이라는 것이지요.

 

그래서 잠자기보다는 CPU의 전력관리기술인 P-State과 C-State을 잡는걸 중점으로 기술해놓았다고

보아도 과언은 아닐것입니다. 실로 잠자기에서 CPU로 인한 커널패닉이나 동작이상이 많이 발견되니깐 말이죠.

 

추가로 파워버튼패치 등이 더 있긴 하지만, 이 부분들은 

Method (_PRW, 0, NotSerialized)
            {
                Return (GPRW (0x0D, 0x04))
            }

 

이런 패치를 해주는 것과 비슷한 방식으로 간단한 값들을 수정하면서 적용하는 패치이기 때문에

굳이 설명하지 않은 것들이기도 합니다.

 

저는 여러분이 스피드스텝을 속시원하게 해결하시길 바라는 마음에

그간의 6편도 더 넘는 연재?? 아닌 연재를 해왔었는데, ㅎㅎㅎㅎ 이렇게 마무리되니 좋기도 하고 아쉽기도 합니다.

 

요모조모, 이렇게나 긴 글 읽어주셔서 감사드리며

마지막으로 이 글을 작성하게된 직접적인 이유를 제공해주신

@Ative9Lite님께 감사의 말씀 올립니다.

[ @XEXEXE, @IanMinChangShin, @아이뱅크, @Mactopia 님들께도 감사의 말씀 올립니다]

 

/* 해당 글은 Rev에 따라 내용이 추가작성됨을 알립니다. */

 

- 끝 -

★ 이 글이 도움이 되셨다면 커피한잔(후원)을 사주세요.(클릭) ★ 글쓴이가 후원 정보를 입력하지 않았습니다.





이 사이트의 기능을 모두 활용하기 위해서는 자바스크립트를 활성화 시킬 필요가 있습니다.
브라우저에서 자바스크립트를 활성화하는 방법을 참고 하세요.
No 제목 조회 닉네임 등록일
공지
팁 게시판 다운로드 권한 : 꾸준회원 등업 필요 492 mactopia 06.01
694 증상별팁| 잠자기가 안될때 이방법도 있더군요! 4 552 홍대퀸카 04.12
693 소트프웨어| PS4 게임을 맥에서 :-) 3 592 mactopia 04.10
692 그래픽| r9 290설치후기입니다 3 396 상상공장장 04.07
691 소트프웨어| [성공] 3개의 저장장치를 이용하여 깔끔한 퓨전드라이브 + 윈도우 듀얼부팅 성공 3 520 IanMinchangShin 04.07
690 공통팁| 각종 kext 쉽게 잡는 팁 1 889 TaeYoungLee 04.06
689 그래픽| Skylake Intel HD 530 Integrated Graphics Working as of 10.11.4 4 901 mactopia 04.05
688 그래픽| 라데온 R9 390 실패후기... 3 282 sou**** 04.04
687 공통팁| 노트북, 데스크탑 설치 후기 3 561 somehowk 03.31
686 공통팁| Clover Configurator 로 잠자기 하는방법! 3 714 홍대퀸카 03.31
685 공통팁| 커스텀맥 깔끔하게 설치 성공! 23 1263 Grapevine 03.29
684 공통팁| 베플| 설치하면서, Clover Configurator 설정 27 4796 KsJ 03.28
683 공통팁| [2016년 맥북 라인업] MackBook Air, MacBook, MacBook Pro Retina 살펴보기 6 652 KsJ 03.27
682 공통팁| [하스웰] 초보자들을 위한 개념 이해하기 부터 커스텀맥 설치하기 까지 [3부] 53 13302 comed78 03.27
681 공통팁| [2편] 만약 New Macbook 2세대가 나온다면? 3 177 KsJ 03.27
680 공통팁| [1편] 만약 New Macbook Air가 나온다면? 7 161 KsJ 03.27
679 공통팁| [하스웰] 초보자들을 위한 개념 이해하기 부터 커스텀맥 설치하기 까지 [2부] 59 15553 comed78 03.27
678 증상별팁| 잠자기가 안될때! 한가지방법! 2 604 홍대퀸카 03.27
677 소트프웨어| Clover Graphics 해결 예 4 721 아이뱅크 03.27
676 공통팁| [하스웰] 초보자들을 위한 개념 이해하기 부터 커스텀맥 설치하기 까지 [1부] 60 14317 comed78 03.26
675 공통팁| 간략한 클로버 사용 후기 12 545 KsJ 03.25
674 공통팁| 커맥설치가 win7설치보다 쉬웠어요! 마우스 클릭만으로 앨캐피탄 설치!(win7 환경에서) 5 1277 홍대퀸카 03.25
673 소트프웨어| OS 아이메세지에서 live photo 보는 법 5 238 mactopia 03.24
672 공통팁| 1개의 SSD [HDD]에 윈도우 8~10 과 OS X 듀얼구성하기 6 1761 KsJ 03.23
671 그래픽| AMD R9 390X 설치하기 (엘캐피탄) 30 2080 봄날 03.22
670 소트프웨어| 로그인항목 초기화 문제 해결 4 343 Soluzers 03.22
669 증상별팁| 잠자기가 잘안될때 해결방법2 6 533 홍대퀸카 03.22
668 소트프웨어| 커스텀맥 10.11.4 업데이트 성공 23 696 IanMinchangShin 03.22
667 그래픽| S/L/E에 수정한 AppleGraphicsDevicePolicy.kext 넣지않고 부팅시 블랙스크린(모니터 절전모드)에서 해방되... 14 911 comed78 03.21
666 CPU| 잠자기가 안될때 간단한 해결방법! 5 765 홍대퀸카 03.21
665 공통팁| 일부 DSDT Error, Warning, Remarks 오류 수정 방법 (1) 19 758 IanMinchangShin 03.20
664 공통팁| 타 컴의 타임머신 백업을 이용해서 커맥 세팅하기. 6 333 각시수련 03.19
663 공통팁| 모든 글을 정리하며.... [최종 후기] 20 894 KsJ 03.15
662 공통팁| 베플| [끝판왕] 오즈모시스 167x를 사용하여 커스텀맥 구성하기 Rev. 2016.03.14 66 2136 KsJ 03.14
661 사운드| 잠자기 후 사운드 문제, 와이파이 느려짐 이슈에 대한 해결책 7 1008 IanMinchangShin 03.13
660 공통팁| Apple Mac SMC keys와 FakeSMC 8 1215 아이뱅크 03.12
» HOT| [끝판왕] 당신의 CPU에 휴식시간을 부여하라! [Rev 16.03.08] 106 7967 KsJ 03.07
658 CPU| [CPU] SpeedStep의 진실과 SSDT, 그리고 잠자기에 관하여 [번외편 - 하] 16 1447 KsJ 03.07
657 공통팁| [설명서] 커맥(커스텀맥) 입문자가 한번쯤 읽어보면 좋을 자료 입니다. 11 2231 임한혁 03.07
656 공통팁| 입문자 커스텀맥설치가이드 5 2278 아이뱅크 03.06
655 사운드| 베플| 잠자기 후 사운드 잡기 [ CodecCommander.kext ] [ALC 1150 테스트 해봄] 4 784 JuSungHwang 03.06
서버에 요청 중입니다. 잠시만 기다려 주십시오...