Как найти, работает ли моя ОС в виртуализованной или не виртуализированной среде?

У меня есть доступ к машине, на которой я могу ssh. Как определить, работает ли моя ОС в полностью виртуализированной среде (где VMM выполняет двоичный перевод), паравиртуализованной или невиртуализированной среде? У меня есть некоторое представление о том, как это сделать (некоторые операции, такие как доступ к странице памяти/диску, занимают больше времени в виртуализованной среде), но не знают, как это сделать.

1 ответ

Это зависит от VMM, над которым вы работаете. Если это Xen или Microsoft VM, я считаю, что CPUID с EAX значение 0x40000000 даст вам ненулевое значение в EAX. Не уверен, что это работает на VMWare, VirtualBox или KVM. Я ожидаю, что он тоже будет работать...

Измерение времени доступа вряд ли ВСЕГДА покажет вам правду, поскольку в системе, отличной от VM, они могут сильно варьироваться, и нет никакой реальной причины, что вы увидите огромную разницу в эффективной реализации. И, конечно же, вы не знаете, работает ли ваша виртуальная машина с контроллером жесткого диска REAL, проходящим через PCI, или если ваши подключенные к NFS диски подключены через сетевую карту REAL, переданную VM, или если они доступ через виртуальную сетевую карту.

Хороший VMM не должен показывать вам большую разницу, пока приложение себя ведет.

licensed under cc by-sa 3.0 with attribution.