| Предыдущий | Следующий |
| KERN_POLICY_LIMIT | KERN_INVALID_OBJECT |
KERN_INVALID_POLICY
Политика недоступна в этом контексте
KERN_INVALID_POLICY — это результат планировщика Mach, а не указание на повреждённый указатель на данные политики. Объявление в kern_return.h описывает политику планирования, которая сейчас не включена для контекста набора процессоров. В современном коде XNU тот же результат также используется, когда потоку запрещено переходить в запрошенный режим реального времени или отключены наборы привязки.
Поэтому разновидность политики является важнейшей диагностической информацией. Запрос, допустимый в одной системе, для одного класса потоков или контекста рабочей нагрузки, может оказаться недоступным в другом без каких-либо изменений структуры.
Два конкретных контекста политики
THREAD_TIME_CONSTRAINT_POLICYзапрашивает параметры планирования реального времени. Современная XNU отклоняет такой запрос сKERN_INVALID_POLICY, если поток входит в рабочий интервал с идентификатором нагрузки, который не разрешает работу в реальном времени.THREAD_AFFINITY_POLICYпомечена в заголовке XNU как экспериментальная. Она задаёт отношение привязки между потоками; совпадающие метки являются лишь подсказкой планировщику по возможности использовать общий кэш L2. Это не запрос на закрепление потока за определённым процессором, и при отключённых наборах привязки XNU возвращаетKERN_INVALID_POLICY.
Отделяйте недоступность от неверных входных данных
| Результат | На что он указывает |
|---|---|
KERN_INVALID_POLICY | Политику нельзя применить в текущем контексте планирования целевого объекта. |
KERN_POLICY_LIMIT | Запрошенные атрибуты превышают ограничение, хотя сама политика применима. |
KERN_INVALID_ARGUMENT | Нарушен контракт вызова: например, недопустимы целевой объект, разновидность, количество или значение поля. |
KERN_NOT_SUPPORTED | Выбранная возможность не поддерживается текущей платформой или реализацией. |
Полезные данные для исследования
- Запишите разновидность политики и всю её структуру, а не только числовое возвращаемое значение.
- Определите, является ли целью вызывающий или другой поток, а также присоединился ли он к рабочему интервалу и имеет ли уже действующую политику QoS.
- Для привязки уточните ожидаемый результат. Метки кэш-привязки задают рекомендательные отношения, а не переносимый механизм закрепления за процессором.
- Перед повторным запросом режима реального времени проверьте временную модель. Данные политики задают период, время вычисления и ограничение в единицах абсолютного времени, причём ограничение не должно быть меньше времени вычисления.
Ссылки
- Apple XNU: kern_return.h
- Apple XNU: thread_policy.h
- Apple XNU: thread_policy.c
- Руководство Apple по программированию ядра: планирование Mach и интерфейсы потоков
Нужно найти другой код? Найти другой код состояния или ошибки.