Šta je novo?

Intel vs AMD pristup virtualizaciji

Ace Rimmer

Čuven
VIP član
Učlanjen(a)
31.12.2005
Poruke
2,872
Poena
690
Slučajno sam na blogu Avi Kivity-a (glavni KVM developer) naletio na članak o tome kako su Intel i AMD pristupili hardverski podržanoj virtualizaciji na x86_64 platformi. Uglavnom, priča se o mogućnosti "nested virtualizacije" koristeći vmx/svm ekstenzije, znači da KVM guest sâm bude hypervizor te da ima pristup vmx/svm ekstenzijama na virtualiziranom CPU.

Nested svm virtualization for kvm - AMD

Nested vmx support coming to kvm - Intel

Zaključak koji se nazire je, da je AMDov pristup nešto jednostavniji (bolje rečeno elegantniji), bar što se tiče developera koji se bave fičerom "nested virtualizacije".
 
Poslednja izmena:
Ja sam mislio da i vrapci vec znaju da je virtualizacija na intelu prilicno nategnuta (zato su c2 xeoni i radili toliko slabije od opterona).
 
Mislim da se oba članka odnose na novije arhitekture, odnosno K10 i Intelovu "i" seriju procesora. Vjerovatno za prvu razinu virtualizacije i nema nekih problema, no ovo je nešto kao "rekurzivna"(ugnježdena) virtualizacija i tu iskače nešto više probema s Intelove strane. Zanimljivo je da neko na tome radi (bit će uključeno u kôd - linux kernel), što znači da ili postoji naručitelj kome to treba, ili to rade (RedHat) zbog propuhivanja vlastite tehnologije (debug hypervizora ... kako je navedeno).


BTW, malo informacija s istog bloga o tome koliko je x86 arhitektura (ne)povoljna za virtualizaciju, izraženo u broju linija kôda:
http://avikivity.blogspot.com/2008/05/comparing-code-size.html
 
Poslednja izmena:
interesantni tekstovi.

kina je stala iz projekta: Linux Unified Kernel

a o virtuelizaciji i arhitekturi procesora ima jos jedan dobar blog (malo predugacak 😀) ali definitivno informativan i interesantan (btw već sam kačio link): link

EDIT:
mada ovo poslednje me buni "izraženo u broju linija kôda":
x86 - 17442 dok je
PPC - 2229

linije koda u čemu? Asembleru? razumem da x86 sadrži specifičnosti AMDa i intela ali opet razlika od 8 puta ??
plus, zar kod za x86 ne bi trebao da bude "kraći" jer je CISC dok je PPC RISC ?
 
Poslednja izmena:
linije koda u čemu? Asembleru? razumem da x86 sadrži specifičnosti AMDa i intela ali opet razlika od 8 puta ??
plus, zar kod za x86 ne bi trebao da bude "kraći" jer je CISC dok je PPC RISC ?

pretpostavljam da se misli na broj linija kôda (C ??) vezano za kvm modul(e) u Linux kernelu, ovisno o arhitekturi. Ovaj PPC je neka embeded varijanta.

BTW, IBM razvija "nested virtualizaciju" preko vmx ekstenzija (Intel), promaklo mi u tekstu.
 
Poslednja izmena:
PPC je, ako se ne varam, i bolji/laksi za virtualizaciju od x86.
 
Jedno laicko pitanje - sta konkretno znaci laksi/bolji za virtuelizaciju?
 
Pa skup instrukcija je takav da pravi manje glavobolje...
Recimo onaj primer sa x86 popf instrukcijom -ako je na ringu 0 (kernel mod) upisuje se interrupt flag, u user modu ne... E sada kad teras OS u user modu unutar VMa on ocekuje da je interrupt flag izmenjen. Eto problema koji nije morao da postoji da se na vreme razmisljalo...
 
Što se tiče arhitetkure Power-a, ako se ne varam, to vuče korijene od IBM mainframe-a (koji su bili dizajnirani za virtualizaciju još tamo 70-tih), pa vjerovatno postoji neka infrastruktura.

Koliko sam shvatio iz na brzinu pregledanih IBM RedBook-ova, Power5 i 6 platforma koristi paravirtualizaciju gdje se hypervisor vrti u firmware-u (flash memoriji). Kod paravirtualizacije guest OS (AIX, Linux) mora biti svjestan da se virtualizira (modificirani kernel), te "surađuje" s hypervizorom. Rezultat su bolje performanse i veća sigurnost, s time da je kompletan hardver na stroju prilagođen za tu svrhu.
http://www.datatrendtech.org/trendsetter/Issue_09_Articles/ExploitingVirtualizationoneServer p5.pdf
http://www.circle4.com/jaqui/eserver/aixtra-Nov04-UnderstandingVirtualization.pdf
http://www.redbooks.ibm.com/abstracts/sg247940.html


Inače, koga zanima, problematika x86 virtualizacije je odlično opisana u uvodnim poglavljima knjige "The definitive guide to the Xen hypervisor".

Par izvadaka:
As seems to be common in recent years, both AMD and Intel have added incompatible extensions to the x86 ISA in order to provide roughly equivalent functionality: Intel’s Virtualization Technology for x86 (VT-x ) and AMD’s Secure Virtual Machine (SVM). Both provide a higher privilege mode than ring 0, in which a hypervisor can sit without having to evict the kernel from ring 0. This separation is particularly important on x86-64, because it means that the kernel does not have to run at the same privilege level as the applications, and so no tricks are required to allow it to poke around in their address spaces. The biggest difference between Intel’s VT-x and AMD’s SVM comes as an artifact of the way the first chips supporting each are designed. With the Opteron series, AMD moved the memory controller on-die, whereas Intel kept theirs in a discrete part. Because of the close integration between the CPU and memory controller, AMD was able to add some more advanced modes for handling memory.

With VT-x, you simply set a flag that causes page table modifications to be trapped. SVM provides two hardware-assisted modes: shadow page tables and nested page tables.

Now, both Intel and AMD have added a set of instructions that makes virtualization considerably easier for x86. AMD introduced AMD-V,formerly known as Pacifica, whereas Intel’s extensions are known simply as (Intel) Virtualization Technology (IVT or VT). The idea behind these is to extend the x86 ISA to make up for the shortcomings in the existing instruction set. Conceptually, they can be thought of as adding a “ring -1” above ring 0, allowing the OS to stay where it expects to be and catching attempts to access the hardware directly. In implementation, more than one ring is added, but the important thing is that there is an extra privilege mode where a hypervisor can trap and emulate operations that would previously have silently failed.

IVT adds a new mode to the processor, called VMX. A hypervisor can run in VMX mode and be invisible to the operating system, running in ring 0. When the CPU is in VMX mode, it looks normal from the perspective of an unmodified OS. All instructions do what they would be expected to, from the perspective of the guest, and there are no unexpected failures as long as the hypervisor correctly performs the emulation. A set of extra instructions is added that can be used by a process in VMX root mode. These instructions do things like allocating a memory page on which to store a full copy of the CPU state, start, and stop a VM. Finally, a set of bitmaps is defined indicating whether a particular interrupt, instruction, or exception should be passed to the virtual machine’s OS running in ring 0 or by the hypervisor running in VMX root mode.

In addition to the features of Intel’s VT4, AMD’s Pacifica provides a few extra things linked to the x86-64 extensions and to the Opteron architecture. Current Opterons have an on-die memory controller. Because of the tight integrationbetween the memory controller and the CPU, it is possible for the hypervisor to delegate some of the partitioning to the memory controller.

Using AMD-V, there are two ways in which the hypervisor can handle memory partitioning. In fact, two modes are provided. The first, Shadow Page Tables, allows the hypervisor to trap whenever the guest OS attempts to modify its page tables and change the mapping itself. This is done, in simple terms, by marking the page tables as read only, and catching the resulting fault to the hypervisor, instead of the guest operating system kernel. The second mode is a little more complicated. Nested Page Tables allow a lot of this to be done in hardware.

Nested page tables do exactly what their name implies; they add another layer of indirection to virtual memory. The MMU already handles virtual to physical translations as defined by the OS. Now, these “physical” addresses are translated to real physical addresses using another set of page tables defined by the hypervisor. Because the translation is done in hardware, it is almost as fast as normal virtual memory lookups.
The other additional feature of Pacifica is that it specifies a Device Exclusion Vector interface. This masks the addresses that a device is allowed to write to, so a device can only write to a specific guest’s address space.
 
Poslednja izmena:
Jedno laicko pitanje - sta konkretno znaci laksi/bolji za virtuelizaciju?

ja imam jos laickije pitanje. trazio sam na netu skoro, doduse nisam se puno trudio, ali nisam nasao odgovor. elem, kolko meni uopste znaci cpu koji ima hw podrsku za viruelizaciju tj kolko ce on da mi ubrza rad na vm (posto ce mi to trebati uskoro)?
 
To je u stvari dobro pitanje. Svi misle da ako procesor ima hw podrsku za virtuelizaciju da to automatski znaci da ce nesto biti mnogo brze. U stvari i mene to zanima.
 
jedino sto sam nasao vezano za to (mozda sam to cak i ovde na forumu video) je da ako cpu nema hw virtuelizaciju, ne mozes na host operativnom sistemu koji je 32bitan da instaliras 64bitan.

edit:
ali opet, to nije odgovor na pitanje koje me zanima 🙂
 
Poslednja izmena:
Ograničenje se odnosi na 64-bitne guestove, njih nije moguće imati bez hardverski podržane virtualizacije.

Što se tiče brzine, ona ovisi i o drugim stvarima osim same tehnike virtualizacije. Npr. badava ti hardverski podržana virtualizacija, ako guesta vrtiš u image fajlu i ako mu je emulirana mrežna Realtek 8139 - IO performanse neće biti nimalo bajne 🙂.
Da bi se izvukao maksimum iz onog što se danas nudi trebalo imati zadnju generaciju x86 procesora (K10, ili Nehalem - unapređenja na polju upravljanja memorijom), koristiti rješenje koje iskorištava mogućnosti takvog hardvera (gotovo svi), staviti guesta na dedicated particiju ili logical volume (raw device - da se izbjegne file system hosta), te koristiti paravirtualizirane drivere za IO (mreža, disk kontroler - pružaju bolje performanse od emuliranih uređaja).

Iskopao sam štiva na temu:

Anandtech: "Hardware Virtualization: the Nuts and Bolts"
http://it.anandtech.com/IT/showdoc.aspx?i=3263

Nekoliko dobrih prezentacija na temu:
http://www.seas.upenn.edu/~cis399ux/lectures/virt.pdf
http://csc.web.cern.ch/CSC/2009/Thi.../P_Buncic_CSC2009_Virtualization-1.1_Vpdf.pdf

VMWare whitepaper koji opisuje tehnike virtualizacije na x86 platformi:
http://www.vmware.com/files/pdf/VMware_paravirtualization.pdf

Intel vs AMD vs Power na polju hardverski podržane virtualizacije:
http://www.docstoc.com/docs/1098316...Support-In-INTEL-AMD-And-IBM-Power-Processors
 
Poslednja izmena:
u uputstvu za VirtualBox se kaze da je cak softwerska virtualizacija/emulacija brza od hardwerske (VT-x / AMD-V) isto mislim da kaze i Darek Mihocha.

sa druge strane, hardwerska je mnogo sigurnija (bar bi trebala 😀).

dalje, sa hardwerskom ne mozes da pokrenes dva VM programa: probaj na Mac OS X da startujes VirtualBox sa VT-x/AMD-V i startuj npr. VMware - sve ce opizditi u nekom trenutku 😀 (mada ne vidim zasto bi pokretao dva razzlicita VM programa ali ajde...)

EDIT: sad sam otvorio VirtualBox uputstvo, ovo poslednje 🙂

"You can select for each virtual machine individually whether VirtualBox should use
software or hardware virtualization. Prior to version 2.2, software virtualization was
the default; starting with version 2.2, VirtualBox will enable hardware virtualization
by default.

The reason for changing the default with version 2.2 is that the hardware has sig-
nificantly improved with the latest Intel and AMD processors, and VirtualBox has also
fine-tuned its hardware virtualization support to a degree that it is now faster than
software virtualization in many situations. "


inace na sva ta pitanja imate odgovore sta, kako i zasto u onih 6,5MB teksta na www.emulators.com 😀
 
Poslednja izmena:
dalje, sa hardwerskom ne mozes da pokrenes dva VM programa: probaj na Mac OS X da startujes VirtualBox sa VT-x/AMD-V i startuj npr. VMware - sve ce opizditi u nekom trenutku 😀 (mada ne vidim zasto bi pokretao dva razzlicita VM programa ali ajde...)

Da, nešto u smislu da CPU nije sposoban prepoznati da više različitih virtual machine managera koriste vmx/svm, pa tu dolazi do velikih problema.
 
Da, nešto u smislu da CPU nije sposoban prepoznati da više različitih virtual machine managera koriste vmx/svm, pa tu dolazi do velikih problema.

mozda ce pre biti problem sto svaki VM software podrazumeva da je sam 🙂 nego da CPU ne moze da prepozna vise VM programa 😉
 
Nazad
Vrh Dno