За прошедшую с момента «чудесного исцеления» неделю мой MacBook Pro 6.2 ударялся в панику по поводу графики раза 3 или 4. Реже, чем прежде за день, но все равно непорядок. Для дальнейших разборок есть еще 2 способа, один софтовый и компромиссный, второй железный, потому страшный, но простой в описании, потому с него и начну.
Берем 330uF 2.0v non-tantalum poly-film capacitor, выпаиваем глючный танталовый С9560, припаиваем новый — boom, done! На самом деле я в этом очень мало понимаю и еще меньше реально могу сделать, но для профессионала задача вполне посильная. Не исключено, что я пойду этим путем, по крайней мере до стадии консультаций.
Другой способ проще реализовать самостоятельно, но сложнее описать и еще сложнее объяснить конкретные цифры, нужно просто немного веры.
Коротко — берем /System/Library/Extensions/AppleGraphicsPowerManagement.kext, правим находящийся в нем info.plist и проблема устраняется, предположительно.
По шагам это выглядит так
- Нужно отключить SIP, System Integrity Protection, иначе система не даст использовать покуроченный kekxt. Для этого нужно перезагрузиться в Rescue mode (удержвайте cmd-r при загрузке), запустить Терминал из меню Утилиты и выполнить команду csrutil disable. После перезагрузить компьютер в обычном режиме.
На этом этапе я пока срубился, поскольку наткнулся на другой известный глюк — у меня в режиме восстановления в меню нет утилит и терминала, только одинокий language chooser. Пробовал все, кроме загрузки с USB, у меня нет флешки с системой. - Скопировать AppleGraphicsPowerManagement.kext куда-нибудь и отредактировать info.plist, конкретно часть под MacBookPro6,2, начинающуюся с Vendor10deDevice0a29. Сойдет любой текстовый редактор, если нет специального или xcode. Значения см. ниже, людям помогло, вроде.
- Заменить системный kext отредактированным, используя Kext Drop или вручную, я не буду это расписывать, поскольку сделать мне это не удалось — работающий SIP не дает удалить kext.
- Проверить и включить галку автоматическое переключение графики в разделе «экономия энергии» в системных настройках. Перезагрузиться. 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 подправил и заменил, полет нормальный.