За прошедшую с момента «чудесного исцеления» неделю мой MacBook Pro 6.2 ударялся в панику по поводу графики раза 3 или 4. Реже, чем прежде за день, но все равно непорядок. Для дальнейших разборок есть еще 2 способа, один софтовый и компромиссный, второй железный, потому страшный, но простой в описании, потому с него и начну.

C9560-capacitor

Берем 330uF 2.0v non-tantalum poly-film capacitor, выпаиваем глючный танталовый С9560, припаиваем новый — boom, done! На самом деле я в этом очень мало понимаю и еще меньше реально могу сделать, но для профессионала задача вполне посильная. Не исключено, что я пойду этим путем, по крайней мере до стадии консультаций.


Другой способ проще реализовать самостоятельно, но сложнее описать и еще сложнее объяснить конкретные цифры, нужно просто немного веры.

Коротко — берем /System/Library/Extensions/AppleGraphicsPowerManagement.kext, правим находящийся в нем info.plist и проблема устраняется, предположительно.

По шагам это выглядит так

  1. Нужно отключить SIP, System Integrity Protection, иначе система не даст использовать покуроченный kekxt. Для этого нужно перезагрузиться в Rescue mode (удержвайте cmd-r при загрузке), запустить Терминал из меню Утилиты и выполнить команду csrutil disable. После перезагрузить компьютер в обычном режиме.
    На этом этапе я пока срубился, поскольку наткнулся на другой известный глюк — у меня в режиме восстановления в меню нет утилит и терминала, только одинокий language chooser. Пробовал все, кроме загрузки с USB, у меня нет флешки с системой.
  2. Скопировать AppleGraphicsPowerManagement.kext куда-нибудь и отредактировать info.plist, конкретно часть под MacBookPro6,2, начинающуюся с Vendor10deDevice0a29. Сойдет любой текстовый редактор, если нет специального или xcode. Значения см. ниже, людям помогло, вроде.
  3. Заменить системный kext отредактированным, используя Kext Drop или вручную, я не буду это расписывать, поскольку сделать мне это не удалось — работающий SIP не дает удалить kext.
  4. Проверить и включить галку автоматическое переключение графики в разделе «экономия энергии» в системных настройках. Перезагрузиться. Upd: На всякий случай перезагрузитесь со сбросом PRAM — клавиши Command, Option, P и R при загрузке.

Все респекты и жалобы адресовать синьору fabioroberto здесь, это его идея. Там же можно найти готовые пропатченные кексты для разных версий macOS. Идея в том, чтобы отключить самый «мощный» режим графики, поскольку похоже, что именно он вызывает проблемы. Очевидно, манипуляции приводят к снижению производительности видео.

Значения для info.plist

<key>MacBookPro6,2</key>
<dict>
<key>LogControl</key>
<integer>1</integer>
<key>Vendor10deDevice0a29</key>
<dict>
<key>BoostPState</key>
<array>
<integer>2</integer>
<integer>2</integer>
<integer>2</integer>
<integer>2</integer>
</array>
<key>BoostTime</key>
<array>
<integer>2</integer>
<integer>2</integer>
<integer>2</integer>
<integer>2</integer>
</array>
<key>Heuristic</key>
<dict>
<key>ID</key>
<integer>0</integer>
<key>IdleInterval</key>
<integer>10</integer>
<key>SensorOption</key>
<integer>1</integer>
<key>SensorSampleRate</key>
<integer>10000</integer>
<key>TargetCount</key>
<integer>1</integer>
<key>Threshold_High</key>
<array>
<integer>0</integer>
<integer>0</integer>
<integer>100</integer>
<integer>200</integer>
</array>
<key>Threshold_High_v</key>
<array>
<integer>0</integer>
<integer>0</integer>
<integer>98</integer>
<integer>200</integer>
</array>
<key>Threshold_Low</key>
<array>
<integer>0</integer>
<integer>0</integer>
<integer>0</integer>
<integer>200</integer>
</array>
<key>Threshold_Low_v</key>
<array>
<integer>0</integer>
<integer>0</integer>
<integer>4</integer>
<integer>200</integer>
</array>
</dict>
<key>control-id</key>
<integer>17</integer>
</dict>

Я не уверен, что буду пробовать этот способ. Не настолько напрягает нынешняя периодичность глюков, лень делать загрузочную флешку, плюс я все-таки склоняюсь к более радикальному решению с конденсатором.

UPDATE: Проблему с отключением SIP решил, kext подправил и заменил, полет нормальный.