Benchmark: Raspberry PI - Monkey v/s Busybox httpd

The Raspberry Pi is a small sized computer based on ARM architecture, nowadays is becoming very popular due to it's low price (25USD) and performant design.

Introduction

Monkey is known as a lightweight HTTP web server and stack which hits a huge performance due to it architecture and carefully design. On these benchmarking series we are testing Monkey on different platforms against other web solutions available.

Busybox is a toolbox of common linux software, often used in embedded settings. It includes a forking http server.

The Raspberry Pi card it's a very interesting card as it provide a low cost board powered by the ARM architecture, overcloaked it can run at 800MHz of CPU, it supports SD cards and the common networking interfaces for LAN connectivity.

Environment

The Raspberry PI - Linux OS have the following details:

  • Kernel : 3.1.9
  • CPU : ARMv6-compatible processor rev 7 (v6l) - standard 700MHz
  • RAM : 223 MB
  • Filesystem: tmpfs (in RAM)

The target HTTP servers are:

  • Monkey web server, git 484f819cf5a65d8f26add14243c8ffcee6293cc1
  • Busybox httpd, git 576b1d3c417ddea79481063401837ec0bdb91658

The benchmarking tool used is Siege (2.72), it uses asynchronous sockets to perform the tests so it has a low latency compared with Apache Benchmark, and so it provides more accurate results. The test is performed with the following command:

$ siege -b -t10S -c10 http://localhost:PORT/index.html
We set the benchmarking mode and during 10 seconds, Siege will start 10 concurrent clients which will perform as many requests as they can over the file index.html (1.4KB default file shipped with Monkey).

Monkey and Busybox httpd have been configured and compiled from sources in the Raspberry PI board, also the configuration for each service is the one that comes by default.

Results

After the test over each HTTP server, Siege provided the following results:

    Monkey
    Transactions:                   2608 hits
    Availability:                 100.00 %
    Elapsed time:                   9.64 secs
    Data transferred:               0.09 MB
    Response time:                  0.04 secs
    Transaction rate:             270.54 trans/sec
    Throughput:                     0.01 MB/sec
    Concurrency:                    9.68
    Successful transactions:        2608
    Failed transactions:               0
    Longest transaction:            0.08
    Shortest transaction:           0.00
    
    Busybox httpd
    Transactions:                   1426 hits
    Availability:                 100.00 %
    Elapsed time:                   9.61 secs
    Data transferred:               0.05 MB
    Response time:                  0.07 secs
    Transaction rate:             148.39 trans/sec
    Throughput:                     0.01 MB/sec
    Concurrency:                    9.94
    Successful transactions:        1426
    Failed transactions:               0
    Longest transaction:            0.12
    Shortest transaction:           0.04
    

Serving small static files, Monkey was able to handle 270 transactions per second, compared to Busybox's 150. This is a 80% difference. The loading times were also better with Monkey, having the longest transaction at 80ms compared to Busybox's 120ms, a difference of 33%.

This is a great result as it reflects how well Monkey performs on ARM compared to other web servers. Is good to mention that Monkey is NOT caching any content of the requested file and is doing a great optimization of the system resources.



Disclaimer

The test was made in localhost mode, which does not reflect a real internet environment, so under different circumstances re results could be different. The localhost test helps to determinate how the server performs under a high load as it reduces the TCP and networking overhead in general.

If you have a Raspberry PI board, we encourage you that you perform your own tests, feel free to contact us about the results in question to our mailing list.