Почему RDTSC является виртуализированной инструкцией на современных процессорах? - PullRequest
5 голосов
/ 12 октября 2011

Я изучаю RDTSC и узнаю, как он виртуализируется для целей виртуальных машин, таких как VirtualBox и VMWare.Почему Intel / AMD взялись за все проблемы виртуализации этой инструкции?

Я чувствую, что ее можно легко смоделировать ловушкой, и это не совсем обычная инструкция (я тестировал, и заметных медленныхдля общего использования в виртуальной машине, где аппаратная виртуализация RDTSC отключена).

Однако я знаю, что Intel / AMD не приложили бы все усилия, чтобы добавить эту инструкцию к оборудованию для виртуализации, если бы она не была важнойчтобы выполнить очень быстро.

Кто-нибудь знает почему?

Ответы [ 2 ]

7 голосов
/ 12 октября 2011

Обычно используется RDTSC для получения детальной информации о синхронизации, где издержки на ловушку виртуализации могут быть весьма значительными.Чаще всего используют две команды RDTSC с небольшим количеством кода между ними, принимая разницу времени как истекшее время (количество циклов) для кодовой последовательности.Таким образом, даже затраты на слив / сброс трубопровода весьма значительны.

Кроме того, поскольку вся инструкция выполняет чтение постоянно работающего счетчика, его виртуализация довольно проста - аппаратному обеспечению нужно только разрешить сохранение / перезагрузкузначение счетчика на переключателях контекста VM, а не что-то особенное для самой инструкции RDTSC.

2 голосов
/ 13 октября 2011

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

Кроме того, поскольку виртуальные машины не владеют базовыми физическими ЦП полностью, то есть они незапускаться на них все время, их TSC также должны как-то отражать периоды «вкл / выкл», и желательно, чтобы они не менялись резко в значении по сравнению с реальным временем, которое виртуальные машины должны по-прежнему получать прямо от хост-ОСпотому что есть много программного обеспечения, которое не готово к виртуализации и может сломаться, когда цифры слишком отключены.

Я думаю, что это причины, по которым RDTSC виртуализирован.Но что бы вы ни делали, выполнить противоречивые требования сложно, и они усложняют ситуацию.Вы не можете скрыть виртуализацию и одновременно запускать виртуальные машины на почти родной скорости.Есть компромиссы, и некоторые вещи должны уступить.

...