vykon VM emulatoru - was: Re: VMware & Virtual PC

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Pondělí Listopad 10 10:52:07 CET 2003


On Fri, 7 Nov 2003, Jaroslav Lukesh wrote:

> Moje zkusenosti s vmware mi napriklad rikaji, ze vykon virtualniho
> stroje je asi tak 10% a mozna i mene vykonu stroje fyzickeho. Tady tvrdi,
> ze vmeare ma vykon 80% hostitelskeho CPU a v nekterych pripadech dokonce
> temer 100%. To bych spis tipoval pro wine a nikoli vmware, nebot vmware
> musi kontrolovat kazdou instrukci jestli nahodou neni I/O, kontrolovat
> rozsahy adres a to zabere nejaky ten cas.

Existuji zhruba 3 zakladni pristupy, jak emulaci (nebo nekdy
spis simulaci) provadet:

1. Softwarove interpretovat kazdou jednotlivou instrukci. To ma tu vyhodu,
   ze lze napodobit prakticky libovolnou vychytavku emulovane platformy
   (vcetne kesi apod.) a to nezavisle na platforme, kde emulace bezi
   (ta muze byt naprosto odlisna od emulovane). Nevyhodou je znacna
   pomalost.

2. Dynamicky prekladat strojovy kod emulovane platformy do strojoveho
   kodu emulujici platformy. Vyhodou je, ze to pak bezi velmi rychle a lze
   to principialne pouzit, i kdyz jsou ty platformy odlisne. Nekdy z toho
   lze vymacknout jeste vic, kdyz se prelozeny kod jeste optimalizuje. 
   Nevyhodou je rezie prekladu, ktera muze byt navic dost
   nedeterministicka.

3. Spustit emulovany kod ve vhodnem umelem prostredi primo na CPU a
   problematicke instrukce odchytit a vyresit softwarove. To je takove
   nejprimocarejsi reseni, ktere je casto nejrychlejsi, ale muze byt
   problem s vytvorenim toho prostredi (jak nacpat 4 GB emulovaneho
   adresoveho prostoru do realnych 4 GB, aby se tam vesel jeste
   emulator se svymi pracovnimi daty apod.) a pak samotnym odchycenim
   problematickych instrukci (napr. na i386 je par instrukci, ktere
   normalne odchytit nelze, ale z principu davaji odlisne vysledky
   na "cistem" CPU a pri emulaci), take muze mit odchytavani instrukci
   v urcitych situacich takovou rezii, ze to v konecnem dusledku bude
   pomalejsi nez predchozi pristupy.

Co se tyce skutecneho softwaru, tak prvni pristup je reprezentovan Bochsem
(nebo aspon tim, co se jmenovalo Bochs pred par lety), druhy pouziva treba
valgrind nebo svym zpusobem ten javovy HotSpot, o kterem tady byla rec, a
treti DOSemu nebo Wine (Wine emuluje virtualni stroj, ktery lze symbolicky
popsat jako i386 - privilegovane instrukce + Win* API; ostatne v pripade
DOSemu je take emulovan virtualni stroj, tentokrat i386 - nektere
privilegovane instrukce + DPMI (je-li povoleno)).

Co se tyce VMware, tak pokud vim, tak ten pouziva predevsim treti metodu,
ale nekdy se musi uchylit i k prvni nebo druhe. A ted samozrejme zalezi na
tom, jaky kod na tom konkretne bezi. Smycka provadejici samotne "normalni"
instrukce by mela bezet vicemene v "nativni" rychlosti CPU. Pokud ale
nekdo zacne provadet nejake I/O nebo zurive hybat se strankovacimi
tabulkami, pak rychlost pada dolu.


--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux