Непосредственные и скрытые эффекты изменения моего собственного двоичного файла ядра во время выполнения? - PullRequest
0 голосов
/ 12 февраля 2019

Я скорее специалист по веб-разработке и работе с базами данных, но крайне неудобные проблемы с производительностью, связанные с kernel_task и температурой на моем персональном компьютере, вызвали у меня интерес к деталям моей Mac OS (я замечаю некоторые процессывызовет длительные всплески в задаче ядра, несмотря на постоянно низкую температуру процессора и вновь перезаписанный компьютер).

Я являюсь пользователем root на своей собственной машине OSX.Я могу читать /System/Library/Kernels/kernel.Насколько я понимаю, это " Mach / XNU " Ядро этой машины (хотя я не знаю много о них, но я удивлен, что это всего 13Mb).

Что произойдет, если я изменю или удалю /System/Library/Kernels/kernel?

Я полагаю, поскольку это во время выполнения, все может быть хорошо, пока я не попытаюсь перезагрузить . Если это так, может ли тщательная модификация этого файла изменить поведение моей ОС, действует только при перезагрузке , предполагая, что это не вызывает панику ядра?(паника ядра - только вещь linux?)

1 Ответ

0 голосов
/ 12 февраля 2019

Что произойдет, если я изменю или удалю /System/Library/Kernels/kernel?

Во-первых, вам нужно отключить SIP (защита целостности системы), чтобы иметь возможность изменять или редактироватьэтот файл, так как он защищен даже от пользователя root по умолчанию из соображений безопасности.

Если вы удалите его, ваша система больше не будет загружаться.Если вы замените его другим ядром xnu, это ядро ​​теоретически будет загружаться в следующий раз, при условии, что оно достаточно соответствует как установленным драйверам устройств и другим kexts, так и пользовательскому пространству ОС.

Обратите внимание, что вы этого не сделаетенеобходимо удалить / заменить файл ядра, чтобы загрузить другой, вы можете установить более одного одновременно.Для получения дополнительной информации см. Документацию, прилагаемую к комплектам Apple Kernel Debug Kits (KDK), которые можно загрузить из Зоны загрузок Apple Developer .

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

Да, ядро ​​загружается в память загрузчиком в самом начале процесса загрузки;после этого файл не используется, за исключением создания предварительно связанных ядер при изменении драйверов вашего устройства.

Наконец, я чувствую, что должен немного рассказать о том, что вы на самом деле пытаетесь диагностировать / исправить:

, но крайне неудобные проблемы с производительностью, связанные с kernel_task и температурой на моем персональном компьютере, вызвали у меня интерес к деталям моей Mac OS

kernel_task выполняет больше кодачем просто ядро ​​kernel.В частности, любые загружаемые кексы (см. Команду kextstat) - а их много в современной системе MacOS - загружаются в пространство ядра, что означает, что они подсчитываются как kernel_task.

Long-производительные скачки использования ЦП ядра звучат так, как будто они могут быть вызваны самообслуживанием файловой системы или активностью шифрования / дешифрования тома.Они почти наверняка не являются основными ошибками программирования в самом ядре xnu.(Хотя я полагаю, что глупые ошибки легко сделать.)

Еще один возможный виновник - это драйверы устройств;особенно драйверы графических процессоров - это невероятно сложные части программного обеспечения, и, конечно, они заняты, даже если ваша система, по-видимому, бездействует.

Первый шаг к решению этой проблемы - если она действительно существует, - это выяснить, чтоядро фактически делает с этими циклами процессора.Так что для этого вы бы хотели выполнить профилирование и / или трассировку.Выполнение этого на работающем ядре, скорее всего, снова требует отключения SIP.Instruments.app, который поставляется с Xcode, может профилировать процессы;Я не уверен, что все еще возможно профилировать kernel_task с этим, я думаю, что по крайней мере раньше было возможно в более ранних версиях.Другой возможный вариант - DTrace.(на эту тему написаны целые книги)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...