[CalendarServer-changes] [6470] CalendarServer/trunk/contrib/performance
source_changes at macosforge.org
source_changes at macosforge.org
Wed Oct 27 09:22:01 PDT 2010
Revision: 6470
http://trac.macosforge.org/projects/calendarserver/changeset/6470
Author: exarkun at twistedmatrix.com
Date: 2010-10-27 09:21:58 -0700 (Wed, 27 Oct 2010)
Log Message:
-----------
Fixes and improvements to the benchmarking tools
* benchmark.py: handle a particular kind of dtrace output misformatting and report it (so that maybe it can be fixed)
* reupload.sh: script for pushing a pile of local pickled data into a codespeed instance
* sample.sh: use the new massupload script to speed up the upload phase of benchmarking
* massupload, massupload.py: an uploader that sends all stats from a particular run at once, saving the significant cost of pickle loading for each stat
* upload.py: changes to facilitate massupload
Modified Paths:
--------------
CalendarServer/trunk/contrib/performance/benchmark.py
CalendarServer/trunk/contrib/performance/sample.sh
CalendarServer/trunk/contrib/performance/upload.py
Added Paths:
-----------
CalendarServer/trunk/contrib/performance/massupload
CalendarServer/trunk/contrib/performance/massupload.py
CalendarServer/trunk/contrib/performance/reupload.sh
Modified: CalendarServer/trunk/contrib/performance/benchmark.py
===================================================================
--- CalendarServer/trunk/contrib/performance/benchmark.py 2010-10-26 18:23:52 UTC (rev 6469)
+++ CalendarServer/trunk/contrib/performance/benchmark.py 2010-10-27 16:21:58 UTC (rev 6470)
@@ -113,7 +113,12 @@
def _op_EXECUTE(self, cmd, rest):
- which, when = rest.split(None, 1)
+ try:
+ which, when = rest.split(None, 1)
+ except ValueError:
+ print 'Bad EXECUTE line: %r' % (rest,)
+ return
+
if which == 'SQL':
self.sql = when
return
Added: CalendarServer/trunk/contrib/performance/massupload
===================================================================
--- CalendarServer/trunk/contrib/performance/massupload (rev 0)
+++ CalendarServer/trunk/contrib/performance/massupload 2010-10-27 16:21:58 UTC (rev 6470)
@@ -0,0 +1,3 @@
+#!/usr/bin/python
+from massupload import main
+main()
Property changes on: CalendarServer/trunk/contrib/performance/massupload
___________________________________________________________________
Added: svn:executable
+ *
Added: CalendarServer/trunk/contrib/performance/massupload.py
===================================================================
--- CalendarServer/trunk/contrib/performance/massupload.py (rev 0)
+++ CalendarServer/trunk/contrib/performance/massupload.py 2010-10-27 16:21:58 UTC (rev 6470)
@@ -0,0 +1,53 @@
+import sys, pickle
+
+from twisted.internet import reactor
+from twisted.internet.task import coiterate
+from twisted.python.usage import UsageError
+from twisted.python.log import err
+
+from benchlib import select
+from upload import UploadOptions, upload
+
+class MassUploadOptions(UploadOptions):
+ optParameters = [
+ ("benchmarks", None, None, ""),
+ ("parameters", None, None, ""),
+ ("statistics", None, None, "")]
+
+ opt_statistic = None
+
+ def parseArgs(self, filename):
+ self['filename'] = filename
+ UploadOptions.parseArgs(self)
+
+
+def main():
+ options = MassUploadOptions()
+ try:
+ options.parseOptions(sys.argv[1:])
+ except UsageError, e:
+ print e
+ return 1
+
+ fname = options['filename']
+ raw = pickle.load(file(fname))
+
+ def go():
+ for benchmark in options['benchmarks'].split():
+ for param in options['parameters'].split():
+ for statistic in options['statistics'].split():
+ stat, samples = select(
+ raw, benchmark, param, statistic)
+ samples = stat.squash(samples)
+ yield upload(
+ reactor,
+ options['url'], options['project'],
+ options['revision'], options['revision-date'],
+ benchmark, param, statistic,
+ options['backend'], options['environment'],
+ samples)
+
+ d = coiterate(go())
+ d.addErrback(err, "Mass upload failed")
+ reactor.callWhenRunning(d.addCallback, lambda ign: reactor.stop())
+ reactor.run()
Added: CalendarServer/trunk/contrib/performance/reupload.sh
===================================================================
--- CalendarServer/trunk/contrib/performance/reupload.sh (rev 0)
+++ CalendarServer/trunk/contrib/performance/reupload.sh 2010-10-27 16:21:58 UTC (rev 6470)
@@ -0,0 +1,22 @@
+#!/bin/bash -x
+
+BENCHMARKS="event_move event_delete_attendee event_add_attendee event_change_date event_change_summary event_delete vfreebusy event"
+
+for rev in 6446; do
+for f in eighth-try/r$rev-*; do
+ base=`basename $f`
+ revision=${base:1:4}
+ backend=${base:6:10}
+ date="`./svn-committime ~/Projects/CalendarServer/trunk $revision`"
+ for b in $BENCHMARKS; do
+ for p in 1 9 81; do
+ for s in pagein pageout; do
+ ./upload \
+ --url http://localhost:8000/result/add/ \
+ --revision $revision --revision-date "$date" \
+ --environment nmosbuilder --backend $backend --statistic "$f,$b,$p,$s"
+ done
+ done
+ done
+done
+done
Property changes on: CalendarServer/trunk/contrib/performance/reupload.sh
___________________________________________________________________
Added: svn:executable
+ *
Modified: CalendarServer/trunk/contrib/performance/sample.sh
===================================================================
--- CalendarServer/trunk/contrib/performance/sample.sh 2010-10-26 18:23:52 UTC (rev 6469)
+++ CalendarServer/trunk/contrib/performance/sample.sh 2010-10-27 16:21:58 UTC (rev 6470)
@@ -10,7 +10,7 @@
SOURCE=~/Projects/CalendarServer/trunk
NUM_INSTANCES=2
BENCHMARKS="event_move event_delete_attendee event_add_attendee event_change_date event_change_summary event_delete vfreebusy event"
-STATISTICS=(HTTP SQL read write)
+STATISTICS=(HTTP SQL read write pagein pageout)
ADDURL=http://localhost:8000/result/add/
export PYTHONPATH=$PYTHONPATH:$SOURCE/../Twisted
@@ -52,17 +52,13 @@
popd
sudo PYTHONPATH=$PYTHONPATH ./benchmark --label r$REV-$backend --log-directory $LOGS $BENCHMARKS
data=`echo -n r$REV-$backend*`
- for p in 1 9 81; do
- for b in $BENCHMARKS; do
- for stat in "${STATISTICS[@]}"; do
- sudo -v # Bump timestamp again
- ./upload \
- --url $ADDURL --revision $REV \
- --revision-date "$DATE" --environment nmosbuilder \
- --backend $backend --statistic "$data,$b,$p,$stat"
- done
- done
- done
-
+ ./massupload \
+ --url $ADDURL --revision $REV \
+ --revision-date "$DATE" --environment nmosbuilder \
+ --backend $backend \
+ --benchmarks "$BENCHMARKS" \
+ --parameters "1 9 81" \
+ --statistics "${STATISTICS[*]}" \
+ $data
mv $data $RESULTS
done
Modified: CalendarServer/trunk/contrib/performance/upload.py
===================================================================
--- CalendarServer/trunk/contrib/performance/upload.py 2010-10-26 18:23:52 UTC (rev 6469)
+++ CalendarServer/trunk/contrib/performance/upload.py 2010-10-27 16:21:58 UTC (rev 6470)
@@ -39,9 +39,9 @@
-def upload(reactor, url, project, revision, revision_date, benchmark,
- executable, environment, result_value, result_date, std_dev,
- max_value, min_value):
+def _upload(reactor, url, project, revision, revision_date, benchmark,
+ executable, environment, result_value, result_date, std_dev,
+ max_value, min_value):
data = {
'commitid': str(revision),
'revision_date': revision_date,
@@ -70,6 +70,25 @@
return d
+def upload(reactor, url, project, revision, revision_date, benchmark, param, statistic, backend, environment, samples):
+ d = _upload(
+ reactor,
+ url=url,
+ project=project,
+ revision=revision,
+ revision_date=revision_date,
+ benchmark='%s-%s-%s' % (benchmark, param, statistic),
+ executable='%s-backend' % (backend,),
+ environment=environment,
+ result_value=median(samples),
+ result_date=datetime.now(),
+ std_dev=mad(samples), # Not really!
+ max_value=max(samples),
+ min_value=min(samples))
+ d.addErrback(err, "Upload failed")
+ return d
+
+
def main():
options = UploadOptions()
try:
@@ -85,18 +104,10 @@
d = upload(
reactor,
- url=options['url'],
- project=options['project'],
- revision=options['revision'],
- revision_date=options['revision-date'],
- benchmark='%s-%s-%s' % (benchmark, param, statistic),
- executable='%s-backend' % (options['backend'],),
- environment=options['environment'],
- result_value=median(samples),
- result_date=datetime.now(),
- std_dev=mad(samples), # Not really!
- max_value=max(samples),
- min_value=min(samples))
- d.addErrback(err, "Upload failed")
+ options['url'], options['project'], options['revision'],
+ options['revision-date'],
+ benchmark, param, statistic,
+ options['backend'], options['environment'],
+ samples)
reactor.callWhenRunning(d.addCallback, lambda ign: reactor.stop())
reactor.run()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20101027/5882ff2e/attachment.html>
More information about the calendarserver-changes
mailing list