aboutsummaryrefslogtreecommitdiffstats
path: root/plot.py
diff options
context:
space:
mode:
Diffstat (limited to 'plot.py')
-rwxr-xr-xplot.py135
1 files changed, 123 insertions, 12 deletions
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: