Overview & Benchmarks Monkey Web Server

. Overview

Monkey is a small, fast and lightweight open source Web Server for GNU/Linux. It has been designed with focus in embedded devices, therefore its scalable by nature having a low memory and CPU consumption and an excellent performance.

Monkey is properly supported on ARM, x86 and x64, being able to work in any architecture and device capable to run a Linux Kernel.

Features

  • HTTP/1.1 compliant
  • Virtual Hosts
  • Asynchronous networking model (event-driven)
  • Indented configuration
  • Plugins Support
  • C API Interface
  • Other features through base plugins:
    • SSL
    • Security
    • Log writter
    • Directory Listing
    • Shell: Command line

I. Monkey vs GWan

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.

GWan is a free but closed source web application server, it claims to be 3-4x times faster than open sources solutions such as NginX or Lighttpd.

Environment

Intel board, some details:

  • Kernel : 3.2.0 – x86_64
  • CPU : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz (4 cores)
  • RAM : 8 GB
  • Filesystem: ext4 on a SATA disk

The target HTTP servers are:

  • Monkey web server 1.1.0 (development branch)
  • GWan 3.3.28

The benchmarking tool used is Siege, it uses asyncrhonous sockets to perform the tests so it have a low latency compared with Apache Benchmark, so it provide more accurate results. The test is performed with the following command:

$ siege -b -t10S -c500 http://localhost:PORT/linux.jpg

We set the benchmarking mode and during 10 seconds, Siege will scale up to 500 concurrent clients which will perform as many request as it can over the file linux.jpg (200KB jpeg image).

Monkey have configured and compiled from sources, for GWan we are using the binaries provided in their web site.

Results

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

Monkey v1.1.0-dev

Transactions:		       29832 hits
Availability:		      100.00 %
Elapsed time:		        9.25 secs
Data transferred:	     5751.94 MB
Response time:		        0.15 secs
Transaction rate:	  3225.08 trans/sec
Throughput:		      621.83 MB/sec
Concurrency:		      485.78
Successful transactions:       29832
Failed transactions:	           0
Longest transaction:	        1.38
Shortest transaction:	        0.00
GWan 3.3.28

Transactions:		       23235 hits
Availability:		      100.00 %
Elapsed time:		        9.13 secs
Data transferred:	     4479.96 MB
Response time:		        0.19 secs
Transaction rate:	    2544.91 trans/sec
Throughput:		      490.69 MB/sec
Concurrency:		      480.86
Successful transactions:       23235
Failed transactions:	           0
Longest transaction:	        1.63
Shortest transaction:	        0.00

Monkey was capable to serve the linux.jpg file 3225.08 times per second and GWan only 2544.91, that means that Monkey is ~12% faster serving static content than GWan in a Linux x86_64 box.

II. Monkey vs Busybox

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%.

III. Monkey vs NginX

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.

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) – overcloaked to ~800Mhz
  • RAM : 223 MB
  • Filesystem: ext4 on a SD card

The target HTTP servers are:

  • Monkey web server 1.1.0 (development branch)
  • NginX web server 1.3.1 (stable)

The benchmarking tool used is Siege, it uses asyncrhonous sockets to perform the tests so it have a low latency compared with Apache Benchmark, so it provide more accurate results. The test is performed with the following command:

$ siege -b -t10S -c200 http://localhost:PORT/linux.jpg

We set the benchmarking mode and during 10 seconds, Siege will scale up to 200 concurrent clients which will perform as many request as it can over the file linux.jpg (200KB jpeg image).

Monkey and NginX 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, with the only exception that we have set NginX to work with five workers as Monkey is doing by default.

Results

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

Monkey v1.1.0-dev

Transactions:                    973 hits
Availability:                 100.00 %
Elapsed time:                   9.55 secs
Data transferred:             187.80 MB
Response time:                  1.59 secs
Transaction rate:             101.88 trans/sec
Throughput:                    19.66 MB/sec
Concurrency:                  162.37
Successful transactions:         974
Failed transactions:               0
Longest transaction:            2.36
Shortest transaction:           0.19
NginX 1.3.1

Transactions:                    840 hits
Availability:                 100.00 %
Elapsed time:                   9.81 secs
Data transferred:             161.96 MB
Response time:                  1.66 secs
Transaction rate:              85.63 trans/sec
Throughput:                    16.51 MB/sec
Concurrency:                  141.88
Successful transactions:         840
Failed transactions:               0
Longest transaction:            8.87
Shortest transaction:           0.27

Monkey was capable to serve the linux.jpg file 101.88 times per second and NginX only 85.63, that means that Monkey is ~16% faster serving static content than NginX in a Raspberry PI board. We can also see that NginX did not scale so well as it longest transaction was 8.87 v/s Monkey which was 2.36:

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.

(via Monkey-project.com)

About these ads

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s