[CentOS-virt] performance differences between kvm/xen
Pasi Kärkkäinen
pasik at iki.fi
Sat Oct 16 14:11:30 EDT 2010
On Thu, Oct 14, 2010 at 02:16:42PM +0100, Bart Swedrowski wrote:
> Hi Karanbir,
>
> On 14 October 2010 19:59, Karanbir Singh <mail-lists at karan.org> wrote:
> >
> > On 10/14/2010 07:48 AM, Tom Bishop wrote:
> > > I think xen is still on top in terms of performance and features....now
> >
> > that is indeed what it 'feels' like, but I'm quite keen on putting some
> > numbers on that.
>
> I have done some testing some time ago on one of the EQ machines that
> I got from hetzner.de. Full spec of the machine was as following:
>
> * Intel® Core??? i7-920
> * 8 GB DDR3 RAM
> * 2 x 750 GB SATA-II HDD
>
> It's nothing big but even though results are quite interesting. All
> tests were performed on CentOS 5.5 x86_64 with PostgreSQL 8.4 (from
> CentOS repos).
>
Note that 64bit Xen guests should be HVM, not PV, for best performance.
Xen HVM guests obviously still need to have PV-on-HVM drivers installed.
32bit Xen guests can be PV.
-- Pasi
> I have run some PostgreSQL PGBench tests as well as Bonnie++ tests.
> The PostgreSQL tests was divided into two tests having three goes (to
> get an idea of average). The commands I used for testing were:
>
> > dropdb pgbench && sync && sleep 3 && createdb pgbench && sync && sleep 3
> > pgbench -i -s 100 -U postgres -d pgbench && sync && sleep 3
> > pgbench -c 10 -t 5000 -s 100 -U postgres -d pgbench 2>/dev/null && sync \
> > && sleep 3 && pgbench -c 10 -t 5000 -s 100 -U postgres -d pgbench 2>/dev/null \
> > && sync && sleep 3 && pgbench -c 10 -t 5000 -s 100 -U postgres -d pgbench 2>/dev/null \
> > && sync && sleep 3
>
> Now results. First CentOS5/x86_64 without any virtualisation, without
> any PostgreSQL optimisation:
>
> -bash-3.2$ pgbench -c 10 -t 5000 -s 100 -U postgres -d pgbench 2>/dev/null
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 141.191292 (including connections establishing)
> tps = 141.196776 (excluding connections establishing)
> -bash-3.2$ pgbench -c 10 -t 5000 -s 100 -U postgres -d pgbench 2>/dev/null
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 156.479561 (including connections establishing)
> tps = 156.486222 (excluding connections establishing)
> -bash-3.2$ pgbench -c 10 -t 5000 -s 100 -U postgres -d pgbench 2>/dev/null
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 164.880109 (including connections establishing)
> tps = 164.888009 (excluding connections establishing)
>
> Now after optimisation (shared_buffers, effective_cache_size etc.):
>
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 403.430951 (including connections establishing)
> tps = 403.474562 (excluding connections establishing)
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 336.060764 (including connections establishing)
> tps = 336.093214 (excluding connections establishing)
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 446.607705 (including connections establishing)
> tps = 446.664466 (excluding connections establishing)
>
> Now KVM based VM with 7GB RAM and 8 CPUs. Using virtio and LVM
> partitions as backend.
>
> PostgreSQL results *w/o* optimisation.
>
> -bash-3.2$ pgbench -c 10 -t 5000 -s 100 -U postgres -d pgbench
> 2>/dev/null && sync && sleep 3 && pgbench -c 10 -t 5000 -s 100 -U
> postgres -d pgbench 2>/dev/null && sync && sleep 3 && pgbench -c 10 -t
> 5000 -s 100 -U postgres -d pgbench 2>/dev/null && sync && sleep 3
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 124.578488 (including connections establishing)
> tps = 124.585776 (excluding connections establishing)
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 140.451736 (including connections establishing)
> tps = 140.463105 (excluding connections establishing)
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 148.091563 (including connections establishing)
> tps = 148.102254 (excluding connections establishing)
>
> PostgreSQL tests *with* optimisation:
>
> -bash-3.2$ pgbench -c 10 -t 5000 -s 100 -U postgres -d pgbench
> 2>/dev/null && sync && sleep 3 && pgbench -c 10 -t 5000 -s 100 -U
> postgres -d pgbench 2>/dev/null && sync && sleep 3 && pgbench -c 10 -t
> 5000 -s 100 -U postgres -d pgbench 2>/dev/null && sync && sleep 3
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 230.695831 (including connections establishing)
> tps = 230.734357 (excluding connections establishing)
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 207.535243 (including connections establishing)
> tps = 207.572818 (excluding connections establishing)
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 206.664120 (including connections establishing)
> tps = 206.695176 (excluding connections establishing)
>
> And, finally, Xen based VM with 7GB RAM and 8 CPUs. Using LVM
> partitions as backend. PostgreSQL tests results *w/o* optimisation:
>
> -bash-3.2$ pgbench -c 10 -t 5000 -s 100 -U postgres -d pgbench
> 2>/dev/null && sync && sleep 3 && pgbench -c 10 -t 5000 -s 100 -U
> postgres -d pgbench 2>/dev/null && sync && sleep 3 && pgbench -c 10 -t
> 5000 -s 100 -U postgres -d pgbench 2>/dev/null && sync && sleep 3
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 126.554719 (including connections establishing)
> tps = 126.562829 (excluding connections establishing)
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 135.472197 (including connections establishing)
> tps = 135.481690 (excluding connections establishing)
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
>
> ... and *with* optimisation:
>
> -bash-3.2$ pgbench -c 10 -t 5000 -s 100 -U postgres -d pgbench
> 2>/dev/null && sync && sleep 3 && pgbench -c 10 -t 5000 -s 100 -U
> postgres -d pgbench 2>/dev/null && sync && sleep 3 && pgbench -c 10 -t
> 5000 -s 100 -U postgres -d pgbench 2>/dev/null && sync && sleep 3
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 312.133362 (including connections establishing)
> tps = 312.186309 (excluding connections establishing)
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 203.123398 (including connections establishing)
> tps = 203.146153 (excluding connections establishing)
> pghost: pgport: nclients: 10 nxacts: 5000 dbName: pgbench
> transaction type: TPC-B (sort of)
> scaling factor: 100
> number of clients: 10
> number of transactions per client: 5000
> number of transactions actually processed: 50000/50000
> tps = 279.864975 (including connections establishing)
> tps = 279.910306 (excluding connections establishing)
>
> From my tests it came out that Xen still outperforms KVM especially in
> disk IO performance. As so and fact my applications are dependant on
> databases (and which are not these days?) I have kept on using Xen.
>
> Other thing that I like about Xen is you can easily mount LVM
> partitions to the host OS and play with them should you need to. In
> KVM you've got this double LVM layer which makes it difficult to do
> this. I know there are ways around it but it just seems a bit more
> easier and straight forward in Xen at the moment.
>
> Regards.
> _______________________________________________
> CentOS-virt mailing list
> CentOS-virt at centos.org
> http://lists.centos.org/mailman/listinfo/centos-virt
More information about the CentOS-virt
mailing list