misc: Bail out of DVFS dot if we cannot resolve the domains
authorSascha Bischoff <sascha.bischoff@arm.com>
Wed, 6 Apr 2016 16:55:17 +0000 (17:55 +0100)
committerSascha Bischoff <sascha.bischoff@arm.com>
Wed, 6 Apr 2016 16:55:17 +0000 (17:55 +0100)
This changeset updates the dot output to bail out if it is unable to
resolve the voltage or clock domains (which will cause it to raise an
AttributeError). Additionally, the DVFS dot output is disabled by
default for speed purposes.

Minor fixup for 0aeca8f.

src/python/m5/main.py
src/python/m5/simulate.py
src/python/m5/util/dot_writer.py

index ea2a06e9e62e18b95f9ec9e41501380603582b19..36d3d7d35c52d7cb069a6ed5d666e9fa130e7afd 100644 (file)
@@ -91,7 +91,7 @@ def parse_options():
         help="Create JSON output of the configuration [Default: %default]")
     option("--dot-config", metavar="FILE", default="config.dot",
         help="Create DOT & pdf outputs of the configuration [Default: %default]")
-    option("--dot-dvfs-config", metavar="FILE", default="config_dvfs.dot",
+    option("--dot-dvfs-config", metavar="FILE", default=None,
         help="Create DOT & pdf outputs of the DVFS configuration" + \
              " [Default: %default]")
 
index 1d7ebeb9da6fd3d7c380348f202627d3322f824d..b3ae367ba9a706fcb4b2858c3139a4da1cf54b9f 100644 (file)
@@ -129,7 +129,8 @@ def instantiate(ckpt_dir=None):
     # We want to generate the DVFS diagram for the system. This can only be
     # done once all of the CPP objects have been created and initialised so
     # that we are able to figure out which object belongs to which domain.
-    do_dvfs_dot(root, options.outdir, options.dot_dvfs_config)
+    if options.dot_dvfs_config:
+        do_dvfs_dot(root, options.outdir, options.dot_dvfs_config)
 
     # We're done registering statistics.  Enable the stats package now.
     stats.enable()
index f0ad15adf7da25ba722c7c3dae613e1490484cc2..501af5174ef0fd341ba7c785df3911e1730c5fe1 100644 (file)
@@ -310,7 +310,7 @@ def dot_create_dvfs_nodes(simNode, callgraph, domain=None):
                     except AttributeError:
                         # Just re-use the domain from above
                         c_dom = domain
-                        c_dom.__getattr__('voltage_domain')
+                        v_dom = c_dom.__getattr__('voltage_domain')
                         pass
 
                     if c_dom == domain or c_dom == None:
@@ -329,7 +329,7 @@ def dot_create_dvfs_nodes(simNode, callgraph, domain=None):
                 except AttributeError:
                     # Just re-use the domain from above
                     c_dom = domain
-                    c_dom.__getattr__('voltage_domain')
+                    v_dom = c_dom.__getattr__('voltage_domain')
                     pass
 
                 if c_dom == domain or c_dom == None:
@@ -370,11 +370,19 @@ def do_dot(root, outdir, dotFilename):
 def do_dvfs_dot(root, outdir, dotFilename):
     if not pydot:
         return
-    dvfsgraph = pydot.Dot(graph_type='digraph', ranksep='1.3')
-    dot_create_dvfs_nodes(root, dvfsgraph)
-    dot_create_edges(root, dvfsgraph)
-    dot_filename = os.path.join(outdir, dotFilename)
-    dvfsgraph.write(dot_filename)
+
+    # There is a chance that we are unable to resolve the clock or
+    # voltage domains. If so, we fail silently.
+    try:
+        dvfsgraph = pydot.Dot(graph_type='digraph', ranksep='1.3')
+        dot_create_dvfs_nodes(root, dvfsgraph)
+        dot_create_edges(root, dvfsgraph)
+        dot_filename = os.path.join(outdir, dotFilename)
+        dvfsgraph.write(dot_filename)
+    except:
+        warn("Failed to generate dot graph for DVFS domains")
+        return
+
     try:
         # dot crashes if the figure is extremely wide.
         # So avoid terminating simulation unnecessarily