kernel_task грузит проц на 100% на MacOS BigSur

При запуске любых длительных и «тяжелых» задач в Мониторинге системы можно увидеть неопознанный процесс kernel_task, который нагружает систему также как и сама задача. Мириться с этим не хочется, так как задача из-за этого быстрее не выполнится.

Будем разбираться и снижать нагрузку.

Почему это происходит?

Как пишет сама Apple, процесс kernel_task нужен для торможения запущенных программ с высокой интенсивностью. Но реалии таковы, что на BigSur процесс kernel_task нагружает процессор больше, чем «высокоинтенсивная» программа.

Просто так отключить на MacOS версии 11.3 и выше не получится. Нужно доставать бубен.

На последних MacOS присутствует система SSV, которая помогает предотвратить модификацию и удаление ПО от Apple. Она для этого использует моментальные снимки файловой системы APFS. Это клево, если во время обновления что-то пойдет не так, то произойдет автоматический откат на старую версию.

Фактически MacOS Big Sur больше не загружается с системного тома, а загружается из моментального снимка (копия системного тома). Системный том монтируется только для чтения. Если его смонтировать с правами записи, то любая модификация или удаление файлов будет оставаться только до перезагрузки. После повторного включения, система восстановит все изменения из снимка.

Решение есть — сделать новый снимок.

План действий:

  1. отключаем защиту SIP;
  2. монтируем системный том;
  3. удаляем IOPlatformPluginFamily.kext;
  4. создаем новый снимок;
  5. Включаем загрузку с него.

После всех манипуляций, загрузка ОС будет дольше обычной на 2 минуты.

Удаляем kernel_task на MacOS BigSur

Отключаем защиту SIP

Если у Вас оригинальный компьютер Mac, то необходимо загрузить его в режиме восстановления с помощью CMD+R при старте компьютера.

Если у Вас компьютер не Mac, но операционная система MacOS, то в меню запуска Clover или OpenCore нужно выбрать Recovery Mode.

В обоих случаях Вы загрузитесь в режиме восстановления. Открываем Утилиты -> Терминал и исполняем команды:

csrutil disable
reboot

После этого заходим снова в режим восстановления. Выполняем команды:

csrutil authenticated-root disable
reboot

Монтируем системный том для записи

Смотрим название системного раздела:

sudo diskutil list
...
/dev/disk3 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +255.9 GB   disk3
                                 Physical Store disk0s2
   1:                APFS Volume MySSD — данные          47.6 GB    disk3s1
   2:                APFS Volume Preboot                 293.4 MB   disk3s2
   3:                APFS Volume Recovery                613.7 MB   disk3s3
   4:                APFS Volume VM                      1.1 MB     disk3s4
   5:                APFS Volume MySSD                   15.0 GB    disk3s5
   6:              APFS Snapshot SnapshotName            15.0 GB    disk3s5s1
...

В нашем примере это диск номер 3 и раздел номер 5 (помечен полужирным) – disk3s5. Также запоминаем его название – MySSD.

Монтируем раздел:

sudo diskutil mount disk1s5
Volume MySSD on disk3s5 mounted

Добавляем права на изменение:

sudo mount -uw /Volumes/MySSD\ 1

Где \ 1 – важная дописка. Она нужна так как с таким именем уже есть символьная ссылка, а мы монтируем настоящий и MacOS добавляет в название символ «1». Слеш – показывает, что используется пробел.

Удаляем IOPlatformPluginFamily.kext

Удалять мы его полностью не будем, а для резерва перенесем в корень системного раздела.

Переносим файл IOPlatformPluginFamily.kext:

sudo mv /Volumes/MySSD\ 1/System/Library/Extensions/IOPlatformPluginFamily.kext /Volumes/MySSD\ 1/

Создаем новый снимок и делаем его «по умолчанию»

Создаем снимок:

sudo /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs_systemsnapshot -s "SnapshotName" -v /Volumes/MySSD\ 1

Ставим на него метку «по умолчанию»:

sudo /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs_systemsnapshot -r "SnapshotName" -v /Volumes/MySSD\ 1

Не забываем сделать перезагрузку:

reboot

После всего этого процесс останется в загруженных, но уже не будет нагружать систему как раньше.

Скачать оригинальный файл IOPlatformPluginFamily.kext

Если что-то пошло не так и Вы удалили IOPlatformPluginFamily.kext, то вот оригинальный kext от MacOS BigSur — IOPlatformPluginFamily.kext.zip

Теги:

Комментарии

Алексей, 18.07.2021 09:49 #

Спасибо за способ — он помог и Big Sur при загрузке проверяет созданный по данному гайду Snapshot системы без данного «кекста». Мне только интересно — можно ли включить защиту системы обратно? При попытке вернуть значения защиты во включенный режим система не стартует и переводит на экран ошибки загрузки.

Лев, 01.08.2021 23:04 #

Автор, на этапе Добавления прав на изменение терминал отвечает unknown special file or filesystem /Volumes/Macintosh. (почему то приписку HD не добавляет, хотя я писал)
Как быть? Спасибо

AdminWay, 02.08.2021 22:10 #

Не совсем понял, что такое HD у Вас? Раздел должен монтироваться с цифрой 1.

Лев, 03.08.2021 01:29 #

Спасибо за ответ! Macintosh HD – так называется мой SSD (по вашей аналогии с MySSD)
Я пишу так: sudo mount -uw /Volumes/Macintosh HD\ 1
И выдаёт unknown special file…

AdminWay, 16.08.2021 22:31 #

Тогда Вам нужно писать: sudo mount -uw /Volumes/Macintosh\ HD\ 1

Косая черта показывает символ пробела.






Важное событие
Основание Yandex<
Основание Yandex
Узнать подробнее
Комментарии
Интересное
Оглавление
  1. Почему это происходит?
  2. Удаляем kernel_task на MacOS BigSur
    1. Отключаем защиту SIP
    2. Монтируем системный том для записи
    3. Удаляем IOPlatformPluginFamily.kext
    4. Создаем новый снимок и делаем его «по умолчанию»
  3. Скачать оригинальный файл IOPlatformPluginFamily.kext