From a00cb68d01ccfa10211f8613f44079f1ed8f6930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89der=20F=2E=20Zulian?= Date: Mon, 3 Sep 2018 17:23:06 +0200 Subject: [PATCH] Elastic traces scripts and gem5 configs fixed. Documentation improved. --- .../configs/dualElasticTraceReplay.dot.pdf | Bin 0 -> 16457 bytes .../gem5/configs/dualElasticTraceReplay.ini | 112 ++++++++++++------ .../configs/singleElasticTraceReplay.dot.pdf | Bin 0 -> 14694 bytes .../gem5/configs/singleElasticTraceReplay.ini | 59 +++++---- .../singleElasticTraceReplayWithL2.dot.pdf | Bin 0 -> 15663 bytes .../singleElasticTraceReplayWithL2.ini | 84 ++++++++----- DRAMSys/gem5/examples/tlm_elastic_slave.py | 11 +- .../examples/tlm_elastic_slave_mc_direct.py | 14 ++- .../examples/tlm_elastic_slave_with_l2.py | 17 +-- README.md | 15 +++ 10 files changed, 208 insertions(+), 104 deletions(-) create mode 100644 DRAMSys/gem5/configs/dualElasticTraceReplay.dot.pdf create mode 100644 DRAMSys/gem5/configs/singleElasticTraceReplay.dot.pdf create mode 100644 DRAMSys/gem5/configs/singleElasticTraceReplayWithL2.dot.pdf diff --git a/DRAMSys/gem5/configs/dualElasticTraceReplay.dot.pdf b/DRAMSys/gem5/configs/dualElasticTraceReplay.dot.pdf new file mode 100644 index 0000000000000000000000000000000000000000..723fe2030570cfa77f4ec1319eca90ad7443c559 GIT binary patch literal 16457 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

wfWg|@sh~m&N4&Z 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 CC_KLa literal 0 HcmV?d00001 diff --git a/DRAMSys/gem5/configs/dualElasticTraceReplay.ini b/DRAMSys/gem5/configs/dualElasticTraceReplay.ini index 4f459d3e..154e7c8d 100644 --- a/DRAMSys/gem5/configs/dualElasticTraceReplay.ini +++ b/DRAMSys/gem5/configs/dualElasticTraceReplay.ini @@ -21,7 +21,7 @@ init_param=0 kernel= kernel_addr_check=true kernel_extras= -load_addr_mask=1099511627775 +load_addr_mask=18446744073709551615 load_offset=0 mem_mode=timing mem_ranges=0:536870911:0:0:0:0 @@ -32,7 +32,7 @@ num_work_ids=16 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= readfile= symbolfile= thermal_components= @@ -60,7 +60,7 @@ children=dcache dstage2_mmu dtb icache interrupts isa istage2_mmu itb tracer checker=Null clk_domain=system.clk_domain cpu_id=0 -dataTraceFile=../../DRAMSys/gem5/etraces/system.cpu.traceListener.stream.data.gz +dataTraceFile=../../DRAMSys/gem5/etraces/system.cpu.traceListener.data.gz default_p_state=UNDEFINED do_checkpoint_insts=true do_quiesce=true @@ -72,7 +72,7 @@ eventq_index=0 freqMultiplier=1.0 function_trace=false function_trace_start=0 -instTraceFile=../../DRAMSys/gem5/etraces/system.cpu.traceListener.stream.inst.gz +instTraceFile=../../DRAMSys/gem5/etraces/system.cpu.traceListener.inst.gz interrupts=system.cpu0.interrupts isa=system.cpu0.isa istage2_mmu=system.cpu0.istage2_mmu @@ -86,7 +86,7 @@ p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 power_gating_on_idle=false -power_model=Null +power_model= profile=0 progressMsgInterval=0 progress_interval=0 @@ -107,7 +107,7 @@ icache_port=system.cpu0.icache.cpu_side [system.cpu0.dcache] type=Cache -children=tags +children=replacement_policy tags addr_ranges=0:18446744073709551615:0:0:0:0 assoc=2 clk_domain=system.clk_domain @@ -122,9 +122,10 @@ mshrs=4 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= prefetch_on_access=false prefetcher=Null +replacement_policy=system.cpu0.dcache.replacement_policy response_latency=2 sequential_access=false size=32768 @@ -132,13 +133,18 @@ system=system tag_latency=2 tags=system.cpu0.dcache.tags tgts_per_mshr=20 +warmup_percentage=0 write_buffers=8 writeback_clean=false cpu_side=system.cpu0.dcache_port mem_side=system.membus1.slave[2] +[system.cpu0.dcache.replacement_policy] +type=LRURP +eventq_index=0 + [system.cpu0.dcache.tags] -type=LRU +type=BaseSetAssoc assoc=2 block_size=64 clk_domain=system.clk_domain @@ -148,10 +154,12 @@ eventq_index=0 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= +replacement_policy=system.cpu0.dcache.replacement_policy sequential_access=false size=32768 tag_latency=2 +warmup_percentage=0 [system.cpu0.dstage2_mmu] type=ArmStage2MMU @@ -180,7 +188,7 @@ num_squash_per_cycle=2 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= sys=system [system.cpu0.dtb] @@ -202,12 +210,12 @@ num_squash_per_cycle=2 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= sys=system [system.cpu0.icache] type=Cache -children=tags +children=replacement_policy tags addr_ranges=0:18446744073709551615:0:0:0:0 assoc=2 clk_domain=system.clk_domain @@ -222,9 +230,10 @@ mshrs=4 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= prefetch_on_access=false prefetcher=Null +replacement_policy=system.cpu0.icache.replacement_policy response_latency=2 sequential_access=false size=32768 @@ -232,13 +241,18 @@ system=system tag_latency=2 tags=system.cpu0.icache.tags tgts_per_mshr=20 +warmup_percentage=0 write_buffers=8 writeback_clean=true cpu_side=system.cpu0.icache_port mem_side=system.membus1.slave[1] +[system.cpu0.icache.replacement_policy] +type=LRURP +eventq_index=0 + [system.cpu0.icache.tags] -type=LRU +type=BaseSetAssoc assoc=2 block_size=64 clk_domain=system.clk_domain @@ -248,10 +262,12 @@ eventq_index=0 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= +replacement_policy=system.cpu0.icache.replacement_policy sequential_access=false size=32768 tag_latency=2 +warmup_percentage=0 [system.cpu0.interrupts] type=ArmInterrupts @@ -280,6 +296,7 @@ id_mmfr0=270536963 id_mmfr1=0 id_mmfr2=19070976 id_mmfr3=34611729 +impdef_nop=false midr=1091551472 pmu=Null system=system @@ -312,7 +329,7 @@ num_squash_per_cycle=2 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= sys=system [system.cpu0.itb] @@ -334,7 +351,7 @@ num_squash_per_cycle=2 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= sys=system [system.cpu0.tracer] @@ -347,7 +364,7 @@ children=dcache dstage2_mmu dtb icache interrupts isa istage2_mmu itb tracer checker=Null clk_domain=system.clk_domain cpu_id=1 -dataTraceFile=../../DRAMSys/gem5/etraces/system.cpu.traceListener.random.data.gz +dataTraceFile=/home/eder/repos/dram.vp.system/DRAMSys/gem5/etraces/system.cpu.traceListener.data.gz default_p_state=UNDEFINED do_checkpoint_insts=true do_quiesce=true @@ -359,7 +376,7 @@ eventq_index=0 freqMultiplier=1.0 function_trace=false function_trace_start=0 -instTraceFile=../../DRAMSys/gem5/etraces/system.cpu.traceListener.random.inst.gz +instTraceFile=/home/eder/repos/dram.vp.system/DRAMSys/gem5/etraces/system.cpu.traceListener.inst.gz interrupts=system.cpu1.interrupts isa=system.cpu1.isa istage2_mmu=system.cpu1.istage2_mmu @@ -373,7 +390,7 @@ p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 power_gating_on_idle=false -power_model=Null +power_model= profile=0 progressMsgInterval=0 progress_interval=0 @@ -394,7 +411,7 @@ icache_port=system.cpu1.icache.cpu_side [system.cpu1.dcache] type=Cache -children=tags +children=replacement_policy tags addr_ranges=0:18446744073709551615:0:0:0:0 assoc=2 clk_domain=system.clk_domain @@ -409,9 +426,10 @@ mshrs=4 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= prefetch_on_access=false prefetcher=Null +replacement_policy=system.cpu1.dcache.replacement_policy response_latency=2 sequential_access=false size=32768 @@ -419,13 +437,18 @@ system=system tag_latency=2 tags=system.cpu1.dcache.tags tgts_per_mshr=20 +warmup_percentage=0 write_buffers=8 writeback_clean=false cpu_side=system.cpu1.dcache_port mem_side=system.membus2.slave[1] +[system.cpu1.dcache.replacement_policy] +type=LRURP +eventq_index=0 + [system.cpu1.dcache.tags] -type=LRU +type=BaseSetAssoc assoc=2 block_size=64 clk_domain=system.clk_domain @@ -435,10 +458,12 @@ eventq_index=0 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= +replacement_policy=system.cpu1.dcache.replacement_policy sequential_access=false size=32768 tag_latency=2 +warmup_percentage=0 [system.cpu1.dstage2_mmu] type=ArmStage2MMU @@ -467,7 +492,7 @@ num_squash_per_cycle=2 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= sys=system [system.cpu1.dtb] @@ -489,12 +514,12 @@ num_squash_per_cycle=2 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= sys=system [system.cpu1.icache] type=Cache -children=tags +children=replacement_policy tags addr_ranges=0:18446744073709551615:0:0:0:0 assoc=2 clk_domain=system.clk_domain @@ -509,9 +534,10 @@ mshrs=4 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= prefetch_on_access=false prefetcher=Null +replacement_policy=system.cpu1.icache.replacement_policy response_latency=2 sequential_access=false size=32768 @@ -519,13 +545,18 @@ system=system tag_latency=2 tags=system.cpu1.icache.tags tgts_per_mshr=20 +warmup_percentage=0 write_buffers=8 writeback_clean=true cpu_side=system.cpu1.icache_port mem_side=system.membus2.slave[0] +[system.cpu1.icache.replacement_policy] +type=LRURP +eventq_index=0 + [system.cpu1.icache.tags] -type=LRU +type=BaseSetAssoc assoc=2 block_size=64 clk_domain=system.clk_domain @@ -535,10 +566,12 @@ eventq_index=0 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= +replacement_policy=system.cpu1.icache.replacement_policy sequential_access=false size=32768 tag_latency=2 +warmup_percentage=0 [system.cpu1.interrupts] type=ArmInterrupts @@ -567,6 +600,7 @@ id_mmfr0=270536963 id_mmfr1=0 id_mmfr2=19070976 id_mmfr3=34611729 +impdef_nop=false midr=1091551472 pmu=Null system=system @@ -599,7 +633,7 @@ num_squash_per_cycle=2 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= sys=system [system.cpu1.itb] @@ -621,7 +655,7 @@ num_squash_per_cycle=2 p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= sys=system [system.cpu1.tracer] @@ -639,7 +673,7 @@ voltage_domain=system.cpu_voltage_domain [system.cpu_voltage_domain] type=VoltageDomain eventq_index=0 -voltage=1.000000 +voltage=1.0 [system.dvfs_handler] type=DVFSHandler @@ -662,7 +696,7 @@ p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 point_of_coherency=true point_of_unification=true -power_model=Null +power_model= response_latency=2 snoop_filter=system.membus1.snoop_filter snoop_response_latency=4 @@ -692,7 +726,7 @@ p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 point_of_coherency=true point_of_unification=true -power_model=Null +power_model= response_latency=2 snoop_filter=system.membus2.snoop_filter snoop_response_latency=4 @@ -724,7 +758,7 @@ null=false p_state_clk_gate_bins=20 p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 -power_model=Null +power_model= range=0:134217727:0:0:0:0 [system.tlm1] @@ -738,7 +772,7 @@ p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 port_data=transactor1 port_type=tlm_slave -power_model=Null +power_model= port=system.membus1.master[0] [system.tlm2] @@ -752,11 +786,11 @@ p_state_clk_gate_max=1000000000000 p_state_clk_gate_min=1000 port_data=transactor2 port_type=tlm_slave -power_model=Null +power_model= port=system.membus2.master[0] [system.voltage_domain] type=VoltageDomain eventq_index=0 -voltage=1.000000 +voltage=1.0 diff --git a/DRAMSys/gem5/configs/singleElasticTraceReplay.dot.pdf b/DRAMSys/gem5/configs/singleElasticTraceReplay.dot.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a11fdf3725e0df3f36383171b4f1d05985826a23 GIT binary patch literal 14694 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