VmWare (sia Player che Workstation) praticamente funziona emulando in software i vari dispositivi HW di un PC (VM o macchina virtuale); per sommi capi, il sistema operativo che si installa in una VM (Guest) "pensa" di interagire con una scheda video, audio ecc ecc, mentre in realtà interagisce con il software di emulazione, il quale a sua volta si preoccupa di tradurre e trasmettere al SO (Host) e al PC reali ciò che il Guest richiede.
Quando il SO Guest è Linux, per quanto riguarda l'emulazione video, il driver software utilizzato (vmwlegacy_drv.so) emula una scheda video SVGA (VMware SVGA II Adapter rev 0) ed è poco più che un framebuffer connesso con la scheda video realmente esistente: per questa ragione il software VmWare non può sfruttare adeguatamente le capacità di quella per velocizzare la visualizzazione del SO Guest o per permettere a quest'ultimo di sfruttare adeguatamente cose tipo il Direct Rendering, l'OpenGL o operazioni grafiche 2D/3D che utilizzino l'accelerazione fornita dalle moderne schede video (tutto o quasi dev'essere emulato, caricando la CPU...).
Tuttavia, con l'introduzione nelle librerie Mesa del framework Gallium3D per la costruzione di driver video, la situazione ha cominciato a cambiare: da novembre 2009 è incluso nei sorgenti di Mesa un nuovo driver basato su quell'architettura (vmwgfx) il quale dovrebbe supportare il KMS e l'accesso alla GPU "reale" da parte del SO Guest, in modo da poter provvedere l'accelerazione HW con OpenGL e con qualunque cosa per cui esista in Mesa uno state-tracker corrispondente (X11, OpenCL, X-Video, XvMC...).
Questa guida vuole spiegare come fare per installare e provare il nuovo driver video.
PACCHETTI NECESSARI
Perchè tutto funzioni è necessario aver installato nel SO Guest della VM:
* un kernel >= 2.6.35, compilato con l'opzione "CONFIG_DRM_VMWGFX=m" (tutti i kernel MIB ce l'hanno);
* una versione delle libdrm (o lib64drm, per i SO a 64 bit) >= 2.4.20 e compilata con l'opzione "--enable-vmwgfx-experimental-api" (le libdrm >= 2.4.26 del MIB ce l'hanno già);
* una versione di Mesa >= 7.8 e compilata almeno con le opzioni "--with-state-trackers="dri,glx,xorg"" e "--enable-gallium-svga" (tutte le versioni di Mesa >= 7.10.3 del MIB sono già preparate così);
* possibilmente, una versione di Mesa compilata anche con l'opzione "--enable-gallium-llvm", in modo da permettere a tutti i driver gallium (e quindi anche al vmwgfx) di sfruttare la presenza del compilatore LLVM per compilare al volo (JIT in gergo) i programmi per gli shaders della scheda video host, velocizzando quindi le cose (una delle versioni di Mesa >= 7.10.3 prodotte dal MIB ha abilitato questa opzione);
* il pacchetto contenente il driver xorg corrispondente (x11-driver-video-vmwgfx, che viene automaticamente prodotto nel processo di building delle librerie Mesa con le opzioni indicate sopra);
* un server X >= 1.7.7 (quello di default presente in Mandriva 2010.1/2 va bene).
Per una Mandriva a 64 bit, in http://mib.pianetalinux.org/MIB/2010.2/64/testing/ si trovano tutti i rpm necessari (esclusi ovviamente quelli del kernel e del server X); la versione di Mesa 7.10.3 con l'uso di LLVM abilitato si trova attualmente in http://mib.pianetalinux.org/MIB/2010.2/ ... vmgallium/ (ovviamente la sua installazione richiede l'installazione di LLVM, che si trova nei repo normali). Se invece il SO è a 32 bit, basta sostituire "32" a "64" nelle precedenti URL.
INSTALLAZIONE E USO
Quando parte una VM con Linux come SO Guest, il server grafico è già configurato in modo da cercare di caricare in memoria innanzi tutto il driver vmwgfx e, se non lo trova, in modo da passare automaticamente al vmwlegacy (e nel file di log del Xserver si trovano sempre queste due righe di errore):
Code: Select all
(EE) Failed to load module "vmwgfx" (module does not exist, 0)
(EE) vmware: Please ignore the above warnings about not being able to to load module/driver vmwgfx
1) installare il driver sperimentale
Tutto il necessario si trova nei seguenti rpm del MIB:
- libdri-drivers-experimental-7.10.1-69.1mib2010.2 (o lib64dri-drivers-experimental-7.10.1-69.1mib2010.2, se il SO è a 64 bit);
- x11-driver-video-vmwgfx-7.10.1-69.1mib2010.2.
Quindi bisogna prima di tutto scaricarli in una directory a scelta (p.es.: Download nella dir home dell'utente in uso al momento); sempre nel caso di un SO a 64 bit:
Code: Select all
cd Download
wget http://mib.pianetalinux.org/MIB/2010.2/64/testing/mesa/mesa-7.10.1/lib64dri-drivers-experimental-7.10.1-69.1mib2010.2.x86_64.rpm
wget http://mib.pianetalinux.org/MIB/2010.2/64/testing/mesa/mesa-7.10.1/x11-driver-video-vmwgfx-7.10.1-69.1mib2010.2.x86_64.rpm
Code: Select all
rpm -Uvh *.rpm
Ciò è necessario per abilitare le caratteristiche sperimentali di vmwgfx e per permettere di attivare in maniera indipendente l'accelerazione HW per il 2D e per il 3D.
Se in /etc/X11 non è già presente un file chiamato xorg.conf, è necessario crearne uno contenente le seguenti righe, altrimenti basta modificare quello esistente (ovviamente dopo averne salvata una copia) come segue:
Code: Select all
Section "Device"
Identifier "device1"
VendorName "VMware"
BoardName "VMware virtual video card"
Driver "vmwgfx"
Option "DPMS"
Option "2DAccel" "True"
Option "3DAccel" "True"
Option "SWCursor" "False"
Option "DebugFallback" "False"
EndSection
Il driver vmwgfx supporta anche il KMS, se il kernel e le libdrm sono abbastanza recenti (un kernel > 2.6.37 e le libdrm sopra indicate certamente lo sono); per abilitarlo, basta inserire nel file /etc/modprobe.preload (da root, ovviamente...) la riga:
Code: Select all
vmwgfx
Al riavvio del Pc, il nuovo driver dovrebbe caricarsi automaticamente; è possibile controllare che ciò sia avvenuto con il seguente comando:
Code: Select all
dmesg | grep vmwgfx
Code: Select all
[drm] Initialized vmwgfx 1.4.0 20100927 for 0000:00:0f.0 on minor 0
Avviando poi il server grafico (se il SO Guest non parte direttamente in modalità grafica), con un po' di fortuna si dovrebbe notare qualche differenza: accelerazione 2D parzialmente o interamente funzionante, effetti 3D più o meno "a posto"...
Si può verificare che il driver sia correttamente caricato: il comando
Code: Select all
glxinfo |grep OpenGL
Code: Select all
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on SVGA3D; build: RELEASE;
OpenGL version string: 2.1 Mesa 7.10.1
Una volta finito il test, se i risultati non soddisfano, è possibile riportare tutto allo stato iniziale semplicemente:
* ripristinando la copia di xorg.conf che si era salvata in precedenza;
* e rimuovendo il pacchetto x11-driver-video-vmwgfx-7.10.1-69.1mib2010.2.
Buona fortuna e buon divertimento.
GvM