Производительность или безопасность: на что влияет UEFI-опция Instruction Based Sampling в настройках AMD CBS?

В настройках BIOS всегда были опции, ко­то­рые ста­ви­ли в ту­пик да­же са­мых опыт­ных поль­зо­ва­те­лей. С по­яв­ле­ни­ем UEFI си­ту­а­ция не из­ме­ни­лась. Пунк­ты ме­ню, от­вет­ст­вен­ные за уп­рав­ле­ние ап­па­рат­ны­ми ме­ха­низ­ма­ми CPU, на­пол­ни­лись ра­нее не­из­вест­ны­ми па­ра­мет­ра­ми. Это осо­бен­но за­мет­но в раз­де­ле Com­mon BIOS Spe­ci­­fi­­ca­­tions, где вы­пол­ня­ют­ся ус­та­нов­ки для про­цес­со­ров AMD. Од­на из них — Enable IBS — раз­ре­ша­ет ис­поль­зо­ва­ние счет­чи­ка In­struc­tion Based Sam­p­l­ing (вы­бор­ки на ос­но­ве ин­ст­рук­ций). В чем суть этой оп­ции? Нуж­на ли она гей­ме­ру или прос­то ком­пью­тер­но­му эн­ту­зи­ас­ту?

В составе AMD Common BIOS Specification есть опция Enable IBS для управления параметром Instruction Base Sampling

 

Скриншот настроек CMOS Setup сис­тем­ной платы ASUS по­ка­зы­ва­ет, что вклю­че­ние счет­чи­ков вы­бор­ки на ос­но­ве ин­ст­рук­ций приводит к блокировке механизма Stack Engine, впервые появившегося в архитектуре AMD K8, и тех­но­ло­гии SpecLockMap, упо­мя­ну­той, кстати, в патенте «Method of Debugging a Processor» №US 2020/0134248 A1 от 30 апреля 2020 года.

Механизм IBS впервые был представлен в AMD K10 Barcelona, в его задачи входит сбор статистики о ко­ман­дах, вы­пол­ня­е­мых про­цес­со­ром. Выборка на основе инструкции призвана оп­ти­ми­зи­ровать работу про­г­рам­мно­го обес­пе­че­ния, оце­ни­вая за­груз­ку про­цес­со­ра. Другими словами, In­struc­tion Based Sampl­ing при­зван по­мочь сис­тем­но­му про­г­рам­мис­ту со­здать эф­фек­тив­ный профиль утилизации ресурсов про­цес­со­ра, TLB, кэш-памяти, DRAM в условиях муль­ти­по­точ­но­с­ти.

К истории счетчика выборки на основе инструкций

Впервые комплексное решение для мониторинга производительности процессоров было разработано для DEC Alpha 21264. Механизм, названный ProfileMe, периодически отслеживал процессорные инструкции пе­ред их де­ко­ди­ро­ва­ни­ем. Под­держ­ка вы­бор­ки ProfileMe включалась в инфраструктуру динамического не­пре­рыв­но­го про­фи­ли­ро­ва­ния DEC, известную как DCPI.

Впервые счетчик выборки на основе инструкции для мониторинга производительности процессоров был разработан для DEC Alpha 21264

 

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

Реализация и особенности

В текущей реализации конвейер про­цес­со­ра AMD Family 10h разделен на две не­за­ви­си­мые фазы: на на­чаль­ной фа­зе из по­сле­до­ва­тель­но­с­ти байтов, составляющих команду, извлекаются инструкции AMD64; на внут­рен­ней фазе вы­пол­ня­ют­ся «операции», де­ко­ди­ро­ван­ные из инструкций. Операция — это внутренняя ин­ст­рук­ция фик­си­ро­ван­ной дли­ны, их в ин­ст­рук­ции может быть несколько. По этой причине процессоры AMD под­дер­жи­ва­ют два типа IBS-вы­бо­рок. Пер­вая из них про­ис­хо­дит при выборке команд (включая TLB и опе­ра­ции с кэш-памятью инструкций), вторая — осу­щест­вля­ет­ся при их выполнении. Для любой выборки мож­но за­ре­гис­т­ри­ро­вать ее адрес, независимо от того способа ее за­вер­ше­ния или условиях ис­поль­зо­ва­ния TLB, кэш-па­мя­ти и размера стра­ни­цы пре­об­ра­зо­ва­ния адреса.

За использование механизма In­struc­tion Based Sampl­ing отвечает мо­де­ле­за­ви­си­мый ре­гистр рас­ши­ре­ния воз­мож­но­с­тей цен­т­раль­но­го про­цес­со­ра MSR C001_0005h — Extended CPUID Features (ExtFeatures). Его 42-й бит со­от­вет­ст­ву­ет ста­ту­су IBS и так и называется. Функции его компаньона в документации «BIOS and Kernel Developer’s Guide for AMD Family 15h Models 30h-3Fh Processors» не описаны. Таковым является опе­ра­ци­он­ный мо­де­ле­за­ви­си­мый регистр MSR C001_1020h — Load-Store Configuration (LS_CFG).

Риски, связанные с использованием IBS

В июле 2019 года группа ис­сле­до­ва­те­лей вы­яс­ни­ла, что счетчики выборки IBS на основе AMD-инструкций мо­гут со­з­дать ус­ло­вия для успешной атаки даже на виртуальные машины, защищенные шифрованием SEV-ES. Ког­да эта за­щи­та вклю­че­на, состояние регистров в бло­ке уп­рав­ле­ния вир­ту­аль­ной ма­ши­ной становится не­до­ступ­ым хосту. SEV-ES не толь­ко шиф­ру­ет, но и защищает целостность VMCB, тем са­мым пред­от­вра­щая ата­ки на виртуальную машину. Но­вая струк­ту­ра, называемая управляющим блоком го­сте­во­го ги­пер­ви­зо­ра (GHCB), вы­пол­ня­ет роль посредника меж­ду гос­тем и ги­пер­ви­зо­ром. Гость диктует, по­сред­ст­вом политики, ка­кая ин­фор­ма­ция передается в GHCB. Кро­ме то­го, с точ­ки зре­ния ди­зай­на VMEXIT клас­си­фи­ци­ру­ют­ся как ав­то­ма­ти­че­ские (AE) или не­ав­то­ма­ти­че­ские (NAE). Со­бы­тия AE не тре­бу­ют вы­став­ле­ния какого-либо со­сто­я­ния от гос­тя и осу­щест­вля­ют не­мед­лен­ную передачу управления ги­пер­ви­зо­ру. Измерения про­из­во­ди­тель­но­с­ти вы­пол­ня­ют­ся автоматически.

Исследователи из университетов США показали, как мож­но ис­поль­зо­вать данные, предоставляемые вы­бор­кой на ос­но­ве ин­ст­рук­ций (IBS), чтобы иден­ти­фи­ци­ро­вать приложения, работающие в вир­ту­аль­ной ма­ши­не. Ана­ли­зи­руя про­цес­сы ветвления или операции доступа к опе­ра­тив­ной памяти можно со­брать дан­ные о про­из­во­ди­тель­но­с­ти вир­ту­аль­ной машины и сопоставить на­блю­да­е­мое поведение с из­вест­ны­ми сиг­на­ту­ра­ми за­пу­щен­ных приложений.

Резюме

Производительность платформы с про­цес­со­ром AMD только выиграет, если пользователь запретит ис­поль­зо­ва­ние вы­бор­ки на основе инструкции в установках UEFI BIOS. Системному программисту не со­с­та­вит труда вклю­чить IBS (In­struc­tion Based Sampl­ing) в сеансе опе­ра­ци­он­ной системы, если таковое тре­бу­ет­ся для вы­пол­не­ния отладочных работ.

Геймеру или энтузиасту вряд ли придется заботиться о без­о­пас­но­с­ти вир­ту­аль­ных машин. Это еще одна при­чи­на, по ко­то­рой стоит отказаться от опции Enable IBS, доступной в CMOS Setup раз­де­ла Com­mon BIOS Spe­ci­­fi­­ca­­tions.

Tags