Browse Source

fixed merge conflict

Keith Newman 10 years ago
parent
commit
34a8bdab37
100 changed files with 404 additions and 76 deletions
  1. 2 0
      .travis.yml
  2. 0 0
      frameworks/C++/ULib/benchmark_config.json
  3. 0 0
      frameworks/C++/cpoll_cppsp/benchmark_config.json
  4. 15 0
      frameworks/C++/silicon/CMakeLists.txt
  5. 51 0
      frameworks/C++/silicon/benchmark_config.json
  6. 20 0
      frameworks/C++/silicon/install.sh
  7. 137 0
      frameworks/C++/silicon/main.cc
  8. 3 0
      frameworks/C++/silicon/setup_epoll_mysql.sh
  9. 3 0
      frameworks/C++/silicon/setup_tpc_mysql.sh
  10. 47 0
      frameworks/C++/silicon/symbols.hh
  11. 0 0
      frameworks/C++/treefrog/benchmark_config.json
  12. 0 0
      frameworks/C++/wt/benchmark_config.json
  13. 0 0
      frameworks/C/duda/benchmark_config.json
  14. 0 0
      frameworks/C/haywire/benchmark_config.json
  15. 0 0
      frameworks/C/lwan/benchmark_config.json
  16. 0 0
      frameworks/C/onion/benchmark_config.json
  17. 0 0
      frameworks/CSharp/HttpListener/benchmark_config.json
  18. 0 0
      frameworks/CSharp/aspnet-stripped/benchmark_config.json
  19. 0 0
      frameworks/CSharp/aspnet/benchmark_config.json
  20. 0 8
      frameworks/CSharp/evhttp-sharp/bash_profile.sh
  21. 0 0
      frameworks/CSharp/evhttp-sharp/benchmark_config.json
  22. 0 28
      frameworks/CSharp/evhttp-sharp/setup.py
  23. 16 0
      frameworks/CSharp/evhttp-sharp/setup.sh
  24. 0 0
      frameworks/CSharp/nancy/benchmark_config.json
  25. 0 8
      frameworks/CSharp/servicestack/bash_profile.sh
  26. 0 0
      frameworks/CSharp/servicestack/benchmark_config.json
  27. 30 0
      frameworks/CSharp/servicestack/setup_nginx.sh
  28. 14 0
      frameworks/CSharp/servicestack/setup_xsp.sh
  29. 12 0
      frameworks/CSharp/servicestack/src/AppHostConfigHelper.cs
  30. 18 1
      frameworks/CSharp/servicestack/src/DbFactories/PostgreSqlOrmLiteConnectionFactory.cs
  31. 3 1
      frameworks/CSharp/servicestack/src/Model/Fortune.cs
  32. 1 1
      frameworks/CSharp/servicestack/src/ServiceStackBenchmark.csproj
  33. 0 0
      frameworks/Clojure/compojure/benchmark_config.json
  34. 0 0
      frameworks/Clojure/http-kit/benchmark_config.json
  35. 0 0
      frameworks/Clojure/luminus/benchmark_config.json
  36. 0 0
      frameworks/Dart/dart-redstone/benchmark_config.json
  37. 0 0
      frameworks/Dart/dart-start/benchmark_config.json
  38. 0 0
      frameworks/Dart/dart-stream/benchmark_config.json
  39. 0 0
      frameworks/Dart/dart/benchmark_config.json
  40. 0 0
      frameworks/Elixir/WeberFramework/benchmark_config.json
  41. 0 0
      frameworks/Erlang/cowboy/benchmark_config.json
  42. 0 0
      frameworks/Erlang/elli/benchmark_config.json
  43. 0 0
      frameworks/Go/beego/benchmark_config.json
  44. 0 0
      frameworks/Go/falcore/benchmark_config.json
  45. 0 0
      frameworks/Go/gin/benchmark_config.json
  46. 0 0
      frameworks/Go/go/benchmark_config.json
  47. 4 0
      frameworks/Go/go/setup_prefork.sh
  48. 24 25
      frameworks/Go/go/src/hello/hello.go
  49. 0 0
      frameworks/Go/revel-jet/benchmark_config.json
  50. 0 0
      frameworks/Go/revel-qbs/benchmark_config.json
  51. 0 0
      frameworks/Go/revel/benchmark_config.json
  52. 0 0
      frameworks/Go/webgo/benchmark_config.json
  53. 0 0
      frameworks/Groovy/grails/benchmark_config.json
  54. 0 0
      frameworks/Haskell/snap/benchmark_config.json
  55. 0 0
      frameworks/Haskell/wai/benchmark_config.json
  56. 0 0
      frameworks/Haskell/yesod/benchmark_config.json
  57. 0 0
      frameworks/Java/activeweb/benchmark_config.json
  58. 0 0
      frameworks/Java/curacao/benchmark_config.json
  59. 0 0
      frameworks/Java/dropwizard-mongodb/benchmark_config.json
  60. 0 0
      frameworks/Java/dropwizard/benchmark_config.json
  61. 0 0
      frameworks/Java/gemini/benchmark_config.json
  62. 0 0
      frameworks/Java/grizzly-bm/benchmark_config.json
  63. 0 0
      frameworks/Java/grizzly-jersey/benchmark_config.json
  64. 0 0
      frameworks/Java/jetty-servlet/benchmark_config.json
  65. 0 0
      frameworks/Java/netty/benchmark_config.json
  66. 0 0
      frameworks/Java/ninja-standalone/benchmark_config.json
  67. 0 0
      frameworks/Java/play1/benchmark_config.json
  68. 0 0
      frameworks/Java/play1siena/benchmark_config.json
  69. 1 1
      frameworks/Java/play1siena/setup.sh
  70. 1 1
      frameworks/Java/play2-java/README.md
  71. 0 0
      frameworks/Java/play2-java/benchmark_config.json
  72. 2 2
      frameworks/Java/play2-java/generate_config.py
  73. 0 0
      frameworks/Java/restexpress/benchmark_config.json
  74. 0 0
      frameworks/Java/sabina/benchmark_config.json
  75. 0 0
      frameworks/Java/servlet/benchmark_config.json
  76. 0 0
      frameworks/Java/servlet3-cass/benchmark_config.json
  77. 0 0
      frameworks/Java/spark/benchmark_config.json
  78. 0 0
      frameworks/Java/spring/benchmark_config.json
  79. 0 0
      frameworks/Java/tapestry/benchmark_config.json
  80. 0 0
      frameworks/Java/undertow-edge/benchmark_config.json
  81. 0 0
      frameworks/Java/undertow/benchmark_config.json
  82. 0 0
      frameworks/Java/vertx/benchmark_config.json
  83. 0 0
      frameworks/Java/wicket/benchmark_config.json
  84. 0 0
      frameworks/Java/wildfly-ee7/benchmark_config.json
  85. 0 0
      frameworks/JavaScript/express/benchmark_config.json
  86. 0 0
      frameworks/JavaScript/hapi/benchmark_config.json
  87. 0 0
      frameworks/JavaScript/nodejs/benchmark_config.json
  88. 0 0
      frameworks/JavaScript/ringojs-convenient/benchmark_config.json
  89. 0 0
      frameworks/JavaScript/ringojs/benchmark_config.json
  90. 0 0
      frameworks/Lua/lapis/benchmark_config.json
  91. 0 0
      frameworks/Lua/openresty/benchmark_config.json
  92. 0 0
      frameworks/Nim/jester/benchmark_config.json
  93. 0 0
      frameworks/Nim/nawak/benchmark_config.json
  94. 0 0
      frameworks/PHP/Yii2/benchmark_config.json
  95. 0 0
      frameworks/PHP/cakephp/benchmark_config.json
  96. 0 0
      frameworks/PHP/codeigniter/benchmark_config.json
  97. 0 0
      frameworks/PHP/fuel/benchmark_config.json
  98. 0 0
      frameworks/PHP/hhvm/benchmark_config.json
  99. 0 0
      frameworks/PHP/kohana/benchmark_config.json
  100. 0 0
      frameworks/PHP/lithium/benchmark_config.json

+ 2 - 0
.travis.yml

@@ -26,6 +26,7 @@ env:
     - "TESTDIR=CSharp/nancy"
     - "TESTDIR=CSharp/nancy"
     - "TESTDIR=CSharp/servicestack"
     - "TESTDIR=CSharp/servicestack"
     - "TESTDIR=C++/cpoll_cppsp"
     - "TESTDIR=C++/cpoll_cppsp"
+    - "TESTDIR=C++/silicon"
     - "TESTDIR=C++/treefrog"
     - "TESTDIR=C++/treefrog"
     - "TESTDIR=C++/ULib"
     - "TESTDIR=C++/ULib"
     - "TESTDIR=C++/wt"
     - "TESTDIR=C++/wt"
@@ -124,6 +125,7 @@ env:
     - "TESTDIR=Python/tornado"
     - "TESTDIR=Python/tornado"
     - "TESTDIR=Python/uwsgi"
     - "TESTDIR=Python/uwsgi"
     - "TESTDIR=Python/web2py"
     - "TESTDIR=Python/web2py"
+    - "TESTDIR=Python/wheezyweb"
     - "TESTDIR=Python/wsgi"
     - "TESTDIR=Python/wsgi"
     - "TESTDIR=Racket/racket-ws"
     - "TESTDIR=Racket/racket-ws"
     - "TESTDIR=Ruby/grape"
     - "TESTDIR=Ruby/grape"

+ 0 - 0
frameworks/C++/ULib/benchmark_config → frameworks/C++/ULib/benchmark_config.json


+ 0 - 0
frameworks/C++/cpoll_cppsp/benchmark_config → frameworks/C++/cpoll_cppsp/benchmark_config.json


+ 15 - 0
frameworks/C++/silicon/CMakeLists.txt

@@ -0,0 +1,15 @@
+cmake_minimum_required(VERSION 2.8)
+
+project(silicon)
+
+include_directories($ENV{IROOT}/include)
+
+link_directories($ENV{IROOT}/lib)
+add_definitions(-std=c++14  -ftemplate-depth=512 -DNDEBUG -O3)
+
+add_executable(silicon_tpc_mysql main.cc)
+target_link_libraries(silicon_tpc_mysql microhttpd mysqlclient)
+
+add_executable(silicon_epoll_mysql main.cc)
+set_target_properties(silicon_epoll_mysql PROPERTIES COMPILE_FLAGS "-DTFB_USE_EPOLL")
+target_link_libraries(silicon_epoll_mysql microhttpd mysqlclient)

+ 51 - 0
frameworks/C++/silicon/benchmark_config.json

@@ -0,0 +1,51 @@
+{
+  "framework": "silicon",
+  "tests": [{
+    "default": {
+      "setup_file": "setup_tpc_mysql",
+      "json_url"       : "/json",
+      "db_url"         : "/db",
+      "query_url"      : "/queries?queries=",
+      "fortune_url"    : "/fortunes",
+      "update_url"     : "/updates?queries=",
+      "plaintext_url"  : "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Micro",
+      "database": "MySQL",
+      "framework": "silicon",
+      "language": "C++",
+      "orm": "Full",
+      "platform": "Silicon",
+      "webserver": "None",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "silicon-tpc-mysql",
+      "notes": "",
+      "versus": ""
+    },
+    "epoll-mysql": {
+      "setup_file": "setup_epoll_mysql",
+      "json_url"       : "/json",
+      "db_url"         : "/db",
+      "query_url"      : "/queries?queries=",
+      "fortune_url"    : "/fortunes",
+      "update_url"     : "/updates?queries=",
+      "plaintext_url"  : "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Micro",
+      "database": "MySQL",
+      "framework": "silicon",
+      "language": "C++",
+      "orm": "Full",
+      "platform": "Silicon",
+      "webserver": "None",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "silicon-epoll-mysql",
+      "notes": "",
+      "versus": ""
+    }
+  }]
+}

+ 20 - 0
frameworks/C++/silicon/install.sh

@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# Install silicon
+DIR=`pwd`
+rm -fr silicon;
+git clone https://github.com/matt-42/silicon.git
+cd silicon;
+CXX=/usr/bin/g++-4.9 ./install.sh $IROOT
+
+# Install microhttpd
+cd $DIR
+fw_get http://mirror.ibcp.fr/pub/gnu/libmicrohttpd/libmicrohttpd-0.9.39.tar.gz
+fw_untar libmicrohttpd-0.9.39.tar.gz
+cd libmicrohttpd-0.9.39
+./configure --prefix=$IROOT
+make install
+
+cd $TROOT
+mkdir -p build
+cd build; cmake .. -DCMAKE_CXX_COMPILER=g++-4.9; make silicon_tpc_mysql; make silicon_epoll_mysql

+ 137 - 0
frameworks/C++/silicon/main.cc

@@ -0,0 +1,137 @@
+#include <algorithm>
+#include <unistd.h>
+#include <iostream>
+#include <silicon/backends/mhd.hh>
+#include <silicon/api.hh>
+#include <silicon/middlewares/mysql_connection.hh>
+#include <silicon/middlewares/mysql_orm.hh>
+#include "symbols.hh"
+
+using namespace s;
+using namespace sl;
+
+typedef decltype(D(_id(_auto_increment, _primary_key) = int(),
+                   _randomNumber = int())) random_number;
+
+typedef decltype(D(_id(_auto_increment, _primary_key) = int(),
+                   _message = std::string())) fortune;
+
+typedef mysql_orm_factory<random_number> rn_orm_factory;
+typedef mysql_orm<random_number> rn_orm;
+
+typedef mysql_orm_factory<fortune> fortune_orm_factory;
+typedef mysql_orm<fortune> fortune_orm;
+
+std::string escape_html_entities(const std::string& data)
+{
+    std::string buffer;
+    buffer.reserve(data.size());
+    for(size_t pos = 0; pos != data.size(); ++pos) {
+        switch(data[pos]) {
+            case '&':  buffer.append("&amp;");       break;
+            case '\"': buffer.append("&quot;");      break;
+            case '\'': buffer.append("&apos;");      break;
+            case '<':  buffer.append("&lt;");        break;
+            case '>':  buffer.append("&gt;");        break;
+            default:   buffer.append(&data[pos], 1); break;
+        }
+    }
+    return std::move(buffer);
+}
+
+int main(int argc, char* argv[])
+{
+
+  if (argc != 3)
+  {
+    std::cerr << "Usage: " << argv[0] << " mysql_host port" << std::endl;
+    return 1;
+  }
+  
+  auto hello_api = make_api(
+
+    _plaintext = [] () { return response(_content_type = "text/plain",
+                                         _body = "Hello, World!"); },
+
+    _json = [] () { return response(_content_type = "application/json",
+                                    _body = D(_message = "Hello, World!")); },
+                        
+    _db = [] (rn_orm& orm) {
+      random_number r;
+      orm.find_by_id(1245, r);
+      return response(_content_type = "application/json",
+                      _body = r);
+    },
+
+    _queries = [] (rn_orm& orm, get_parameters& get_params) {
+      int N = atoi(get_params["queries"].c_str());
+      N = std::max(1, std::min(N, 500));
+
+      std::vector<random_number> qs(N);
+      for (int i = 0; i < N; i++)
+        orm.find_by_id(1 + rand() % 9999, qs[i]);
+      return response(_content_type = "application/json",
+                      _body = std::move(qs));
+    },
+
+    _updates = [] (rn_orm& orm, get_parameters& get_params) {
+      int N = atoi(get_params["queries"].c_str());
+      N = std::max(1, std::min(N, 500));
+
+      std::vector<random_number> qs(N);
+      for (int i = 0; i < N; i++)
+      {
+        orm.find_by_id(1 + rand() % 9999, qs[i]);
+        qs[i].randomNumber = 1 + rand() % 9999;
+        orm.update(qs[i]);
+      }
+      return response(_content_type = "application/json",
+                      _body = std::move(qs));
+    },
+  
+    _fortunes = [] (fortune_orm& orm) {
+      std::vector<fortune> table;
+      orm.forall([&] (fortune& f) { table.push_back(f); });
+      table.push_back(fortune(0, "Additional fortune added at request time."));
+
+      std::sort(table.begin(), table.end(),
+                [] (const fortune& a, const fortune& b) { return a.message < b.message; });
+
+      std::stringstream ss;
+
+      ss << "<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>";
+      for(auto& f : table)
+        ss << "<tr><td>" << f.id << "</td><td>" << escape_html_entities(f.message) << "</td></tr>";
+      ss << "</table></body></html>";
+
+      return response(_content_type = "text/html",
+                      _body = ss.str());
+    }
+  
+    ).bind_factories(
+      mysql_connection_factory(argv[1], "benchmarkdbuser", "benchmarkdbpass", "hello_world"),
+      fortune_orm_factory("Fortune"),
+      rn_orm_factory("World")
+      );
+  
+  try
+  {
+
+    // Start the server.
+    sl::mhd_json_serve(hello_api, atoi(argv[2])
+#ifdef TFB_USE_EPOLL
+                       , _linux_epoll, _nthreads = 1000
+#else
+                       , _one_thread_per_connection
+#endif
+      );
+  }
+  catch (std::exception& e)
+  {
+    std::cerr << e.what() << std::endl;
+  }
+  catch (sl::error::error& e)
+  {
+    std::cerr << e.what() << std::endl;
+  }
+}

+ 3 - 0
frameworks/C++/silicon/setup_epoll_mysql.sh

@@ -0,0 +1,3 @@
+#! /bin/bash
+
+$TROOT/build/silicon_epoll_mysql ${DBHOST} 8080 &

+ 3 - 0
frameworks/C++/silicon/setup_tpc_mysql.sh

@@ -0,0 +1,3 @@
+#! /bin/bash
+
+$TROOT/build/silicon_tpc_mysql ${DBHOST} 8080 &

+ 47 - 0
frameworks/C++/silicon/symbols.hh

@@ -0,0 +1,47 @@
+// Generated by iod_generate_symbols.
+#include <iod/symbol.hh>
+#ifndef IOD_SYMBOL_db
+#define IOD_SYMBOL_db
+    iod_define_symbol(db)
+#endif
+
+#ifndef IOD_SYMBOL_fortunes
+#define IOD_SYMBOL_fortunes
+    iod_define_symbol(fortunes)
+#endif
+
+#ifndef IOD_SYMBOL_id
+#define IOD_SYMBOL_id
+    iod_define_symbol(id)
+#endif
+
+#ifndef IOD_SYMBOL_json
+#define IOD_SYMBOL_json
+    iod_define_symbol(json)
+#endif
+
+#ifndef IOD_SYMBOL_message
+#define IOD_SYMBOL_message
+    iod_define_symbol(message)
+#endif
+
+#ifndef IOD_SYMBOL_plaintext
+#define IOD_SYMBOL_plaintext
+    iod_define_symbol(plaintext)
+#endif
+
+#ifndef IOD_SYMBOL_queries
+#define IOD_SYMBOL_queries
+    iod_define_symbol(queries)
+#endif
+
+#ifndef IOD_SYMBOL_randomNumber
+#define IOD_SYMBOL_randomNumber
+    iod_define_symbol(randomNumber)
+#endif
+
+#ifndef IOD_SYMBOL_updates
+#define IOD_SYMBOL_updates
+    iod_define_symbol(updates)
+#endif
+

+ 0 - 0
frameworks/C++/treefrog/benchmark_config → frameworks/C++/treefrog/benchmark_config.json


+ 0 - 0
frameworks/C++/wt/benchmark_config → frameworks/C++/wt/benchmark_config.json


+ 0 - 0
frameworks/C/duda/benchmark_config → frameworks/C/duda/benchmark_config.json


+ 0 - 0
frameworks/C/haywire/benchmark_config → frameworks/C/haywire/benchmark_config.json


+ 0 - 0
frameworks/C/lwan/benchmark_config → frameworks/C/lwan/benchmark_config.json


+ 0 - 0
frameworks/C/onion/benchmark_config → frameworks/C/onion/benchmark_config.json


+ 0 - 0
frameworks/CSharp/HttpListener/benchmark_config → frameworks/CSharp/HttpListener/benchmark_config.json


+ 0 - 0
frameworks/CSharp/aspnet-stripped/benchmark_config → frameworks/CSharp/aspnet-stripped/benchmark_config.json


+ 0 - 0
frameworks/CSharp/aspnet/benchmark_config → frameworks/CSharp/aspnet/benchmark_config.json


+ 0 - 8
frameworks/CSharp/evhttp-sharp/bash_profile.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-export MONO_ROOT=${IROOT}/mono-3.6.0-install
-
-export PATH="$MONO_ROOT/bin:$PATH"
-
-# Needed to find Mono's shared libraries
-export LD_LIBRARY_PATH="$MONO_ROOT/lib"

+ 0 - 0
frameworks/CSharp/evhttp-sharp/benchmark_config → frameworks/CSharp/evhttp-sharp/benchmark_config.json


+ 0 - 28
frameworks/CSharp/evhttp-sharp/setup.py

@@ -1,28 +0,0 @@
-import subprocess
-import sys
-import setup_util
-import os
-
-def start(args, logfile, errfile):
-  if os.name == 'nt':
-    return 1
-  
-  # build
-  subprocess.check_call("rm -rf bin obj", shell=True, cwd="evhttp-sharp", stdout=logfile, stderr=errfile)
-  subprocess.check_call("xbuild /p:Configuration=Release", shell=True, cwd="evhttp-sharp/src", stdout=logfile, stderr=errfile)
-  os.environ['MONO_GC_PARAMS']="nursery-size=64m"
-  subprocess.Popen("mono -O=all $TROOT/src/bin/Release/EvHttpSharpBenchmark.exe 127.0.0.1 8085 " + str(args.max_threads), shell=True, cwd="evhttp-sharp", stdout=logfile, stderr=errfile)
-
-def stop(logfile, errfile):
-  if os.name == 'nt':
-    return 0
-  
-  # stop mono
-  p = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE)
-  out, err = p.communicate()
-  for line in out.splitlines():
-    if 'mono' in line and not 'run-ci' in line and not 'run-tests' in line:
-      pid = int(line.split(None, 2)[1])
-      os.kill(pid, 15)
-
-  return 0

+ 16 - 0
frameworks/CSharp/evhttp-sharp/setup.sh

@@ -0,0 +1,16 @@
+#!/bin/bash
+
+set -e
+
+#mono environment variables
+. ${IROOT}/mono.installed
+
+#extra cleaning
+rm -rf src/bin src/obj
+
+xbuild src/EvHttpSharpBenchmark.csproj /t:Clean
+xbuild src/EvHttpSharpBenchmark.csproj /p:Configuration=Release
+
+export MONO_GC_PARAMS=nursery-size=64m
+
+mono -O=all $TROOT/src/bin/Release/EvHttpSharpBenchmark.exe 127.0.0.1 8085 $MAX_THREADS &

+ 0 - 0
frameworks/CSharp/nancy/benchmark_config → frameworks/CSharp/nancy/benchmark_config.json


+ 0 - 8
frameworks/CSharp/servicestack/bash_profile.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-export MONO_ROOT=${IROOT}/mono-3.6.0-install
-
-export PATH="$MONO_ROOT/bin:$PATH"
-
-# Needed to find Mono's shared libraries
-export LD_LIBRARY_PATH="$MONO_ROOT/lib"

+ 0 - 0
frameworks/CSharp/servicestack/benchmark_config → frameworks/CSharp/servicestack/benchmark_config.json


+ 30 - 0
frameworks/CSharp/servicestack/setup_nginx.sh

@@ -0,0 +1,30 @@
+#!/bin/bash
+
+export NGINX_HOME=${IROOT}/nginx
+
+set -e
+# mono environment variables
+. ${IROOT}/mono.installed
+sed -i 's|localhost|'"$DBHOST"'|g' src/Web.config
+sed -i 's|/usr/local/nginx/|'"${IROOT}"'/nginx/|g' nginx.conf
+
+# extra cleaning
+rm -rf src/bin src/obj
+xbuild src/ServiceStackBenchmark.csproj /t:Clean
+xbuild src/ServiceStackBenchmark.csproj /t:Build
+# one fastcgi instance for each thread
+# load balanced by nginx
+port_start=9001
+port_end=$(($port_start+$MAX_THREADS))
+# nginx
+conf="upstream mono {\n"
+for port in $(seq $port_start $port_end); do
+conf+="\tserver 127.0.0.1:${port};\n"
+done
+conf+="}"
+echo -e $conf > $TROOT/nginx.upstream.conf
+$NGINX_HOME/sbin/nginx -c $TROOT/nginx.conf -g "worker_processes ${MAX_THREADS};"
+# To debug, use --printlog --verbose --loglevels=All
+for port in $(seq $port_start $port_end); do
+	MONO_OPTIONS=--gc=sgen fastcgi-mono-server4 --applications=/:${TROOT}/src --socket=tcp:127.0.0.1:$port &
+done

+ 14 - 0
frameworks/CSharp/servicestack/setup_xsp.sh

@@ -0,0 +1,14 @@
+#!/bin/bash
+
+export NGINX_HOME=${IROOT}/nginx
+
+set -e
+# mono environment variables
+. ${IROOT}/mono.installed
+sed -i 's|localhost|'"$DBHOST"'|g' src/Web.config
+# extra cleaning
+rm -rf src/bin src/obj
+xbuild src/ServiceStackBenchmark.csproj /t:Clean
+xbuild src/ServiceStackBenchmark.csproj /p:Configuration=Release
+# xsp
+MONO_OPTIONS=--gc=sgen xsp4 --port 8080 -nonstop &

+ 12 - 0
frameworks/CSharp/servicestack/src/AppHostConfigHelper.cs

@@ -4,6 +4,8 @@ using System.Configuration;
 using System.Collections.Generic;
 using System.Collections.Generic;
 using System.Threading;
 using System.Threading;
 
 
+using MongoDB.Bson;
+using MongoDB.Bson.Serialization;
 using MongoDB.Driver;
 using MongoDB.Driver;
 
 
 using ServiceStack.ServiceHost;
 using ServiceStack.ServiceHost;
@@ -24,6 +26,16 @@ namespace ServiceStackBenchmark
                 var database = server.GetDatabase("hello_world");
                 var database = server.GetDatabase("hello_world");
                 container.Register<MongoDatabase>(c => database);
                 container.Register<MongoDatabase>(c => database);
 
 
+                BsonClassMap.RegisterClassMap<World>(cm => {
+                    cm.MapProperty(c => c.id);
+                    cm.MapProperty(c => c.randomNumber);
+                });
+
+                BsonClassMap.RegisterClassMap<Fortune>(cm => {
+                    cm.MapProperty(c => c.id);
+                    cm.MapProperty(c => c.message);
+                });
+
                 // Create needed tables in MySql Server if they do not exist
                 // Create needed tables in MySql Server if they do not exist
                 return database.CreateWorldTable() && database.CreateFortuneTable();
                 return database.CreateWorldTable() && database.CreateFortuneTable();
             }
             }

+ 18 - 1
frameworks/CSharp/servicestack/src/DbFactories/PostgreSqlOrmLiteConnectionFactory.cs

@@ -7,6 +7,23 @@ namespace ServiceStackBenchmark
 {
 {
     public class PostgreSqlOrmLiteConnectionFactory : OrmLiteConnectionFactory, IPostgreSqlOrmLiteConnectionFactory
     public class PostgreSqlOrmLiteConnectionFactory : OrmLiteConnectionFactory, IPostgreSqlOrmLiteConnectionFactory
     {
     {
-        public PostgreSqlOrmLiteConnectionFactory(string s) : base(s, PostgreSQLDialectProvider.Instance) { }
+        public PostgreSqlOrmLiteConnectionFactory(string s) : base(s, PostgreSQLDialectProvider.Instance) {
+            this.DialectProvider.NamingStrategy = new LowercaseNamingStrategy();
+        }
     }
     }
+
+    public class LowercaseNamingStrategy : OrmLiteNamingStrategyBase
+    {
+        public override string GetTableName(string name)
+        {
+            return name.ToLower();
+        }
+
+        public override string GetColumnName(string name)
+        {
+            return name.ToLower();
+        }
+
+    }
+
 }
 }

+ 3 - 1
frameworks/CSharp/servicestack/src/Model/Fortune.cs

@@ -8,6 +8,7 @@ using MongoDB.Driver;
 using MongoDB.Driver.Builders;
 using MongoDB.Driver.Builders;
 
 
 using ServiceStack.DataAnnotations;
 using ServiceStack.DataAnnotations;
+using ServiceStack.Html;
 using ServiceStack.OrmLite;
 using ServiceStack.OrmLite;
 using ServiceStack.Text;
 using ServiceStack.Text;
 
 
@@ -103,7 +104,8 @@ namespace ServiceStackBenchmark.Model
         public static string ToHtml(List<Fortune> fortunes)
         public static string ToHtml(List<Fortune> fortunes)
         {
         {
             string page = @"<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>";
             string page = @"<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>";
-            fortunes.ForEach(f => page += @"<tr><td>{0}</td><td>{1}</td></tr>".Fmt(f.id, f.message));
+            HtmlHelper htmlHelper = new HtmlHelper();
+            fortunes.ForEach(f => page += @"<tr><td>{0}</td><td>{1}</td></tr>".Fmt(f.id, htmlHelper.Encode(f.message)));
             page += @"</table></body></html>";
             page += @"</table></body></html>";
             return page;
             return page;
         }
         }

+ 1 - 1
frameworks/CSharp/servicestack/src/ServiceStackBenchmark.csproj

@@ -14,7 +14,7 @@
     <FileAlignment>512</FileAlignment>
     <FileAlignment>512</FileAlignment>
     <TargetFrameworkProfile />
     <TargetFrameworkProfile />
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">.\</SolutionDir>
     <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">.\</SolutionDir>
-    <RestorePackages>true</RestorePackages>
+    <RestorePackages>false</RestorePackages>
   </PropertyGroup>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <PlatformTarget>AnyCPU</PlatformTarget>
     <PlatformTarget>AnyCPU</PlatformTarget>

+ 0 - 0
frameworks/Clojure/compojure/benchmark_config → frameworks/Clojure/compojure/benchmark_config.json


+ 0 - 0
frameworks/Clojure/http-kit/benchmark_config → frameworks/Clojure/http-kit/benchmark_config.json


+ 0 - 0
frameworks/Clojure/luminus/benchmark_config → frameworks/Clojure/luminus/benchmark_config.json


+ 0 - 0
frameworks/Dart/dart-redstone/benchmark_config → frameworks/Dart/dart-redstone/benchmark_config.json


+ 0 - 0
frameworks/Dart/dart-start/benchmark_config → frameworks/Dart/dart-start/benchmark_config.json


+ 0 - 0
frameworks/Dart/dart-stream/benchmark_config → frameworks/Dart/dart-stream/benchmark_config.json


+ 0 - 0
frameworks/Dart/dart/benchmark_config → frameworks/Dart/dart/benchmark_config.json


+ 0 - 0
frameworks/Elixir/WeberFramework/benchmark_config → frameworks/Elixir/WeberFramework/benchmark_config.json


+ 0 - 0
frameworks/Erlang/cowboy/benchmark_config → frameworks/Erlang/cowboy/benchmark_config.json


+ 0 - 0
frameworks/Erlang/elli/benchmark_config → frameworks/Erlang/elli/benchmark_config.json


+ 0 - 0
frameworks/Go/beego/benchmark_config → frameworks/Go/beego/benchmark_config.json


+ 0 - 0
frameworks/Go/falcore/benchmark_config → frameworks/Go/falcore/benchmark_config.json


+ 0 - 0
frameworks/Go/gin/benchmark_config → frameworks/Go/gin/benchmark_config.json


+ 0 - 0
frameworks/Go/go/benchmark_config → frameworks/Go/go/benchmark_config.json


+ 4 - 0
frameworks/Go/go/setup_prefork.sh

@@ -1,5 +1,9 @@
 #!/bin/bash
 #!/bin/bash
 
 
+# Set the root of our go installation
+export GOROOT=${IROOT}/go
+export GOPATH=${TROOT}
+
 sed -i 's|tcp(.*:3306)|tcp('"${DBHOST}"':3306)|g' src/hello/hello.go
 sed -i 's|tcp(.*:3306)|tcp('"${DBHOST}"':3306)|g' src/hello/hello.go
 
 
 # Where to find the go executable
 # Where to find the go executable

+ 24 - 25
frameworks/Go/go/src/hello/hello.go

@@ -32,26 +32,35 @@ type Fortune struct {
 	Message string `json:"message"`
 	Message string `json:"message"`
 }
 }
 
 
+// Databases
 const (
 const (
-	// Database
-	connectionString   = "benchmarkdbuser:benchmarkdbpass@tcp(localhost:3306)/hello_world"
+	// Go 1.4's sql.DB has scalability problem when using (explicitly reused) prepared statement.
+	// https://github.com/golang/go/issues/9484
+	//
+	// Using db.Query() instead of stmt.Query() avoid the issue.
+	// But it makes 3 round trips per query: prepare, execute and close.
+	// `interpolateParams=true` enables client side parameter interpolation.
+	// It reduces round trips without prepared statement.
+	//
+	// Before Go 1.5 is released, we can see real power of Go with this benchmark.
+	// After Go 1.5 is released, we can see prepared statement vs interpolation by comparing
+	// this and another lightweight Go framework.
+	connectionString   = "benchmarkdbuser:benchmarkdbpass@tcp(localhost:3306)/hello_world?interpolateParams=true"
 	worldSelect        = "SELECT id, randomNumber FROM World WHERE id = ?"
 	worldSelect        = "SELECT id, randomNumber FROM World WHERE id = ?"
 	worldUpdate        = "UPDATE World SET randomNumber = ? WHERE id = ?"
 	worldUpdate        = "UPDATE World SET randomNumber = ? WHERE id = ?"
 	fortuneSelect      = "SELECT id, message FROM Fortune;"
 	fortuneSelect      = "SELECT id, message FROM Fortune;"
 	worldRowCount      = 10000
 	worldRowCount      = 10000
 	maxConnectionCount = 256
 	maxConnectionCount = 256
-
-	helloWorldString = "Hello, World!"
 )
 )
 
 
+const helloWorldString = "Hello, World!"
+
 var (
 var (
 	// Templates
 	// Templates
 	tmpl = template.Must(template.ParseFiles("templates/layout.html", "templates/fortune.html"))
 	tmpl = template.Must(template.ParseFiles("templates/layout.html", "templates/fortune.html"))
 
 
 	// Database
 	// Database
-	worldStatement   *sql.Stmt
-	fortuneStatement *sql.Stmt
-	updateStatement  *sql.Stmt
+	db *sql.DB
 
 
 	helloWorldBytes = []byte(helloWorldString)
 	helloWorldBytes = []byte(helloWorldString)
 )
 )
@@ -68,23 +77,12 @@ func main() {
 		listener = doPrefork()
 		listener = doPrefork()
 	}
 	}
 
 
-	db, err := sql.Open("mysql", connectionString)
+	var err error
+	db, err = sql.Open("mysql", connectionString)
 	if err != nil {
 	if err != nil {
 		log.Fatalf("Error opening database: %v", err)
 		log.Fatalf("Error opening database: %v", err)
 	}
 	}
 	db.SetMaxIdleConns(maxConnectionCount)
 	db.SetMaxIdleConns(maxConnectionCount)
-	worldStatement, err = db.Prepare(worldSelect)
-	if err != nil {
-		log.Fatal(err)
-	}
-	fortuneStatement, err = db.Prepare(fortuneSelect)
-	if err != nil {
-		log.Fatal(err)
-	}
-	updateStatement, err = db.Prepare(worldUpdate)
-	if err != nil {
-		log.Fatal(err)
-	}
 
 
 	http.HandleFunc("/db", dbHandler)
 	http.HandleFunc("/db", dbHandler)
 	http.HandleFunc("/queries", queriesHandler)
 	http.HandleFunc("/queries", queriesHandler)
@@ -155,7 +153,7 @@ func jsonHandler(w http.ResponseWriter, r *http.Request) {
 // Test 2: Single database query
 // Test 2: Single database query
 func dbHandler(w http.ResponseWriter, r *http.Request) {
 func dbHandler(w http.ResponseWriter, r *http.Request) {
 	var world World
 	var world World
-	err := worldStatement.QueryRow(rand.Intn(worldRowCount)+1).Scan(&world.Id, &world.RandomNumber)
+	err := db.QueryRow(worldSelect, rand.Intn(worldRowCount)+1).Scan(&world.Id, &world.RandomNumber)
 	if err != nil {
 	if err != nil {
 		log.Fatalf("Error scanning world row: %s", err.Error())
 		log.Fatalf("Error scanning world row: %s", err.Error())
 	}
 	}
@@ -179,7 +177,7 @@ func queriesHandler(w http.ResponseWriter, r *http.Request) {
 
 
 	world := make([]World, n)
 	world := make([]World, n)
 	for i := 0; i < n; i++ {
 	for i := 0; i < n; i++ {
-		err := worldStatement.QueryRow(rand.Intn(worldRowCount)+1).Scan(&world[i].Id, &world[i].RandomNumber)
+		err := db.QueryRow(worldSelect, rand.Intn(worldRowCount)+1).Scan(&world[i].Id, &world[i].RandomNumber)
 		if err != nil {
 		if err != nil {
 			log.Fatalf("Error scanning world row: %s", err.Error())
 			log.Fatalf("Error scanning world row: %s", err.Error())
 		}
 		}
@@ -191,7 +189,7 @@ func queriesHandler(w http.ResponseWriter, r *http.Request) {
 
 
 // Test 4: Fortunes
 // Test 4: Fortunes
 func fortuneHandler(w http.ResponseWriter, r *http.Request) {
 func fortuneHandler(w http.ResponseWriter, r *http.Request) {
-	rows, err := fortuneStatement.Query()
+	rows, err := db.Query(fortuneSelect)
 	if err != nil {
 	if err != nil {
 		log.Fatalf("Error preparing statement: %v", err)
 		log.Fatalf("Error preparing statement: %v", err)
 	}
 	}
@@ -204,6 +202,7 @@ func fortuneHandler(w http.ResponseWriter, r *http.Request) {
 		}
 		}
 		fortunes = append(fortunes, &fortune)
 		fortunes = append(fortunes, &fortune)
 	}
 	}
+	rows.Close()
 	fortunes = append(fortunes, &Fortune{Message: "Additional fortune added at request time."})
 	fortunes = append(fortunes, &Fortune{Message: "Additional fortune added at request time."})
 
 
 	sort.Sort(ByMessage{fortunes})
 	sort.Sort(ByMessage{fortunes})
@@ -230,11 +229,11 @@ func updateHandler(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 	world := make([]World, n)
 	world := make([]World, n)
 	for i := 0; i < n; i++ {
 	for i := 0; i < n; i++ {
-		if err := worldStatement.QueryRow(rand.Intn(worldRowCount)+1).Scan(&world[i].Id, &world[i].RandomNumber); err != nil {
+		if err := db.QueryRow(worldSelect, rand.Intn(worldRowCount)+1).Scan(&world[i].Id, &world[i].RandomNumber); err != nil {
 			log.Fatalf("Error scanning world row: %s", err.Error())
 			log.Fatalf("Error scanning world row: %s", err.Error())
 		}
 		}
 		world[i].RandomNumber = uint16(rand.Intn(worldRowCount) + 1)
 		world[i].RandomNumber = uint16(rand.Intn(worldRowCount) + 1)
-		if _, err := updateStatement.Exec(world[i].RandomNumber, world[i].Id); err != nil {
+		if _, err := db.Exec(worldUpdate, world[i].RandomNumber, world[i].Id); err != nil {
 			log.Fatalf("Error updating world row: %s", err.Error())
 			log.Fatalf("Error updating world row: %s", err.Error())
 		}
 		}
 	}
 	}

+ 0 - 0
frameworks/Go/revel-jet/benchmark_config → frameworks/Go/revel-jet/benchmark_config.json


+ 0 - 0
frameworks/Go/revel-qbs/benchmark_config → frameworks/Go/revel-qbs/benchmark_config.json


+ 0 - 0
frameworks/Go/revel/benchmark_config → frameworks/Go/revel/benchmark_config.json


+ 0 - 0
frameworks/Go/webgo/benchmark_config → frameworks/Go/webgo/benchmark_config.json


+ 0 - 0
frameworks/Groovy/grails/benchmark_config → frameworks/Groovy/grails/benchmark_config.json


+ 0 - 0
frameworks/Haskell/snap/benchmark_config → frameworks/Haskell/snap/benchmark_config.json


+ 0 - 0
frameworks/Haskell/wai/benchmark_config → frameworks/Haskell/wai/benchmark_config.json


+ 0 - 0
frameworks/Haskell/yesod/benchmark_config → frameworks/Haskell/yesod/benchmark_config.json


+ 0 - 0
frameworks/Java/activeweb/benchmark_config → frameworks/Java/activeweb/benchmark_config.json


+ 0 - 0
frameworks/Java/curacao/benchmark_config → frameworks/Java/curacao/benchmark_config.json


+ 0 - 0
frameworks/Java/dropwizard-mongodb/benchmark_config → frameworks/Java/dropwizard-mongodb/benchmark_config.json


+ 0 - 0
frameworks/Java/dropwizard/benchmark_config → frameworks/Java/dropwizard/benchmark_config.json


+ 0 - 0
frameworks/Java/gemini/benchmark_config → frameworks/Java/gemini/benchmark_config.json


+ 0 - 0
frameworks/Java/grizzly-bm/benchmark_config → frameworks/Java/grizzly-bm/benchmark_config.json


+ 0 - 0
frameworks/Java/grizzly-jersey/benchmark_config → frameworks/Java/grizzly-jersey/benchmark_config.json


+ 0 - 0
frameworks/Java/jetty-servlet/benchmark_config → frameworks/Java/jetty-servlet/benchmark_config.json


+ 0 - 0
frameworks/Java/netty/benchmark_config → frameworks/Java/netty/benchmark_config.json


+ 0 - 0
frameworks/Java/ninja-standalone/benchmark_config → frameworks/Java/ninja-standalone/benchmark_config.json


+ 0 - 0
frameworks/Java/play1/benchmark_config → frameworks/Java/play1/benchmark_config.json


+ 0 - 0
frameworks/Java/play1siena/benchmark_config → frameworks/Java/play1siena/benchmark_config.json


+ 1 - 1
frameworks/Java/play1siena/setup.sh

@@ -5,5 +5,5 @@ export RESIN_HOME=${IROOT}/resin-4.0.41
 sed -i 's|jdbc:mysql://.*:3306|jdbc:mysql://'"${DBHOST}"':3306|g' conf/application.conf
 sed -i 's|jdbc:mysql://.*:3306|jdbc:mysql://'"${DBHOST}"':3306|g' conf/application.conf
 
 
 rm -rf $RESIN_HOME/webapps/*
 rm -rf $RESIN_HOME/webapps/*
-$PLAY1_HOME/play war -o $RESIN_HOME/webapps/play1 --exclude benchmark_config
+$PLAY1_HOME/play war -o $RESIN_HOME/webapps/play1 --exclude benchmark_config.json
 $RESIN_HOME/bin/resinctl start
 $RESIN_HOME/bin/resinctl start

+ 1 - 1
frameworks/Java/play2-java/README.md

@@ -2,4 +2,4 @@
 
 
 1. Add new test applications in subdirectories named either `play2-java` or `play2-java-orm`.
 1. Add new test applications in subdirectories named either `play2-java` or `play2-java-orm`.
 2. Edit `frameworks/Java/play2-java/generate_config.py` and add configuration for the new test applications.
 2. Edit `frameworks/Java/play2-java/generate_config.py` and add configuration for the new test applications.
-3. Run `python frameworks/Java/play2-java/generate_config.py` to generate a new `benchmark_config` file and to generate a `setup_*.py` file for your test application.
+3. Run `python frameworks/Java/play2-java/generate_config.py` to generate a new `benchmark_config.json` file and to generate a `setup_*.py` file for your test application.

+ 0 - 0
frameworks/Java/play2-java/benchmark_config → frameworks/Java/play2-java/benchmark_config.json


+ 2 - 2
frameworks/Java/play2-java/generate_config.py

@@ -2,7 +2,7 @@
 
 
 import collections, json, os, textwrap
 import collections, json, os, textwrap
 
 
-# This script generates the benchmark_config and setup_*.py files.
+# This script generates the benchmark_config.json and setup_*.py files.
 # To add new tests, modify the `configurations` and `test_urls` tables.
 # To add new tests, modify the `configurations` and `test_urls` tables.
 
 
 # Each line corresponds to a test application.
 # Each line corresponds to a test application.
@@ -85,7 +85,7 @@ for lang, orm, opsyses, tests in configurations:
       lang_test_configs[lang][test_name] = test_config_json
       lang_test_configs[lang][test_name] = test_config_json
 
 
 for lang, _ in langs.iteritems():
 for lang, _ in langs.iteritems():
-  benchmark_config_path = os.path.join(pathForLang(lang), 'benchmark_config')
+  benchmark_config_path = os.path.join(pathForLang(lang), 'benchmark_config.json')
   print 'Generating', benchmark_config_path
   print 'Generating', benchmark_config_path
   with open(benchmark_config_path, 'w') as f:
   with open(benchmark_config_path, 'w') as f:
     json_str = json.dumps({
     json_str = json.dumps({

+ 0 - 0
frameworks/Java/restexpress/benchmark_config → frameworks/Java/restexpress/benchmark_config.json


+ 0 - 0
frameworks/Java/sabina/benchmark_config → frameworks/Java/sabina/benchmark_config.json


+ 0 - 0
frameworks/Java/servlet/benchmark_config → frameworks/Java/servlet/benchmark_config.json


+ 0 - 0
frameworks/Java/servlet3-cass/benchmark_config → frameworks/Java/servlet3-cass/benchmark_config.json


+ 0 - 0
frameworks/Java/spark/benchmark_config → frameworks/Java/spark/benchmark_config.json


+ 0 - 0
frameworks/Java/spring/benchmark_config → frameworks/Java/spring/benchmark_config.json


+ 0 - 0
frameworks/Java/tapestry/benchmark_config → frameworks/Java/tapestry/benchmark_config.json


+ 0 - 0
frameworks/Java/undertow-edge/benchmark_config → frameworks/Java/undertow-edge/benchmark_config.json


+ 0 - 0
frameworks/Java/undertow/benchmark_config → frameworks/Java/undertow/benchmark_config.json


+ 0 - 0
frameworks/Java/vertx/benchmark_config → frameworks/Java/vertx/benchmark_config.json


+ 0 - 0
frameworks/Java/wicket/benchmark_config → frameworks/Java/wicket/benchmark_config.json


+ 0 - 0
frameworks/Java/wildfly-ee7/benchmark_config → frameworks/Java/wildfly-ee7/benchmark_config.json


+ 0 - 0
frameworks/JavaScript/express/benchmark_config → frameworks/JavaScript/express/benchmark_config.json


+ 0 - 0
frameworks/JavaScript/hapi/benchmark_config → frameworks/JavaScript/hapi/benchmark_config.json


+ 0 - 0
frameworks/JavaScript/nodejs/benchmark_config → frameworks/JavaScript/nodejs/benchmark_config.json


+ 0 - 0
frameworks/JavaScript/ringojs-convenient/benchmark_config → frameworks/JavaScript/ringojs-convenient/benchmark_config.json


+ 0 - 0
frameworks/JavaScript/ringojs/benchmark_config → frameworks/JavaScript/ringojs/benchmark_config.json


+ 0 - 0
frameworks/Lua/lapis/benchmark_config → frameworks/Lua/lapis/benchmark_config.json


+ 0 - 0
frameworks/Lua/openresty/benchmark_config → frameworks/Lua/openresty/benchmark_config.json


+ 0 - 0
frameworks/Nim/jester/benchmark_config → frameworks/Nim/jester/benchmark_config.json


+ 0 - 0
frameworks/Nim/nawak/benchmark_config → frameworks/Nim/nawak/benchmark_config.json


+ 0 - 0
frameworks/PHP/Yii2/benchmark_config → frameworks/PHP/Yii2/benchmark_config.json


+ 0 - 0
frameworks/PHP/cakephp/benchmark_config → frameworks/PHP/cakephp/benchmark_config.json


+ 0 - 0
frameworks/PHP/codeigniter/benchmark_config → frameworks/PHP/codeigniter/benchmark_config.json


+ 0 - 0
frameworks/PHP/fuel/benchmark_config → frameworks/PHP/fuel/benchmark_config.json


+ 0 - 0
frameworks/PHP/hhvm/benchmark_config → frameworks/PHP/hhvm/benchmark_config.json


+ 0 - 0
frameworks/PHP/kohana/benchmark_config → frameworks/PHP/kohana/benchmark_config.json


+ 0 - 0
frameworks/PHP/lithium/benchmark_config → frameworks/PHP/lithium/benchmark_config.json


Some files were not shown because too many files changed in this diff