diff options
Diffstat (limited to 'gen/mc_generators.py')
| -rw-r--r-- | gen/mc_generators.py | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/gen/mc_generators.py b/gen/mc_generators.py index 8f5bd84..d8c172d 100644 --- a/gen/mc_generators.py +++ b/gen/mc_generators.py | |||
| @@ -243,8 +243,9 @@ TP_TYPE = """#if $type != 'unmanaged' | |||
| 243 | /proc/sys/litmus/color/preempt_cache{0} | 243 | /proc/sys/litmus/color/preempt_cache{0} |
| 244 | #end if""" | 244 | #end if""" |
| 245 | 245 | ||
| 246 | # Always add some pages | 246 | # Now done by experiment.py |
| 247 | TP_ADD = """/proc/sys/litmus/color/add_pages{1}""" | 247 | # # Always add some pages |
| 248 | # TP_ADD = """/proc/sys/litmus/color/add_pages{1}""" | ||
| 248 | 249 | ||
| 249 | # Use special spin for color tasks | 250 | # Use special spin for color tasks |
| 250 | TP_COLOR_BASE = """colorspin -y $t.id -x $t.colorcsv -q $t.wss -l $t.loops """ | 251 | TP_COLOR_BASE = """colorspin -y $t.id -x $t.colorcsv -q $t.wss -l $t.loops """ |
| @@ -253,8 +254,8 @@ TP_COLOR_B = TP_BASE.format("b", TP_COLOR_BASE + "-p $t.cpu ") | |||
| 253 | TP_COLOR_C = TP_BASE.format("c", TP_COLOR_BASE) | 254 | TP_COLOR_C = TP_BASE.format("c", TP_COLOR_BASE) |
| 254 | 255 | ||
| 255 | # Not even sure job splitting is still possible | 256 | # Not even sure job splitting is still possible |
| 256 | TP_CHUNK = """#if $chunk_size > 0 | 257 | TP_CHUNK = """#if $chunk_size_ns > 0 |
| 257 | /proc/sys/litmus/color/chunk_size{$chunk_size} | 258 | /proc/sys/litmus/color/chunk_size{$chunk_size_ns} |
| 258 | #end if""" | 259 | #end if""" |
| 259 | 260 | ||
| 260 | COLOR_TYPES = ['scheduling', 'locking', 'unmanaged'] | 261 | COLOR_TYPES = ['scheduling', 'locking', 'unmanaged'] |
| @@ -264,7 +265,7 @@ class ColorMcGenerator(McGenerator): | |||
| 264 | 265 | ||
| 265 | def __init__(self, params = {}): | 266 | def __init__(self, params = {}): |
| 266 | super(ColorMcGenerator, self).__init__("MC", | 267 | super(ColorMcGenerator, self).__init__("MC", |
| 267 | templates=[TP_ADD, TP_TYPE, TP_CHUNK, TP_COLOR_B, TP_COLOR_C], | 268 | templates=[TP_TYPE, TP_CHUNK, TP_COLOR_B, TP_COLOR_C], |
| 268 | options=self.__make_options(), | 269 | options=self.__make_options(), |
| 269 | params=self.__extend_params(params)) | 270 | params=self.__extend_params(params)) |
| 270 | 271 | ||
| @@ -336,7 +337,7 @@ class ColorMcGenerator(McGenerator): | |||
| 336 | 'System colors (cache size / ways).'), | 337 | 'System colors (cache size / ways).'), |
| 337 | GenOption('page_size', int, self.cache.page, | 338 | GenOption('page_size', int, self.cache.page, |
| 338 | 'System page size.'), | 339 | 'System page size.'), |
| 339 | GenOption('wss', [float, int], .5, | 340 | GenOption('wss', [float, int], .25, |
| 340 | 'Task working set sizes. Can be expressed as a fraction ' + | 341 | 'Task working set sizes. Can be expressed as a fraction ' + |
| 341 | 'of the cache.')] | 342 | 'of the cache.')] |
| 342 | 343 | ||
| @@ -359,7 +360,8 @@ class ColorMcGenerator(McGenerator): | |||
| 359 | if pages > cache_pages: | 360 | if pages > cache_pages: |
| 360 | raise Exception('WSS (%d) larger than the cache!' % (wss)) | 361 | raise Exception('WSS (%d) larger than the cache!' % (wss)) |
| 361 | 362 | ||
| 362 | return pages | 363 | # Divide in half for HRT, SRT divide |
| 364 | return pages / 2 | ||
| 363 | 365 | ||
| 364 | 366 | ||
| 365 | def __make_csv(self, task): | 367 | def __make_csv(self, task): |
| @@ -410,11 +412,23 @@ class ColorMcGenerator(McGenerator): | |||
| 410 | hrt_colorer = EvilColorScheme(c, w) | 412 | hrt_colorer = EvilColorScheme(c, w) |
| 411 | srt_colorer = hrt_colorer | 413 | srt_colorer = hrt_colorer |
| 412 | else: | 414 | else: |
| 415 | # Divide cache between hrt and srt | ||
| 416 | c /= 2 | ||
| 413 | srt_colorer = RandomColorScheme(c, w) | 417 | srt_colorer = RandomColorScheme(c, w) |
| 414 | hrt_colorer = BlockColorScheme(c, w, way_first=True) | 418 | hrt_colorer = BlockColorScheme(c, w, way_first=True) |
| 415 | 419 | ||
| 416 | hrt_colorer.color(task_system['lvlb'], pages_needed) | 420 | hrt_colorer.color(task_system['lvlb'], pages_needed) |
| 417 | srt_colorer.color(task_system['lvlc'], pages_needed) | 421 | srt_colorer.color(task_system['lvlc'], pages_needed) |
| 418 | 422 | ||
| 423 | # This check has saved me a lot of trouble already, leave it in | ||
| 424 | for t in task_system['lvlb'] + task_system['lvlc']: | ||
| 425 | if sum(t.colors.values()) * params['page_size'] < real_wss: | ||
| 426 | raise Exception("Didn't color enough pages for %s" % params) | ||
| 427 | |||
| 428 | if params['type'] != 'unmanaged': | ||
| 429 | # Bump srt into the second half of the cache | ||
| 430 | for t in task_system['lvlc']: | ||
| 431 | t.colors = {colors+c:w for colors, w in t.colors.iteritems()} | ||
| 432 | |||
| 419 | for t in all_tasks: | 433 | for t in all_tasks: |
| 420 | self.__make_csv(t) | 434 | self.__make_csv(t) |
