Состояния потоков XNU имеют цветовую маркировку в Xcode/Instruments
-
13-12-2019 - |
Вопрос
Я провожу некоторый анализ многопоточного приложения с помощью инструментов Apple Instruments, которые дают много информации, которую я пытаюсь понять.Я пытаюсь найти хороший ресурс для описания состояний потока, которые в инструменте обозначены цветом.Я просматривал документацию и книги по XNU Kernel, но без особого успеха.
Много желтого и фиолетового цвета, которые соответствуют режимам «Вытеснение» и «Супервизор» (полная таблица цветов описана в правом верхнем всплывающем окне на прикрепленном изображении).Учитывая, что я провожу так много времени в этих состояниях, а не в «работающем» состоянии (отмечено синим), мне было бы особенно интересно узнать, о чем они говорят и возможно ли/желательно минимизировать время, проведенное в этих состояниях. .
Решение
Вытеснен = ваш поток был работоспособен и был готов, хотел и мог выполниться, но был исключен (контекст переключился) в пользу другого потока.Это означает, что ваш поток не спал при вводе-выводе или событии, а фактически делал что-то, нагружающее процессор.Однако либо из-за истечения такта, либо из-за какого-либо другого потока с более высоким приоритетом он был вытеснен из ЦП.
Супервизор = Ваш поток находился в режиме ядра.Обычно это означает, что ядро обслуживало системный вызов, сделанный вашим потоком.
Ни один из них не является строго плохим, но:
Как избежать упреждения:Здесь вы мало что можете сделать, кроме игры со своим приоритетом — увеличьте свой приоритет, используя отрицательное значение nice или, напрямую, используя API setpriority.Вы также можете использовать политики планирования, чтобы повысить предпочтения вашего потока, и уговорить планировщика Маха (основного лица, принимающего решения о потоках) поставить ваши потоки на первое место и дать им больше процессорного времени.
Отказ от режима супервизора:Возможно, вы перегружены системными вызовами.Опять же, это не обязательно плохо.
Надеюсь это поможет,
ТГ