nginx
Lua
mruby
ngx_mruby
lua-nginx-module

ngx_mruby vs lua-nginx-module memo

More than 3 years have passed since last update.


Configuration, Environment


Machine


  • Ubuntu14.04 on VMWare

  • Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz 4core

  • Memory 8GB


Software version


OS

$ uname -a

Linux ubuntu14-04-64 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux


nginx binary

$ ldd build/nginx/sbin/nginx

linux-vdso.so.1 => (0x00007fff28946000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007feca7446000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007feca720d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007feca6f06000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007feca6b2c000)
libhiredis.so.0.10 => /usr/lib/x86_64-linux-gnu/libhiredis.so.0.10 (0x00007feca6922000)
libluajit-5.1.so.2 => /usr/lib/x86_64-linux-gnu/libluajit-5.1.so.2 (0x00007feca66b2000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007feca6474000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007feca625b000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feca5e94000)
/lib64/ld-linux-x86-64.so.2 (0x00007feca7677000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007feca5c90000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007feca5a7a000)


nginx build options

$ ./build/nginx/sbin/nginx -V

nginx version: nginx/1.7.6
built by gcc 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
configure arguments: --add-module=/home/matsumotory/DEV/ngx_mruby --add-module=/home/matsumotory/DEV/ngx_mruby/dependence/ngx_devel_kit --prefix=/home/matsumotory/DEV/ngx_mruby/build/nginx --add-module=/home/matsumotory/DEV/lua-nginx-module


nginx.conf


nginx.conf

worker_processes auto;

events {
worker_connections 1024;
multi_accept on;
}

daemon off;

http {
include mime.types;
server {
listen 58080;
server_name localhost;
root /home/matsumotory/DEV/ngx_mruby/build/nginx/html/;

location /mruby {
mruby_content_handler_code "Nginx.echo 'hello ngx_mruby world.'";
}

location /lua {
content_by_lua "ngx.say('Hello ngx_lualu world.')";
}

location /static {
# create static/inex.html
}
}
}



Benchmark Commands

$ ab -c 100 -n 1000000 -k http://127.0.0.1:58080/mruby

$ ab -c 100 -n 1000000 -k http://127.0.0.1:58080/lua
$ ab -c 100 -n 1000000 -k http://127.0.0.1:58080/static/index.html


Benchmark Results


ngx_mruby

This is ApacheBench, Version 2.3 <$Revision: 1528965 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100000 requests
Completed 200000 requests
Completed 300000 requests
Completed 400000 requests
Completed 500000 requests
Completed 600000 requests
Completed 700000 requests
Completed 800000 requests
Completed 900000 requests
Completed 1000000 requests
Finished 1000000 requests

Server Software: nginx/1.7.6
Server Hostname: 127.0.0.1
Server Port: 58080

Document Path: /mruby
Document Length: 23 bytes

Concurrency Level: 100
Time taken for tests: 11.708 seconds
Complete requests: 1000000
Failed requests: 0
Keep-Alive requests: 990044
Total transferred: 143950220 bytes
HTML transferred: 23000000 bytes
Requests per second: 85414.56 [#/sec] (mean)
Time per request: 1.171 [ms] (mean)
Time per request: 0.012 [ms] (mean, across all concurrent requests)
Transfer rate: 12007.27 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 28
Processing: 0 1 1.5 1 111
Waiting: 0 1 1.5 1 111
Total: 0 1 1.6 1 114

Percentage of the requests served within a certain time (ms)
50% 1
66% 1
75% 1
80% 2
90% 2
95% 2
98% 4
99% 5
100% 114 (longest request)


lua-nginx-module

This is ApacheBench, Version 2.3 <$Revision: 1528965 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100000 requests
Completed 200000 requests
Completed 300000 requests
Completed 400000 requests
Completed 500000 requests
Completed 600000 requests
Completed 700000 requests
Completed 800000 requests
Completed 900000 requests
Completed 1000000 requests
Finished 1000000 requests

Server Software: nginx/1.7.6
Server Hostname: 127.0.0.1
Server Port: 58080

Document Path: /lua
Document Length: 23 bytes

Concurrency Level: 100
Time taken for tests: 15.227 seconds
Complete requests: 1000000
Failed requests: 0
Keep-Alive requests: 990053
Total transferred: 169950265 bytes
HTML transferred: 23000000 bytes
Requests per second: 65674.42 [#/sec] (mean)
Time per request: 1.523 [ms] (mean)
Time per request: 0.015 [ms] (mean, across all concurrent requests)
Transfer rate: 10899.79 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 16
Processing: 0 2 2.5 1 143
Waiting: 0 1 2.5 1 143
Total: 0 2 2.5 1 143

Percentage of the requests served within a certain time (ms)
50% 1
66% 2
75% 2
80% 2
90% 3
95% 3
98% 5
99% 8
100% 143 (longest request)


Static Content

This is ApacheBench, Version 2.3 <$Revision: 1528965 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100000 requests
Completed 200000 requests
Completed 300000 requests
Completed 400000 requests
Completed 500000 requests
Completed 600000 requests
Completed 700000 requests
Completed 800000 requests
Completed 900000 requests
Completed 1000000 requests
Finished 1000000 requests

Server Software: nginx/1.7.6
Server Hostname: 127.0.0.1
Server Port: 58080

Document Path: /static/hello.html
Document Length: 22 bytes

Concurrency Level: 100
Time taken for tests: 16.687 seconds
Complete requests: 1000000
Failed requests: 0
Keep-Alive requests: 990049
Total transferred: 256950245 bytes
HTML transferred: 22000000 bytes
Requests per second: 59927.44 [#/sec] (mean)
Time per request: 1.669 [ms] (mean)
Time per request: 0.017 [ms] (mean, across all concurrent requests)
Transfer rate: 15037.47 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.3 0 58
Processing: 0 2 3.8 1 449
Waiting: 0 2 3.8 1 449
Total: 0 2 3.9 1 449

Percentage of the requests served within a certain time (ms)
50% 1
66% 2
75% 2
80% 2
90% 3
95% 4
98% 8
99% 12
100% 449 (longest request)

one mistake; response data byte is different from others. If you write the following into nginx.conf, more faster, maybe.

accept_mutex_delay 100ms;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_requests 100000;


Thoughts

name
result

ngx_mruby
Requests per second: 85414.56 #/sec

lua-nginx-module
Requests per second: 65674.42 #/sec

static contents
Requests per second: 59927.44 #/sec

It's a just hello world benchmark, so this benchmark is hobby. But, very interesting.