Browse Source

Merge pull request #1088 from kevmoo/reference

Update Dart benchmark
Mike Smith 11 years ago
parent
commit
a10c6171cd

+ 4 - 4
frameworks/Dart/dart/README.md

@@ -4,12 +4,12 @@ This is the dart portion of a [benchmarking test suite](../) comparing a variety
 
 
 ## Versions
 ## Versions
 
 
-* [Dart SDK version >=1.3.0](http://www.dartlang.org/)
-* [Dart args version 0.11.0+1](http://pub.dartlang.org/packages/args)
+* [Dart SDK version >=1.6.0](http://www.dartlang.org/)
+* [Dart args version 0.12.0+2](http://pub.dartlang.org/packages/args)
 * [Dart crypto version 0.9.0](http://pub.dartlang.org/packages/crypto)
 * [Dart crypto version 0.9.0](http://pub.dartlang.org/packages/crypto)
 * [Dart mustache version 0.1.8](http://pub.dartlang.org/packages/mustache)
 * [Dart mustache version 0.1.8](http://pub.dartlang.org/packages/mustache)
-* [Dart postgresql version 0.2.13](http://pub.dartlang.org/packages/postgresql)
-* [Dart yaml version 0.9.0](http://pub.dartlang.org/packages/yaml)
+* [Dart postgresql version 0.2.14](http://pub.dartlang.org/packages/postgresql)
+* [Dart yaml version 2.0.1+1](http://pub.dartlang.org/packages/yaml)
 
 
 ## Test URLs
 ## Test URLs
 
 

+ 1 - 1
frameworks/Dart/dart/benchmark_config

@@ -17,7 +17,7 @@
       "language": "Dart",
       "language": "Dart",
       "orm": "Raw",
       "orm": "Raw",
       "platform": "Dart",
       "platform": "Dart",
-      "webserver": "nginx",
+      "webserver": "None",
       "os": "Linux",
       "os": "Linux",
       "database_os": "Linux",
       "database_os": "Linux",
       "display_name": "dart",
       "display_name": "dart",

+ 1 - 1
frameworks/Dart/dart/install.sh

@@ -1,3 +1,3 @@
 #!/bin/bash
 #!/bin/bash
 
 
-fw_depends dart nginx
+fw_depends dart

+ 4 - 4
frameworks/Dart/dart/pubspec.yaml

@@ -1,10 +1,10 @@
 name: dartbenchmark
 name: dartbenchmark
 description: A benchmark of dart
 description: A benchmark of dart
 environment:
 environment:
-  sdk: ">=1.3.0 <2.0.0"
+  sdk: '>=1.6.0 <2.0.0'
 dependencies:
 dependencies:
-  args: 0.11.0+1
+  args: 0.12.0+2
   crypto: 0.9.0
   crypto: 0.9.0
   mustache: 0.1.8
   mustache: 0.1.8
-  postgresql: 0.2.13
-  yaml: 0.9.0
+  postgresql: 0.2.14
+  yaml: 2.0.1+1

+ 53 - 45
frameworks/Dart/dart/server.dart

@@ -1,6 +1,7 @@
 import 'dart:async' show Future;
 import 'dart:async' show Future;
-import 'dart:io';
 import 'dart:convert';
 import 'dart:convert';
+import 'dart:io';
+import 'dart:isolate';
 import 'dart:math' show Random;
 import 'dart:math' show Random;
 import 'package:args/args.dart' show ArgParser;
 import 'package:args/args.dart' show ArgParser;
 import 'package:mustache/mustache.dart' as mustache;
 import 'package:mustache/mustache.dart' as mustache;
@@ -17,11 +18,26 @@ main(List<String> args) {
   parser.addOption('address', abbr: 'a', defaultsTo: '0.0.0.0');
   parser.addOption('address', abbr: 'a', defaultsTo: '0.0.0.0');
   parser.addOption('port', abbr: 'p', defaultsTo: '8080');
   parser.addOption('port', abbr: 'p', defaultsTo: '8080');
   parser.addOption('dbconnections', abbr: 'd', defaultsTo: '256');
   parser.addOption('dbconnections', abbr: 'd', defaultsTo: '256');
+  parser.addOption('isolates', abbr: 'i', defaultsTo: '1');
   var arguments = parser.parse(args);
   var arguments = parser.parse(args);
-  _startServer(
-      arguments['address'],
-      int.parse(arguments['port']),
-      int.parse(arguments['dbconnections']));
+  var isolates = int.parse(arguments['isolates']);
+  var dbConnections = int.parse(arguments['dbconnections']) ~/ isolates;
+  ServerSocket.bind(arguments['address'], int.parse(arguments['port']))
+      .then((server) {
+        var ref = server.reference;
+        for (int i = 1; i < isolates; i++) {
+          Isolate.spawn(startInIsolate, [ref, dbConnections]);
+        }
+        _startServer(server, dbConnections);
+      });
+}
+
+void startInIsolate(args) {
+  var ref = args[0];
+  var dbConnections = args[1];
+  ref.create().then((server) {
+    _startServer(server, dbConnections);
+  });
 }
 }
 
 
 /// The entity used in the database query and update tests.
 /// The entity used in the database query and update tests.
@@ -51,15 +67,6 @@ const _WORLD_TABLE_SIZE = 10000;
 /// A random number generator.
 /// A random number generator.
 final _RANDOM = new Random();
 final _RANDOM = new Random();
 
 
-/// The 'text/html; charset=utf-8' content type.
-final _TYPE_HTML = new ContentType('text', 'html', charset: 'utf-8');
-
-/// The 'application/json' content type.
-final _TYPE_JSON = new ContentType('application', 'json');
-
-/// The 'text/html; charset=utf-8' content type.
-final _TYPE_TEXT = new ContentType('text', 'plain', charset: 'utf-8');
-
 /// The PostgreSQL connection pool used by all the tests that require database
 /// The PostgreSQL connection pool used by all the tests that require database
 /// connectivity.
 /// connectivity.
 var _connectionPool;
 var _connectionPool;
@@ -70,7 +77,7 @@ var _fortunesTemplate;
 /// Starts a benchmark server, which listens for connections from
 /// Starts a benchmark server, which listens for connections from
 /// '[address] : [port]' and maintains [dbConnections] connections to the
 /// '[address] : [port]' and maintains [dbConnections] connections to the
 /// database.
 /// database.
-_startServer(address, port, dbConnections) {
+_startServer(serverSocket, dbConnections) {
   Future.wait([
   Future.wait([
     new File('postgresql.yaml').readAsString().then((config) {
     new File('postgresql.yaml').readAsString().then((config) {
       _connectionPool = new pgpool.Pool(
       _connectionPool = new pgpool.Pool(
@@ -83,33 +90,33 @@ _startServer(address, port, dbConnections) {
       _fortunesTemplate = mustache.parse(template);
       _fortunesTemplate = mustache.parse(template);
     })
     })
   ]).then((_) {
   ]).then((_) {
-    HttpServer.bind(address, port).then((server) {
-      server.serverHeader = 'dart';
-      server.listen((request) {
-        switch (request.uri.path) {
-          case '/json':
-            _jsonTest(request);
-            break;
-          case '/db':
-            _dbTest(request);
-            break;
-          case '/queries':
-            _queriesTest(request);
-            break;
-          case '/fortunes':
-            _fortunesTest(request);
-            break;
-          case '/updates':
-            _updatesTest(request);
-            break;
-          case '/plaintext':
-            _plaintextTest(request);
-            break;
-          default:
-            _sendResponse(request, HttpStatus.NOT_FOUND);
-            break;
-        }
-      });
+    var server = new HttpServer.listenOn(serverSocket);
+    server.defaultResponseHeaders.clear();
+    server.serverHeader = 'dart';
+    server.listen((request) {
+      switch (request.uri.path) {
+        case '/json':
+          _jsonTest(request);
+          break;
+        case '/db':
+          _dbTest(request);
+          break;
+        case '/queries':
+          _queriesTest(request);
+          break;
+        case '/fortunes':
+          _fortunesTest(request);
+          break;
+        case '/updates':
+          _updatesTest(request);
+          break;
+        case '/plaintext':
+          _plaintextTest(request);
+          break;
+        default:
+          _sendResponse(request, HttpStatus.NOT_FOUND);
+          break;
+      }
     });
     });
   });
   });
 }
 }
@@ -140,17 +147,18 @@ _sendResponse(request, statusCode, [ type, response ]) {
 
 
 /// Completes the given [request] by writing the [response] as HTML.
 /// Completes the given [request] by writing the [response] as HTML.
 _sendHtml(request, response) {
 _sendHtml(request, response) {
-  _sendResponse(request, HttpStatus.OK, _TYPE_HTML, response);
+  _sendResponse(request, HttpStatus.OK, ContentType.HTML, response);
 }
 }
 
 
 /// Completes the given [request] by writing the [response] as JSON.
 /// Completes the given [request] by writing the [response] as JSON.
 _sendJson(request, response) {
 _sendJson(request, response) {
-  _sendResponse(request, HttpStatus.OK, _TYPE_JSON, JSON.encode(response));
+  _sendResponse(
+      request, HttpStatus.OK, ContentType.JSON, JSON.encode(response));
 }
 }
 
 
 /// Completes the given [request] by writing the [response] as plain text.
 /// Completes the given [request] by writing the [response] as plain text.
 _sendText(request, response) {
 _sendText(request, response) {
-  _sendResponse(request, HttpStatus.OK, _TYPE_TEXT, response);
+  _sendResponse(request, HttpStatus.OK, ContentType.TEXT, response);
 }
 }
 
 
 /// Responds with the JSON test to the [request].
 /// Responds with the JSON test to the [request].

+ 1 - 44
frameworks/Dart/dart/setup.py

@@ -13,55 +13,12 @@ def start(args, logfile, errfile):
     #
     #
     # start dart servers
     # start dart servers
     #
     #
-    for port in range(9001, 9001 + args.max_threads):
-      subprocess.Popen('dart server.dart -a 127.0.0.1 -p ' + str(port) + ' -d ' + str(args.max_concurrency / args.max_threads), shell=True, cwd='dart', stderr=errfile, stdout=logfile)
-    #
-    # create nginx configuration
-    #
-    conf = []
-    conf.append('worker_processes ' + str(args.max_threads) + ';')
-    conf.append('error_log stderr error;')
-    conf.append('events {')
-    conf.append('    worker_connections 1024;')
-    conf.append('}')
-    conf.append('http {')
-    conf.append('    access_log off;')
-    conf.append('    include /usr/local/nginx/conf/mime.types;')
-    conf.append('    default_type application/octet-stream;')
-    conf.append('    sendfile on;')
-    conf.append('    upstream dart_cluster {')
-    for port in range(9001, 9001 + args.max_threads):
-      conf.append('        server 127.0.0.1:' + str(port) + ';')
-    conf.append('        keepalive ' + str(args.max_concurrency / args.max_threads) + ';')
-    conf.append('    }')
-    conf.append('    server {')
-    conf.append('        listen 8080;')
-    conf.append('        location / {')
-    conf.append('            proxy_pass http://dart_cluster;')
-    conf.append('            proxy_http_version 1.1;')
-    conf.append('            proxy_set_header Connection "";')
-    conf.append('        }')
-    conf.append('    }')
-    conf.append('}')
-    #
-    # write nginx configuration to disk
-    #
-    with open('dart/nginx.conf', 'w') as f:
-      f.write('\n'.join(conf))
-    #
-    # start nginx
-    #
-    subprocess.Popen('sudo /usr/local/nginx/sbin/nginx -c $TROOT/nginx.conf', shell=True, cwd='dart', stderr=errfile, stdout=logfile);
+    subprocess.Popen('dart server.dart -a 0.0.0.0 -p 8080 -d ' + str(args.max_concurrency) + ' -i ' + str(args.max_threads), shell=True, cwd='dart', stderr=errfile, stdout=logfile)
     return 0
     return 0
   except subprocess.CalledProcessError:
   except subprocess.CalledProcessError:
     return 1
     return 1
 
 
 def stop(logfile, errfile):
 def stop(logfile, errfile):
-  #
-  # stop nginx
-  #
-  subprocess.check_call('sudo /usr/local/nginx/sbin/nginx -c $TROOT/nginx.conf -s stop', shell=True, cwd='dart', stderr=errfile, stdout=logfile)
-  os.remove('dart/nginx.conf')
   #
   #
   # stop dart servers
   # stop dart servers
   #
   #