Я не вижу причин, по которым пребывание внутри гостя было бы особенным.что происходит, когда поступает внешнее прерывание.( Предполагается, что речь идет о гостевом коде, работающем изначально в конвейере, а не о том, что эмуляция корня и / или решение отложить повторный вход в гостевую систему в ожидании другого прерывания . См. Комментарии.)
Они не собираются эффективно блокировать прерывания для нескольких команд;это повредило бы задержку прерывания.Поскольку нет специальных «точек синхронизации», куда прерывания могут доставляться только туда, конвейер должен уметь обрабатывать прерывания между произвольными инструкциями.Exec-of-exec exec всегда потенциально имеет много общего, поэтому вы не можете рассчитывать на ожидание какого-либо определенного состояния перед обработкой прерывания;это может занять слишком много времени.Если промежуток между одной парой инструкций является нормальным для доставки прерывания, то почему нет других?
Процессоры не переименовывают уровень привилегий, так что да, они откатятся в состояние выхода на пенсию, откажутся от всех в-полеты инструкции в серверной части, а затем выяснить, что делать на основе текущего состояния.См. Также Когда происходит прерывание, что происходит с инструкциями в конвейере?
Это абсолютно непроверенное предположение основано на моем понимании архитектуры ЦП.Если бы измеримое влияние было на задержку прерывания, это могло бы быть реальным.
На практике, независимо от VT-X, некоторые границы команд, вероятно, будет невозможно прервать, если только-stepping.
Пропускная способность выхода на пенсию составляет 3 на такт (Nehalem), 4 на такт на логический поток (Haswell) или даже выше в Skylake.Выход из ядра, вышедшего из строя, обычно прерывистый, потому что это происходит по порядку (для поддержки точных исключений), поэтому у нас есть ROB отдельно от станции резервирования.
Это очень распространено для одногоинструкция, чтобы заблокировать отставку более поздних независимых инструкций на некоторое время, а затем для всплеска выхода на пенсию вместе с этой инструкцией.например, загрузка из-за отсутствия кэша или конец длинной цепочки депонирования перед некоторыми независимыми инструкциями.
Так что для некоторых функций или блоков кода, вероятно, что каждый раз, когда они запускаются, xor
-Например, инструкция обнуления всегда удаляется в том же цикле, что и предыдущая инструкция.Это означает, что ЦП никогда не находится в состоянии, когда инструкция обнуления xor является самой старой неиспользованной инструкцией, и, таким образом, разрыв между ним и insn ранее никогда не может быть тем местом, где появляется прерывание.
Если выесли две команды тесно следуют друг за другом, например, одна идет в цикле после того, как процессор возвращается в пользовательское пространство из более ранней инструкции, вы можете получить внешние эффекты на границах 64-байтового I-кэша, нарушающие привычный дешевый шаблоннезависимые инструкции, такие как nop
или xor
, обнуляющиеся всегда, удаляясь в том же цикле, что и более ранняя инструкция с более высокой задержкой, но все еще могут быть случаи, которые были бесперебойными, когда выборка и декодирование по ширине 5 и проблема 4 по ширине/ rename будет надежно получать инструкции в канал вместе без возможности иметь медленный финиш перед быстрым после того, как он будет готов удалиться.
Как я уже сказал, это не относится к VT-x.