util: updated Streamline flow to support ARM DS-5 v5.17 protocol
The previous flow supported ARM DS-5 v5.13 protocol.
This commit is contained in:
parent
f1cd6b1ba8
commit
6019d73db4
3 changed files with 46 additions and 10 deletions
|
@ -83,7 +83,7 @@ dcache =
|
||||||
|
|
||||||
[PER_L2_STATS]
|
[PER_L2_STATS]
|
||||||
|
|
||||||
l2 =
|
l2_cache =
|
||||||
overall_hits::total
|
overall_hits::total
|
||||||
overall_misses::total
|
overall_misses::total
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
#
|
#
|
||||||
# <dest .apc folder>: Destination .apc folder path
|
# <dest .apc folder>: Destination .apc folder path
|
||||||
#
|
#
|
||||||
# APC project generation based on Gator v12 (DS-5 v5.13)
|
# APC project generation based on Gator v17 (DS-5 v5.17)
|
||||||
# Subsequent versions should be backward compatible
|
# Subsequent versions should be backward compatible
|
||||||
|
|
||||||
import re, sys, os
|
import re, sys, os
|
||||||
|
@ -78,7 +78,7 @@ parser = argparse.ArgumentParser(
|
||||||
|
|
||||||
Visit http://www.gem5.org/Streamline for more details.
|
Visit http://www.gem5.org/Streamline for more details.
|
||||||
|
|
||||||
APC project generation based on Gator v12 (DS-5 v5.13)
|
APC project generation based on Gator v17 (DS-5 v5.17)
|
||||||
Subsequent versions should be backward compatible
|
Subsequent versions should be backward compatible
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
@ -198,8 +198,26 @@ class Event(object):
|
||||||
# - string
|
# - string
|
||||||
############################################################
|
############################################################
|
||||||
|
|
||||||
# variable length packed 4-byte signed value
|
|
||||||
def packed32(x):
|
def packed32(x):
|
||||||
|
ret = []
|
||||||
|
more = True
|
||||||
|
while more:
|
||||||
|
b = x & 0x7f
|
||||||
|
x = x >> 7
|
||||||
|
if (((x == 0) and ((b & 0x40) == 0)) or \
|
||||||
|
((x == -1) and ((b & 0x40) != 0))):
|
||||||
|
more = False
|
||||||
|
else:
|
||||||
|
b = b | 0x80
|
||||||
|
ret.append(b)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
# For historical reasons, 32/64-bit versions of functions are presevered
|
||||||
|
def packed64(x):
|
||||||
|
return packed32(x)
|
||||||
|
|
||||||
|
# variable length packed 4-byte signed value
|
||||||
|
def unsigned_packed32(x):
|
||||||
ret = []
|
ret = []
|
||||||
if ((x & 0xffffff80) == 0):
|
if ((x & 0xffffff80) == 0):
|
||||||
ret.append(x & 0x7f)
|
ret.append(x & 0x7f)
|
||||||
|
@ -224,7 +242,7 @@ def packed32(x):
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
# variable length packed 8-byte signed value
|
# variable length packed 8-byte signed value
|
||||||
def packed64(x):
|
def unsigned_packed64(x):
|
||||||
ret = []
|
ret = []
|
||||||
if ((x & 0xffffffffffffff80) == 0):
|
if ((x & 0xffffffffffffff80) == 0):
|
||||||
ret.append(x & 0x7f)
|
ret.append(x & 0x7f)
|
||||||
|
@ -382,7 +400,11 @@ def addFrameHeader(frame_type, body, core):
|
||||||
# - uptime: packed64
|
# - uptime: packed64
|
||||||
def summaryFrame(timestamp, uptime):
|
def summaryFrame(timestamp, uptime):
|
||||||
frame_type = "Summary"
|
frame_type = "Summary"
|
||||||
body = packed64(timestamp) + packed64(uptime)
|
newline_canary = stringList("1\n2\r\n3\r4\n\r5")
|
||||||
|
monotonic_delta = packed64(0)
|
||||||
|
end_of_attr = stringList("")
|
||||||
|
body = newline_canary + packed64(timestamp) + packed64(uptime)
|
||||||
|
body += monotonic_delta + end_of_attr
|
||||||
ret = addFrameHeader(frame_type, body, 0)
|
ret = addFrameHeader(frame_type, body, 0)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -415,10 +437,23 @@ def threadNameFrame(timestamp, thread_id, name):
|
||||||
|
|
||||||
# Core name message
|
# Core name message
|
||||||
# - name: string
|
# - name: string
|
||||||
def coreNameFrame(name):
|
# - core_id: packed32
|
||||||
|
# - cpuid: packed32
|
||||||
|
def coreNameFrame(name, core_id, cpuid):
|
||||||
frame_type = "Name"
|
frame_type = "Name"
|
||||||
packed_code = packed32(3)
|
packed_code = packed32(3)
|
||||||
body = packed_code + stringList(name)
|
body = packed_code + packed32(core_id) + packed32(cpuid) + stringList(name)
|
||||||
|
ret = addFrameHeader(frame_type, body, 0)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
# IRQ Cookie name message
|
||||||
|
# - cookie: packed32
|
||||||
|
# - name: string
|
||||||
|
# - irq: packed32
|
||||||
|
def irqCookieNameFrame(cookie, name, irq):
|
||||||
|
frame_type = "Name"
|
||||||
|
packed_code = packed32(5)
|
||||||
|
body = packed_code + packed32(cookie) + stringList(name) + packed32(irq)
|
||||||
ret = addFrameHeader(frame_type, body, 0)
|
ret = addFrameHeader(frame_type, body, 0)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -999,7 +1034,8 @@ def doCapturedXML(output_path, stats):
|
||||||
|
|
||||||
xml = ET.Element("captured")
|
xml = ET.Element("captured")
|
||||||
xml.set("version", "1")
|
xml.set("version", "1")
|
||||||
xml.set("protocol", "12")
|
xml.set("protocol", "17")
|
||||||
|
xml.set("backtrace_processing", "none")
|
||||||
|
|
||||||
target = ET.SubElement(xml, "target")
|
target = ET.SubElement(xml, "target")
|
||||||
target.set("name", "gem5")
|
target.set("name", "gem5")
|
||||||
|
|
|
@ -107,7 +107,7 @@ rename_full =
|
||||||
[PER_L2_STATS]
|
[PER_L2_STATS]
|
||||||
# Automatically adapts to how many l2 caches are in the system
|
# Automatically adapts to how many l2 caches are in the system
|
||||||
|
|
||||||
l2 =
|
l2_cache =
|
||||||
overall_hits::total
|
overall_hits::total
|
||||||
overall_misses::total
|
overall_misses::total
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue