Ho accesso a una macchina su cui posso ssh. Come determinare se il mio sistema operativo è in esecuzione completamente virtualizzato (dove VMM esegue la traduzione binaria), ambiente paravirtualizzato o non virtualizzato? Ho qualche idea su come procedere (alcune operazioni come l'accesso a una pagina di memoria/disco richiederanno più tempo in un ambiente virtualizzato) ma non so come procedere.Come scoprire se il mio sistema operativo è in esecuzione su un ambiente virtualizzato o non virtualizzato?
risposta
Dipende dal VMM su cui si sta eseguendo. Se si tratta di Xen o Microsoft VM, credo che CPUID
con valore EAX
di 0x40000000 fornirà un valore diverso da zero in EAX
. Non sono sicuro che funzioni su VMWare, VirtualBox o KVM. Prevedo che funzionerà anche lì ...
Misurare i tempi di accesso è improbabile che SEMPRE mostri la verità, poiché in un sistema non VM questi possono variare parecchio, e non c'è alcun VERO motivo per cui vedresti un'enorme differenza in un'implementazione efficiente. E, naturalmente, non si sa se la VM è in esecuzione con un controller del disco rigido REAL passato attraverso il PCI, o se i dischi montati su NFS sono collegati tramite una scheda di rete REAL passata alla VM, o se sono accesso tramite una scheda di rete virtuale.
Un buon VMM non dovrebbe mostrare molta differenza fintanto che l'applicazione si comporta da sola.
Come si può sapere se stiamo vivendo all'interno di un universo reale o di una simulazione computerizzata? Se sta andando bene, è importante? :-) –
Un ambiente virtualizzato perfetto (o abbastanza buono) non dovrebbe essere dectable in questo modo ... –
perché puoi chiedere al fornitore di hosting. prova free -m, a volte vedrai l'intera ram del sistema. Sono felice con la mia scatola di VM. ha mostrato tutta la memoria dell'hardware 148GB – user2134226