-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtraffGen.py
More file actions
136 lines (112 loc) · 4.09 KB
/
traffGen.py
File metadata and controls
136 lines (112 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
from m5.objects import *
import m5
import argparse
from m5.objects.DRAMInterface import *
from m5.objects.NVMInterface import *
args = argparse.ArgumentParser()
args.add_argument(
"traffic_mode",
type = str,
help = "Traffic type to use"
)
args.add_argument(
"rd_prct",
type=int,
help="Read Percentage",
)
args.add_argument(
"extreme",
type=int,
help="extreme",
)
args.add_argument(
"hit_miss",
type=int,
help="hit_miss",
)
args.add_argument(
"clean_dirty",
type=int,
help="clean_dirty",
)
options = args.parse_args()
system = System()
system.clk_domain = SrcClockDomain()
system.clk_domain.clock = "4GHz"
system.clk_domain.voltage_domain = VoltageDomain()
system.mem_mode = 'timing'
system.generator = PyTrafficGen()
system.mem_ctrl = PolicyManager(range=AddrRange('3GiB'))
system.mem_ctrl.orb_max_size = 128
system.mem_ctrl.assoc = 4
system.mem_ctrl.static_frontend_latency = "10ns"
system.mem_ctrl.static_backend_latency = "10ns"
system.mem_ctrl.loc_mem_policy = 'RambusTagProbOpt'
system.loc_mem_ctrl = MemCtrl()
system.loc_mem_ctrl.dram = TDRAM(range=AddrRange('3GiB'), in_addr_map=False, null=True)
system.loc_mem_ctrl.dram.read_buffer_size = 64
system.loc_mem_ctrl.dram.write_buffer_size = 64
system.loc_mem_ctrl.dram = system.mem_ctrl.loc_mem
system.loc_mem_ctrl.static_frontend_latency = "1ns"
system.loc_mem_ctrl.static_backend_latency = "1ns"
system.loc_mem_ctrl.static_frontend_latency_tc = "0ns"
system.loc_mem_ctrl.static_backend_latency_tc = "0ns"
system.loc_mem_ctrl.consider_oldest_write = True
system.loc_mem_ctrl.oldest_write_age_threshold = 2500000
system.far_mem_ctrl = MemCtrl()
system.far_mem_ctrl.dram = DDR4_2400_16x4(range=AddrRange('3GiB'),in_addr_map=False, null=True)
system.far_mem_ctrl.dram.read_buffer_size = 64
system.far_mem_ctrl.dram.write_buffer_size = 64
system.far_mem_ctrl.static_frontend_latency = "1ns"
system.far_mem_ctrl.static_backend_latency = "1ns"
if options.extreme == 1:
system.mem_ctrl.extreme = True
else :
system.mem_ctrl.extreme = False
if options.hit_miss == 1:
system.mem_ctrl.always_hit = True
else :
system.mem_ctrl.always_hit = False
if options.clean_dirty == 1:
system.mem_ctrl.always_dirty = True
else :
system.mem_ctrl.always_dirty = False
system.mem_ctrl.dram_cache_size = "64MiB"
system.generator.port = system.mem_ctrl.port
system.loc_mem_ctrl.port = system.mem_ctrl.loc_req_port
system.far_mem_ctrl.port = system.mem_ctrl.far_req_port
def createRandomTraffic(tgen):
yield tgen.createRandom(0, # duration
0, # min_addr
AddrRange('128MiB').end, # max_adr
64, # block_size
1000, # min_period
1000, # max_period
options.rd_prct, # rd_perc
268435456) # data_limit
yield tgen.createExit(0)
def createLinearTraffic(tgen):
yield tgen.createLinear(0, # duration
0, # min_addr
AddrRange('3GiB').end, # max_adr
64, # block_size
1000, # min_period
1000, # max_period
options.rd_prct, # rd_perc
104857600) # data_limit
yield tgen.createExit(0)
root = Root(full_system=False, system=system)
m5.instantiate()
if options.traffic_mode == 'linear':
system.generator.start(createLinearTraffic(system.generator))
elif options.traffic_mode == 'random':
system.generator.start(createRandomTraffic(system.generator))
else:
print('Wrong traffic type! Exiting!')
exit()
exit_event = m5.simulate()
if exit_event.getCause() == "cacheIsWarmedup":
print("Caught cacheIsWarmedup exit event!")
m5.stats.reset()
exit_event = m5.simulate()
print(f"Exit reason {exit_event.getCause()}")