[Yanel-dev] Cluster performance testing

Cedric Staub cedric.staub at wyona.com
Wed Feb 2 16:03:23 CET 2011


Hello everybody out there

I performed some simple performance testing with a couple of old
machines to find out how well Yanel scales in a cluster. I also did some
tests with a data repository on a remote storage system using NFS.

I think the results are pretty good. We see a 36% speed increase when
adding 50% more computing power (the second machine has only a single
core instead of two and half as much RAM). Testing with NFS showed that
there is a variable slowdown if you need to access data from a remote
host. However, the NAS I used wasn't really made for such a scenario.
I would except the performance with a dedicated SAN to be much better.

When interpreting the data, please note:

* The machines I used for testing are not equal (the second machine 
is slower then the first one, so don't expect the throughput to double).

* The about page includes two XInclude directives, hence the slowdown.
I briefly tried uncommenting the XInclude directives, which immediatly
led to a speed increase. Perhaps the XInclude implementation could be
optimized somehow?

Cheers
Cedric
-------------- next part --------------
Hardware/Software
-----------------

* Host yanel-cluster-node1: 
    AMD Athlon 64 X2 Dual Core CPU 3600+, 2G RAM
    Ubuntu 10.04 LTS, Jakarta Tomcat 5.0.30
    Sun Java 6 SDK Version 6.22-0ubuntu1~10.04
    Yanel revision 56412 from Subversion

* Host yanel-cluster-node2: 
    AMD Athlon 64 CPU 2800+, 1G RAM
    Ubuntu 10.04 LTS, Jakarta Tomcat 5.0.30
    Sun Java 6 SDK Version 6.20dlj-1ubuntu3
    Yanel revision 56412 from Subversion

* Testing system:
    Intel Core 2 Duo P8400, 2G RAM
    Hardened Gentoo Linux (2011/02/01)
    Sun Java 6 SDK Version 6.23 (vanilla)
    JMeter Version 2.0.1-r4

* Storage/NAS:
    LaCie/Intel NAS with 4 x 3.5" IDE drives in RAID5 mode

Latency between all nodes (both cluster nodes, the testing system, 
and the NAS mounted over NFS) on the network was consistently below 1 ms.


Configurations
--------------

Jmeter:
(1) Total of 10 threads, 1 secs ramp-up, 1000 requests per thread.
    Request Yanel Website homepage (path /yanel/yanel-website/).

(2) Total of 10 threads, 1 secs ramp-up, 1000 requests per thread.
    Request Yanel Website about page (path /yanel/yanel-website/en/about.html).

Cluster:
(A) One Apache HTTP balancer, four Tomcats with Yanel (local storage).
    Balancer with two Tomcats on node1 + two Tomcats on node2.

(B) One Apache HTTP balancer, four Tomcats with Yanel (remote storage).
    Balancer with two Tomcats on node1 + two Tomcats on node2.
    Yanel website realm's data-repository is mounted on NFS.

(C) One Apache HTTP balancer, two Tomcats with Yanel (local storage).
    Balancer with two Tomcats on node1.


Results
-------

1)  A. FIRST RUN 
        Throughput: 73.3 reqs/sec
        Latency: 18/133/2514/103 ms (min/avg/max/dev)
        Error rate: 0.01%

       SECOND RUN
        Throughput: 79.4 reqs/sec
        Latency: 17/122/735/93 ms (min/avg/max/dev)
        Error rate: 0.00%

    B. FIRST RUN 
        Throughput: 53.5 reqs/sec
        Latency: 44/183/4017/243 ms (min/avg/max/dev)
        Error rate: 0.00%

       SECOND RUN
        Throughput: 68.9 reqs/sec
        Latency: 41/142/535/52 ms (min/avg/max/dev)
        Error rate: 0.00%

    C. FIRST RUN
        Throughput: 58.6 reqs/sec
        Latency: 17/167/2151/110 ms (min/avg/max/dev)
        Error rate: 0.00%

2)  B. FIRST RUN
        Throughput: 15.1 reqs/sec
        Latency: 6/646/2326/605 ms (min/avg/max/dev)
        Error rate: 0.00%

       SECOND RUN
        Throughput: 15.4 reqs/sec
        Latency: 91/637/13059/654 ms (min/avg/max/dev)
        Error rate: 0.02%


Notes
-----

About remote storage: After moving the realm's data repository to the NFS
share and reconfiguring the realm, performance on the first run started out at
about 3-4 requests/sec throughput. This is compared to about 30-40 reqs/sec
initial throughput for local storage. The throughput drastically increased
over time however, probably because NFS started caching the files locally. 

As soon as a new/other page is accessed though, latency increases again and
throughput drops back down (initially). After that it usually takes a couple
of seconds to get back up to acceptable values.


More information about the Yanel-development mailing list