Что снова не так с PC: гибридные процессоры Apple в свете критериев Quality of Service

Сравнение процессоров различных ар­хи­тек­тур не­воз­мож­но вы­пол­нить при про­чих рав­ных ус­ло­ви­ях, так как в по­ле зре­ния по­па­да­ет не толь­ко ап­па­рат­ная ре­а­ли­за­ция чи­пов, но и про­г­рам­мная ин­фра­ст­рук­ту­ра, не­ред­ко об­ре­ме­нен­ная биз­нес-фак­то­ра­ми и сло­жив­ши­ми­ся, да­ле­ко не всег­да по­зи­тив­ны­ми тра­ди­ци­я­ми на­пи­са­ния ко­да. Да и не нуж­но та­кое срав­не­ние по­тре­би­те­лю, име­ю­ще­му де­ло с ре­аль­ны­ми, а не аб­ст­рак­т­ны­ми плат­фор­мами.

Анализируя результаты своеобразного баттла между процессорами M1 Mac и Intel Xeon W, по­ка­зав­ше­го пре­и­му­ще­с­т­ва гиб­рид­ных про­цес­со­ров в свете критериев QoS (Quality of Service), отметим еще один фактор про­из­во­ди­тель­но­с­ти, характерный для платформ Apple M1 — механизм, позволяющий разработчику приложения яв­ным об­ра­зом де­кла­ри­ро­вать ха­рак­тер на­груз­ки и же­ла­е­мый уровень приоритета выполнения.

QoS средствами Intel RDT

Вспомним об одном из консервативных подходов к обеспечению QoS, реализованному задолго до по­яв­ле­ния гиб­рид­ных про­цес­со­ров Apple. Речь идет о подсистеме Resource Director Technology (RDT), разработанной ком­па­ни­ей Intel. Она готова предоставить аппаратную поддержку управления приоритетами процессов в мно­го­за­дач­ной среде и вхо­дит в состав всех современных CPU.

Resource Director Technology состоит из двух составляющих:

  1. Подсистема Intel RDT Monitoring ответственна за мониторинг ис­поль­зо­ва­ния при­ло­же­ни­я­ми сис­тем­ных ре­сур­сов (с по­лу­че­ни­ем численных метрик, доступных операционной системе).
  2. Подсистема Intel RDT Allocation — своеобразный ис­пол­ни­тель­ный механизм, по­зво­ля­ю­щий ОС нор­­ми­­ро­­вать вы­де­ле­ние ресурсов, ап­па­рат­но ог­ра­ни­чи­вая аппетиты конкурирующих задач.

В текущих реализациях RDT одним из главных управляемых ресурсов является кэш-память третьего уровня. Воз­мож­но­с­ти под­сис­те­мы де­кла­ри­ру­ют­ся функциями CPUID с номерами 0Fh и 10h, поддержка которых ти­пич­на для со­вре­мен­ных про­цес­со­ров Intel и AMD, что позволяет считать данную фун­к­ци­о­наль­ность уни­фи­ци­ро­ван­ной. Вместе с тем, адап­тив­ная модель управления, основанная на метриках, предоставляемых под­сис­те­мой Performance Monitoring, не­из­беж­но об­ла­да­ет ла­тент­но­стью, ведь система сначала должна на­брать ста­тис­ти­ку доступа процесса X к ресурсу Y и толь­ко затем принять решение о коррекции схемы при­о­ри­те­тов.

Uncore Performance Monitoring

Подсистема Uncore Performance Monitoring, ар­хи­тек­ту­ра которой недавно была де­таль­но до­ку­мен­ти­ро­ва­на, по­зво­ля­ет по­лу­чать про­г­рам­мно-до­ступ­ные метрики для потоков данных на шинах ввода-вывода, в том чис­ле, кон­т­ро­ли­ро­вать об­мен ин­фор­ма­ци­ей между периферийными устройствами, происходящий без участия CPU (так на­зы­ва­е­мый, peer-to-peer traffic). Однако про унификацию данной подсистемы даже для нескольких моделей CPU одного вендора, а также о ее применении вне серверного сегмента, пока говорить рано. Ее, в пер­вую очередь, мож­но клас­си­фи­ци­ро­вать как инструмент, используемый в составе среды разработки при­ло­же­ний, а не механизм оптимизации выполнения их runtime-кода.

Декларирование нагрузки

Альтернативный вариант реализации QoS, основанный компанией Apple на яв­ном де­кла­ри­ро­ва­нии при­ло­же­ни­ем характера наг­руз­ки и же­ла­е­мо­го уровня приоритета, позволяет ОС выработать оптимальную стратегию выделения ре­сур­сов не­по­сред­ст­вен­но при старте приложения. Согласно цитате из материала, ссылка на который при­ве­де­на в начале статьи:

Apple provides four QoS levels, and a fifth which leaves it up to macOS to decide. When writing the code, the developer uses names for the levels of QoS, ranging from background (lowest) to userInteractive (highest).

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

Подход, реализованный разработчиками macOS, позволяет оптимизировать выбор энергоэффективного или производительного типа ядер для запуска приложения или его компонентов

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

Что в очередной раз не так с PC?

Разумеется, механизмы управления приоритетами выполняемых потоков есть и в мире PC-платформ. От про­стей­шей функ­ции до бо­лее сложных API, описание которых заслуживает отдельного материала. Но не­смот­ря на это, го­тов­ность су­щест­ву­ю­щей прог­рам­мной ин­фра­ст­рук­ту­ры к появлению гибридных x86/x64 про­цес­со­ров вызывает вопросы. Что­бы понять в чем проблема, давайте рассмотрим следующий пример.

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

Сложившиеся традиции проектирования кода для x86/x64 основаны на допущении, что все ло­ги­че­ские про­цес­со­ры плат­фор­мы поддерживают одинаковый набор функциональных расширений. Поэтому, выполнив CPUID в глав­ном по­то­ке и убе­див­шись в наличии AVX512, приложение вправе запустить несколько па­рал­лель­но ра­бо­та­ю­щих по­то­ков, ис­поль­зу­ю­щих это фун­к­ци­о­наль­ное рас­ши­ре­ние на нескольких логических про­цес­со­рах без до­пол­ни­тель­ных про­ве­рок каж­до­го из них. Поскольку в нашем примере часть ядер не под­дер­жи­ва­ет AVX512, потоки, которым «не по­вез­ло», вы­зо­вут ис­клю­че­ние и завершатся ава­рий­но.

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

Найти изящное решение, позволяющее совместить преимущества гибридной архитектуры и полноту набора фун­к­ци­о­наль­ных рас­ши­ре­ний x86, без ре­ди­зай­на программных интерфейсов достаточно сложно.

Резюме

Возможно, затруднения, связанные с внедрением гибридных процессорных архитектур принесут не­ко­то­рое так­ти­че­ское пре­и­му­ще­с­т­во Apple, сосредоточившей разработку аппаратного обеспечения и операционной сис­те­мы в соб­ст­вен­ных ру­ках и прак­ти­ку­ю­щей иные подходы, как в организационном так и в техническом пла­не. Поддержка гибридных процессорных архитектур, призванных обеспечить оптимальный баланс про­из­во­ди­тель­но­с­ти и энер­го­эф­фек­тив­но­с­ти требует пересмотра модели кооперации разработчиков про­цес­со­ра, операционной системы и приложений.

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

Послесловие

Результат, полученный приложением грамотно оп­ти­ми­зи­ро­ван­ным для процессоров M1 Mac, интересен с ис­сле­до­ва­тель­ской точки зрения, но не может рас­сма­т­ри­вать­ся как абсолютный показатель соотношения сил про­тес­ти­ро­ван­ных чипов.

Tags