[CalendarServer-changes] [6140] CalendarServer/trunk/contrib/performance

source_changes at macosforge.org source_changes at macosforge.org
Thu Aug 19 17:58:45 PDT 2010


Revision: 6140
          http://trac.macosforge.org/projects/calendarserver/changeset/6140
Author:   exarkun at twistedmatrix.com
Date:     2010-08-19 17:58:45 -0700 (Thu, 19 Aug 2010)
Log Message:
-----------
parameterize the benchmark to run; move the smart pid detection to the benchmark code

Modified Paths:
--------------
    CalendarServer/trunk/contrib/performance/benchmark.py
    CalendarServer/trunk/contrib/performance/sqlwatch.py

Modified: CalendarServer/trunk/contrib/performance/benchmark.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmark.py	2010-08-19 22:47:01 UTC (rev 6139)
+++ CalendarServer/trunk/contrib/performance/benchmark.py	2010-08-20 00:58:45 UTC (rev 6140)
@@ -1,4 +1,4 @@
-import sys
+import sys, os
 from os.path import dirname
 
 from signal import SIGINT
@@ -7,6 +7,7 @@
 from datetime import datetime
 from StringIO import StringIO
 
+from twisted.python.reflect import namedAny
 from twisted.internet.protocol import ProcessProtocol
 from twisted.internet.defer import (
     Deferred, inlineCallbacks, gatherResults)
@@ -64,6 +65,17 @@
             self.started.errback(RuntimeError("Exited too soon"))
 
 
+def instancePIDs(directory):
+    pids = []
+    for pidfile in os.listdir(directory):
+        if pidfile.startswith('caldav-instance-'):
+            pidpath = os.path.join(directory, pidfile)
+            pidtext = file(pidpath).read()
+            pid = int(pidtext)
+            pids.append(pid)
+    return pids
+
+
 class DTraceCollector(object):
     def __init__(self, script, pids):
         self._dScript = script
@@ -194,27 +206,24 @@
 
 
 @inlineCallbacks
-def benchmark(argv):
+def benchmark(directory, name, measure):
     # Figure out which pids we are benchmarking.
-    pids = map(int, argv)
+    pids = instancePIDs(directory)
 
-    parameters = [1, 10, 100]
-    stuff = [
-        ('vfreebusy', vfreebusy.measure, parameters),
-        ]
+    parameters = [1, 10, 20]
+    samples = 5
 
     statistics = {}
 
-    for stat, survey, parameter in stuff:
-        print 'Surveying', stat
-        statistics[stat] = {}
-        for p in parameter:
-            print 'Parameter at', p
-            dtrace = DTraceCollector("io_measure.d", pids)
-            data = yield survey(dtrace, p, 100)
-            statistics[stat][p] = data
+    statistics[name] = {}
+    for p in parameters:
+        print 'Parameter at', p
+        dtrace = DTraceCollector("io_measure.d", pids)
+        data = yield measure(dtrace, p, samples)
+        statistics[name][p] = data
 
-    fObj = file(datetime.now().isoformat(), 'w')
+    fObj = file(
+        '%s-%s' % (name, datetime.now().isoformat()), 'w')
     dump(statistics, fObj, 2)
     fObj.close()
 
@@ -223,7 +232,8 @@
     from twisted.python.log import err
     from twisted.python.failure import startDebugMode
     startDebugMode()
-    d = benchmark(sys.argv[1:])
+    d = benchmark(
+        sys.argv[1], sys.argv[2], namedAny(sys.argv[2]).measure)
     d.addErrback(err)
     d.addCallback(lambda ign: reactor.stop())
     reactor.run()

Modified: CalendarServer/trunk/contrib/performance/sqlwatch.py
===================================================================
--- CalendarServer/trunk/contrib/performance/sqlwatch.py	2010-08-19 22:47:01 UTC (rev 6139)
+++ CalendarServer/trunk/contrib/performance/sqlwatch.py	2010-08-20 00:58:45 UTC (rev 6140)
@@ -7,7 +7,7 @@
 from twisted.internet.defer import Deferred, inlineCallbacks
 from twisted.internet import reactor
 
-from benchmark import DTraceCollector
+from benchmark import DTraceCollector, instancePIDs
 
 
 class Stop(Exception):
@@ -34,8 +34,9 @@
 
 
 @inlineCallbacks
-def collect(pids):
+def collect(directory):
     while True:
+        pids = instancePIDs(directory)
         dtrace = DTraceCollector("sql_measure.d", pids)
         print 'Starting'
         yield dtrace.start()
@@ -56,15 +57,7 @@
 def main():
     from twisted.python.failure import startDebugMode
     startDebugMode()
-
-    pids = []
-    for pidfile in os.listdir(sys.argv[1]):
-        if pidfile.startswith('caldav-instance-'):
-            pidpath = os.path.join(sys.argv[1], pidfile)
-            pidtext = file(pidpath).read()
-            pid = int(pidtext)
-            pids.append(pid)
-    d = collect(pids)
+    d = collect(sys.argv[1])
     d.addErrback(err, "Problem collecting SQL")
     d.addBoth(lambda ign: reactor.stop())
     reactor.run(installSignalHandlers=False)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100819/5ddadfcd/attachment-0001.html>


More information about the calendarserver-changes mailing list