Ein Ziel der transparenten Paravirtualisierung ist die Ausführung einer einzelnen binären Version des Betriebssystems entweder auf nativer Hardware oder auf einem Hypervisor im Paravirtualisierungsmodus. Dies bedeutet, dass die Unterstützung für Paravirtualisierungsschnittstellen in den Kern kompiliert wird und immer dann vorhanden ist, wenn der Kern auf nativer Hardware ausgeführt wird.
Die folgenden Performance-Daten wurden gesammelt, um die Performance-Auswirkungen der transparenten Paravirtualisierung bei Ausführung auf nativer Hardware zu ermitteln.
Über eine breite Palette von Makro-Benchmarks hinweg zeigen unsere Ergebnisse, dass dieser Performance-Überhang vernachlässigt werden kann.
Test-Einrichtung
Hardware: AMD Dual Core Opteron 270 (vier Kerne), 2,0 GHz, L2 1 MB, 64 KB L1, 5 GB RAM (nicht-PAE-Kern, nur 4 GB genutzt)
Kern:
- Basis: Ubuntu 2.6.20-5.7-generisch
- CONFIG_PARAVIRT nicht definiert, CONFIG_VMI nicht definiert
- Paravirtualisierung: 2.6.20-rc6-ubuntu
- CONFIG_PARAVIRT=y, CONFIG_VMI=y
Makro-Benchmarks
Bewertung in Sekunden, geringere Werte sind besser. Werte in Klammern stehen für den Durchsatz, höhere Werte sind besser, das Durchsatzverhältnis wird umgekehrt.
Workload |
Baseline |
Paravirt |
Baseline/Paravirt |
SpecJBB2005 1.04 |
730.62 |
730.98 |
0.99 |
reAIM |
55.52 |
55.80 |
0.995 |
kernel compile |
380.45 |
391.425 |
0.972 |
kernel compile |
391.60 |
377.83 |
1.036 |
kernel compile |
204.075 |
204.555 |
0.997 |
kernel compile |
201.425 |
201.63 |
0.999 |
Ogg Encoding* |
212.68 |
213.12 |
0.998 |
* wave file of track length 48m 24s at 256kbps bitrate, 5 iterations, 1st iteration discarded.
+ fsever workload has been customized to run on tmpfs instead of regular fs.
CPU-Mikro-Benchmarks
Kernparameter: maxcpus=1
SPECPU 2006 verwendet gcc 4.1.2. Werte stehen für ermittelte Laufzeitschätzungen in Sekunden, geringere Werte sind besser. Werte in Klammern stehen für das geschätzte Basisverhältnis. Größere Verhältnisse sind besser. Der Test wurde ohne die erforderliche Kennungsdatei durchgeführt (inkompatibler Lauf).
Workload |
Baseline |
Paravirt |
Baseline/Paravirt |
perlbench |
948 (10.3) |
949 (10.3) |
0.998 |
bzip2 |
1550 (6.22) |
1560 (6.2) |
0.993 |
gcc |
913 (8.82) |
913 (8.82) |
1.000 |
mcf |
1020 (8.91) |
1030 (8.90) |
0.990 |
gobmk |
991 (10.6) |
992 (10.6) |
0.999 |
hmmer |
1670 (5.58) |
1670 (5.58) |
1.000 |
sjeng |
1320 (9.17) |
1320 (9.19) |
1.000 |
libquantum |
2200 (9.41) |
2200 (9.41) |
1.000 |
h264ref |
1980 (11.2) |
1980 (11.2) |
1.000 |
omnetpp |
859 (7.28) |
860 (7.27) |
0.998 |
astar |
1140 (6.18) |
1140 (6.18) |
1.000 |
xalancbmk |
1100 (6.26) |
1100 (6.26) |
1.000 |
Kern-Mikro-Benchmarks
Kernparameter: maxcpus=1
Bewertung in Sekunden, geringere Werte sind besser.
Workload |
Baseline |
Paravirt |
Baseline/Paravirt |
divzero |
2.75 |
3.16 |
0.87 |
getppid |
0.93 |
0.94 |
0.98 |
segv |
3.26 |
3.33 |
0.97 |
Lat_pipe |
6.43 |
7.02 |
0.91 |
nforkwait |
3.08 |
3.30 |
0.93 |
Switch |
3.52 |
3.67 |
0.96 |
mmap |
205.21 |
210.96 |
0.97 |
E/A-Benchmarks
Client-Maschine: Dell 1600C P4 Xeon 2 x 2,4 GHz, 1 GB RAM, Win2K Professional SP4
Einrichtung: Das Client-System wird über ein Crossover-Kabel und Auto-Negotiating mit Gigabit-Verbindungsgeschwindigkeit mit dem Testsystem verbunden.
Kernparameter: maxcpus=1
Netperf
Standard: netperf -H $1 -l 60 -t TCP_STREAM -- -m 8192 -M 8192 -s 4096 -S 8192
Optimiert: netperf -H $1 -l 60 -t TCP_STREAM -- -m 8192 -M 8192 -s 32768 -S 65536
Werte stehen für den Durchsatz in Mbps, im Durchschnitt vier Läufe, höhere Werte sind besser.
Workload |
Baseline |
Paravirt |
Paravirt/Baseline |
send,default |
418.10 |
416.16 |
0.995 |
send,tuned |
932.42 |
926.33 |
0.993 |
recv, default |
227.40 |
226.555 |
0.996 |
recv, tuned |
945.11 |
944.78 |
0.999 |
IOMeter
IOMeter 2006_07_27-RC3, Ein Arbeits-Thread
Regulär (O_DIRECT)
Werte stehen für den Durchsatz in IOPS, höhere Werte sind besser. Werte in Klammern stehen für den Durchsatz in MBps.
Workload |
Baseline |
Paravirt |
Paravirt/Baseline |
4K sequential read |
11823.98 (46.18) |
12345.57 (48.22) |
1.044 |
16K sequential read |
4571.101 (71.43) |
4576.95 (71.51) |
1.001 |
32K sequential read |
2331.338 (72.85) |
2333.80 (72.93) |
1.001 |
4K sequential write |
11480.75 (44.84) |
11842.80 (46.26) |
1.031 |
16K sequential write |
4008.865 (62.64) |
4011.06 (62.67) |
1.000 |
32K sequential write |
1942.484 (60.70) |
1946.50 (60.82) |
1.002 |
4K random read |
252.96 (0.98) |
252.076 (0.98) |
0.996 |
16K random read |
242.577 (3.79) |
242.098 (3.78) |
0.998 |
32K random read |
229.32 (7.16) |
228.90 (72.15) |
0.998 |
4K random write |
841.58 (3.28) |
842.54 (3.291) |
1.001 |
16K random write |
552.13 (8.62) |
545.06 (8.51) |
0.987 |
32K random write |
626.61 (19.58) |
626.41 (19.57) |
0.999 |
3D-Benchmarks
System: Dell Precision 390, Intel Core 2 Duo 6400mit 2,13 GHz, 2 GB RAM, Nvidia Quadro NVS 285,
Distribution: Ubuntu Feisty Fawn Herd-3 Desktop i386, Nvidia-Treiber Build 1.0-9746.
Kern:
- Basis: 2.6.20-rc6-ubuntu1
- CONFIG_VMI nicht definiert, CONFIG_PARAVIRT nicht definiert
- Paravirtualisierung: 2.6.20-rc6-ubuntu:
- CONFIG_PARAVIRT=y, CONFIG_VMI=y,
Test: SPECviewperf-9.0.3
Werte stehen für Frames pro Sekunde (FPS), höhere Werte sind besser.
Workload |
Baseline |
Paravirt |
Paravirt/Baseline |
3dsmax-04 |
6.882 |
6.930 |
1.006 |
catia-02 |
8.860 |
8.843 |
0.998 |
ensight-03 |
4.648 |
4.638 |
0.997 |
light-08 |
9.047 |
9.052 |
1.000 |
maya-02 |
15.48 |
15.47 |
0.999 |
proe-04 |
7.139 |
7.122 |
0.997 |
sw-01 |
8.948 |
8.940 |
0.999 |
ugnx-01 |
1.085 |
1.083 |
0.998 |
tcvis-01 |
1.600 |
1.605 |
1.003 |
Mit Nvidia Geforce 7600GT:
Werte stehen für Frames pro Sekunde (FPS), höhere Werte sind besser.
Workload |
Baseline |
Paravirt |
Paravirt/Baseline |
3dsmax-04 |
10.77 |
10.67 |
0.990 |
catia-02 |
11.49 |
11.53 |
1.003 |
ensight-03 |
9.060 |
9.040 |
0.997 |
light-08 |
10.01 |
10.09 |
1.007 |
maya-02 |
28.64 |
28.64 |
1.000 |
proe-04 |
9.593 |
9.694 |
1.010 |
sw-01 |
17.29 |
17.34 |
1.002 |
ugnx-01 |
3.066 |
3.065 |
0.999 |
tcvis-01 |
3.918 |
3.918 |
1.000 |