Below is list of results collected with netperf. The interesting value is TCP_CRR, it measures how fast it can TCP connect/request/response/receive. In short, the transaction rate. The test is used to simulate a normal HTTP/1.0 transaction. What's worrying is that this value has very low on Xen virtualized guests. Performance differences between bare metal and virtualization has been as high as 2-3x.
Virt. platform | OS | CPU | # CPU cores | TCP_CRR | TCP_RR | UDP_RR | Comments |
Bare metal | Windows 7 Ultimate | Intel Core i5 CPU 760 @ 2.80GHz | 4 | N/A | 56319 | 48682 | Couldn't perform TCP_CRR |
Xen | Linux 2.6.18-164.2.1.el5xen x86_64 | Intel Xeon CPU E5345 @ 2.33GHz | 4 | 6494 | 24134 | 26852 | |
Bare metal | Linux 2.6.38-8-generic x86_64 #42-Ubuntu | Intel Core i5-2300 CPU @ 2.80GHz | 4 | 23230 | 62036 | 75954 | |
KVM | 2.6.38.6 kernel :) | AMD Phenom(tm) II X6 1055T Processor | 6(vm has 1) | 29279.62 | 104254.60 | 159134.70 | erh... did I do this wrong??? |
Xen | Linux 2.6.36.4 (custom PV kernel) under Xen 3.2.1 | Intel Xeon X3323 @ 2.50GHz | 1 | 9636 | 36644 | 44443 | Production Memset miniserver |
Xen dom0 (closer to the bare metal!) | Linux 2.6.26 | Intel Xeon X3323 @ 2.50GHz | 4 | 9589 | 38347 | 47181 | dom0 of the above Memset miniserver host |
Xen | Linux 2.6.38-x86_64-linode17 x86_64 | Intel Xeon CPU L5520 @ 2.27GHz | 4 | 4496 | 18160 | 20892 | |
Xen | FreeBSD dev 8.2-RELEASE i386 | Intel(R) Xeon(R) CPU E5430 @ 2.66GHz | 1 | 9317.74 | 35000.73 | 37654.41 | |
BareMetal | FreeBSD 8.2-RELEASE amd64 | VIA Nano processor U2250 (1.6GHz Capable) | 1 | 468.36 | 17478.24 | 24971.05 | |
XEN HVM | FreeBSD 8.2-RELEASE FreeBSD amd64 - XEN HVM | Intel(R) Xeon(R) CPU X5570 @ 2.93GHz | 16 | 5074.47 | 8969.24 | 7874.76 |
It's recommended you run these tests on Linux. You can either download prebuilt binaries from your favorite package system or build from source. The latter is quite easy.
Use these steps to build from source:
cd /tmp
curl -O ftp://ftp.netperf.org/netperf/netperf-2.4.5.tar.gz
tar zvxf netperf-2.4.5.tar.gz
cd /netperf-2.4.5
./configure
make
src/netserver -4
src/netperf -H 127.0.0.1 -t TCP_CRR
src/netperf -H 127.0.0.1 -t TCP_RR
src/netperf -H 127.0.0.1 -t UDP_RR
Get OS version with
uname -a
Get processor info with
cat /proc/cpuinfo
Been having trouble compiling netperf on Mac OS. Might be an easy fix?
cd /usr/ports/benchmarks/netperf && make && make install
or
pkg_add -r netperf
Then, same as Linux:
sysctl -a | egrep -i 'hw.model|hw.ncpu'
netserver -4
netperf -H 127.0.0.1 -t TCP_CRR
netperf -H 127.0.0.1 -t TCP_RR
netperf -H 127.0.0.1 -t UDP_RR
Prebuilt binaries for Windows are available. Get them from http://www.chriswolf.com/download/netperf.zip TCP_CRR are problematic to run. Why I'm not sure, but not surprised this is the case. Linux is recommended for doing these tests.
Please submit your findings in the table above by editing this Gist. Enter your OS version, CPU, number of cores and the results. It's last column in netperf's output you are supposed to report for each test (the transaction rate). Note any special info such as hyperthreading, special sysctl settings etc in the comments field.
I can't edit this gist, but I got
It probably doesn't matter for the loopback test - but I have some additional sysctl settings on the host -->
net.bridge.bridge-nf-call-arptables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-filter-vlan-tagged = 0
net.bridge.bridge-nf-filter-pppoe-tagged = 0