[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