aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2011-06-27 21:29:45 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2011-06-27 21:29:45 -0400
commit1c2e1bffd7fa66ad987d14c29e4b5842c035ae2d (patch)
tree9a02f656fb078a35af29c3328d5875789149cd1e
parent24e73890613bd905487847891379e0ecb32c7434 (diff)
parent68a8a52a44372869404ee0950ddb2c209b25a155 (diff)
Merge branch 'master' into wip-bbb
Conflicts: gnuplot.py
-rwxr-xr-xgnuplot.py4
-rwxr-xr-xplot.py135
-rwxr-xr-xwsched.py1
3 files changed, 128 insertions, 12 deletions
diff --git a/gnuplot.py b/gnuplot.py
index a304809..36ab73c 100755
--- a/gnuplot.py
+++ b/gnuplot.py
@@ -147,6 +147,7 @@ class Plot(object):
147 self.style = {} 147 self.style = {}
148 148
149 self.default_style = None # for plotted curves 149 self.default_style = None # for plotted curves
150 self.line_styles = []
150 151
151 def setup_histogram(self, gap=None, boxwidth=0.9): 152 def setup_histogram(self, gap=None, boxwidth=0.9):
152 self.style['data'] = 'histogram' 153 self.style['data'] = 'histogram'
@@ -232,6 +233,9 @@ class Plot(object):
232 for s in self.style: 233 for s in self.style:
233 g("set style %s %s" % (s, self.style[s])) 234 g("set style %s %s" % (s, self.style[s]))
234 235
236 for ls in self.line_styles:
237 g("set style line %d %s" % (ls[0], ls[1]))
238
235 plots = [c.gnuplot_cmd(self.default_style) for c in self.curves] 239 plots = [c.gnuplot_cmd(self.default_style) for c in self.curves]
236 if plots: 240 if plots:
237 g("plot " + ", ".join(plots)) 241 g("plot " + ", ".join(plots))
diff --git a/plot.py b/plot.py
index 5f0df59..ba67ff2 100755
--- a/plot.py
+++ b/plot.py
@@ -541,12 +541,12 @@ class SchedPlotter(defapp.App):
541 541
542 npsf_comp = [ 542 npsf_comp = [
543 ('NPS-F (idle, delta=1)', 9), 543 ('NPS-F (idle, delta=1)', 9),
544 ('NPS-F (idle, delta=4)', 10),
545 ('NPS-F (load, delta=1)', 7),
546 ('C-NPS-F (idle, delta=1)', 13), 544 ('C-NPS-F (idle, delta=1)', 13),
545 ('NPS-F (idle, delta=4)', 10),
547 ('C-NPS-F (idle, delta=4)', 14), 546 ('C-NPS-F (idle, delta=4)', 14),
548 ('NPS-F (load, delta=4)', 8), 547 ('NPS-F (load, delta=1)', 7),
549 ('C-NPS-F (load, delta=1)', 11), 548 ('C-NPS-F (load, delta=1)', 11),
549 ('NPS-F (load, delta=4)', 8),
550 ('C-NPS-F (load, delta=4)', 12), 550 ('C-NPS-F (load, delta=4)', 12),
551 ] 551 ]
552 552
@@ -594,27 +594,49 @@ class SchedPlotter(defapp.App):
594 xcol = 1 594 xcol = 1
595 p.xlabel = "working set size (WSS)" 595 p.xlabel = "working set size (WSS)"
596 p.ylabel = "weighted schedulability" 596 p.ylabel = "weighted schedulability"
597 p.xticks = (0, 64) 597 if self.options.wide:
598 p.xrange = (-1, 1025) 598 # tail plot WSS > 1024
599 if self.options.alternate: 599 p.xticks = (0, 256)
600 p.xrange = (1023, 3073)
601 elif self.options.alternate:
602 # NPS-F comparison
600 p.xrange = (-1, 257) 603 p.xrange = (-1, 257)
601 p.xticks = (0, 32) 604 p.xticks = (0, 32)
605 else:
606 # regular plot
607 p.xticks = (0, 64)
608 p.xrange = (-1, 1025)
602 else: 609 else:
603 self.err("What kind of semipart experiment is this?") 610 self.err("What kind of semipart experiment is this?")
604 return 611 return
605 612
606 p.curves += [curve(fname=tmpfile, xcol=xcol, ycol=idx, title=t) 613 p.curves += [curve(fname=tmpfile, xcol=xcol, ycol=idx, title=t)
607 for (t, idx) in titles] 614 for (i, (t, idx)) in enumerate(titles)]
608 615
609 p.yrange = (-0.05, 1.05) 616 p.yrange = (-0.05, 1.05)
610 p.yticks = (0, 0.1) 617 p.yticks = (0, 0.1)
611 618
612 #### Styling. 619 #### Styling.
613 620
621
614 if not self.setup_png(p): 622 if not self.setup_png(p):
615 p.rounded_caps = True 623 p.rounded_caps = True
616 p.font = 'Helvetica' 624 p.font = 'Helvetica'
617 625
626 if self.options.paper or self.options.appendix:
627 for i, c in enumerate(p.curves):
628 c.style = "linespoints ls %d" % (i + 1)
629
630 p.line_styles = [
631 (1, "lw 2.5"),
632 (2, "lw 2.5"),
633 (3, "lw 2.5"),
634 (4, "lw 2.5"),
635 (5, 'lw 2.5 lc rgbcolor "#ff910d"'),
636 (6, "lw 2.5"),
637 (7, 'lw 2.5 lc rgbcolor "#000000"'),
638 (8, "lw 2.5"),
639 ]
618 640
619 if self.options.paper: 641 if self.options.paper:
620 p.default_style = 'lines lw 2.5' 642 p.default_style = 'lines lw 2.5'
@@ -623,11 +645,10 @@ class SchedPlotter(defapp.App):
623 p.monochrome = False 645 p.monochrome = False
624 p.dashed_lines = False 646 p.dashed_lines = False
625 if not self.options.alternate: 647 if not self.options.alternate:
626 p.key ='below' 648 p.key ='off'
627 p.size = ('14.5cm', '4cm') 649 p.size = ('8.5cm', '5.5cm')
628 p.yticks = (0, 0.2) 650 p.yticks = (0, 0.1)
629 651 p.key = 'below'
630# p.key = 'below'
631 p.default_style = 'linespoints lw 2.5' 652 p.default_style = 'linespoints lw 2.5'
632 elif self.options.slides: 653 elif self.options.slides:
633 p.dashed_lines = False 654 p.dashed_lines = False
@@ -666,6 +687,95 @@ class SchedPlotter(defapp.App):
666 p.gnuplot_exec() 687 p.gnuplot_exec()
667 688
668 689
690 def plot_mpcp_omlp(self, tmpfile, name, conf):
691 curves = [
692 ('MPCP (virtual spinning)', 5),
693 ('MPCP (suspension-based)', 4),
694 ('OMLP (mutex, c=1)', 6),
695 ]
696
697 p = self.make_plot(name)
698
699 if 'ucap' in conf and 'pacc' in conf:
700 xcol = 1
701 p.xlabel = 'resource probability'
702 p.xrange = (0, 1)
703 tinfo = ' utilization=%s request-probability=%s' % \
704 (conf['ucap'], conf['pacc'])
705 elif 'ucap' in conf and 'pres' in conf:
706 xcol = 2
707 p.xlabel = 'request probability'
708 p.xrange = (0, 0.8)
709 tinfo = ' utilization=%s resource-probability=%s' % \
710 (conf['ucap'], conf['pres'])
711 else:
712 xcol = 3
713 p.xlabel = 'per-processor utilization (prior to blocking accounting)'
714 p.xrange = (0.2, 1)
715 tinfo = ' request-probability=%s resource-probability=%s' % \
716 (conf['pacc'], conf['pres'])
717
718 pinfo = " m=%s" % conf['m']
719
720 p.title = scenario_heading(conf, True) + r'\n' + tinfo + pinfo
721
722 p.ylabel = "ratio of schedulable task sets"
723 p.yrange = (-0.05, 1.05)
724 p.yticks = (0, 0.1)
725 p.xticks = (0, 0.1)
726
727 p.curves += [curve(fname=tmpfile, xcol=xcol, ycol=idx, title=t)
728 for (t, idx) in curves]
729
730 #### Styling.
731
732 if not self.setup_png(p):
733 p.rounded_caps = True
734 p.font = 'Helvetica'
735
736 if self.options.paper:
737 p.default_style = 'lines lw 2.5'
738 p.font_size = '5pt'
739 p.size = ('8.5cm', '5.25cm')
740 p.monochrome = False
741 p.dashed_lines = False
742 if not self.options.alternate:
743 p.key ='off'
744 p.size = ('9cm', '4.0cm')
745 p.yticks = (0, 0.1)
746 p.key = 'bottom left'
747 p.default_style = 'linespoints lw 3.5'
748 elif self.options.slides:
749 p.dashed_lines = False
750 p.monochrome = False
751 p.rounded_caps = True
752 p.default_style = 'lines lw 10'
753 p.key = 'below'
754 elif self.options.appendix:
755 # for the appendix
756 p.font_size = '8'
757 p.size = ('17cm', '9cm')
758 p.key = 'below'
759 p.monochrome = False
760 p.dashed_lines = False
761 p.default_style = 'linespoints lw 3.5'
762 else:
763 p.font_size = '10'
764 p.size = ('20cm', '10cm')
765 p.monochrome = False
766 p.dashed_lines = False
767 p.key = 'below'
768 p.default_style = 'linespoints lw 1'
769
770 if self.options.smooth:
771 p.default_style += " smooth bezier"
772
773 if self.options.save_script:
774 p.gnuplot_save(p.output + '.plot')
775 else:
776 p.gnuplot_exec()
777
778
669 def plot_file(self, datafile): 779 def plot_file(self, datafile):
670 bname = basename(datafile) 780 bname = basename(datafile)
671 name, ext = splitext(bname) 781 name, ext = splitext(bname)
@@ -691,6 +801,7 @@ class SchedPlotter(defapp.App):
691 'rtss09' : self.plot_rtss09_split if self.options.split else self.plot_rtss09, 801 'rtss09' : self.plot_rtss09_split if self.options.split else self.plot_rtss09,
692 'ospert10' : self.plot_ospert10, 802 'ospert10' : self.plot_ospert10,
693 'eurosys11' : self.plot_semipart, 803 'eurosys11' : self.plot_semipart,
804 'emsoft11-part' : self.plot_mpcp_omlp,
694 } 805 }
695 806
696 if self.options.experiment: 807 if self.options.experiment:
diff --git a/wsched.py b/wsched.py
index 8214bf0..4aa2f74 100755
--- a/wsched.py
+++ b/wsched.py
@@ -83,6 +83,7 @@ options = [
83 o(None, '--no-comments', action='store_true', dest='no_comments'), 83 o(None, '--no-comments', action='store_true', dest='no_comments'),
84 o('-w', '--col-width', action='store', type='int', dest='colwidth'), 84 o('-w', '--col-width', action='store', type='int', dest='colwidth'),
85 o(None, '--split', action='store_true', dest='want_split'), 85 o(None, '--split', action='store_true', dest='want_split'),
86 o('-f', '--key-format', action='store', dest='key_fmt'),
86 ] 87 ]
87 88
88defaults = { 89defaults = {