gem5是一个计算机模拟器,它可以用来模拟不同类型的计算机系统,以帮助计算机科学家和工程师更好地理解和优化计算机系统的性能。gem5提供了许多统计信息和输出功能,可以帮助用户更好地了解模拟的计算机系统的性能情况。
gem5的统计信息可以通过访问Stats.txt文件来获取。这个文件中包含了gem5模拟过程中产生的各种统计信息,例如计算机系统中每个部件的执行次数、每个指令的执行时间等。用户可以通过分析这些统计信息来评估模拟计算机系统的性能情况。
gem5的输出功能可以通过命令行参数来控制。例如,用户可以使用--debug-flags命令行参数来指定gem5在模拟过程中输出哪些调试信息。例如,使用--debug-flags=Exec、Cache或者--debug-flags=Exec+Cache+Memory等命令行参数,可以让gem5输出有关指令执行、缓存和内存的调试信息。这些调试信息可以帮助用户更好地理解模拟计算机系统的工作原理。
目录
一、运行gem5会生成哪些文件?有什么作用?
二、经常出现的tick是啥?
三、stats.txt中的输出都是啥意思?
四、怎么看SimObjects’ statistics?
(1)以CPU为例:
(2)以存储器为例
五、如何通过比较gem5的输出来判断哪种模型性能更好呢?
一、运行gem5会生成哪些文件?有什么作用?
运行gem5时,会根据配置文件和程序的不同,生成不同的文件。常见的文件包括:
- config.ini:gem5的主配置文件,包含了各种参数和设置,用于定义模拟器如何运行。
- config.json:JSON格式的配置文件,用于覆盖config.ini中的设置。
- stats.txt:存储模拟器运行时的性能统计信息,用于分析和研究系统性能行为。
- system.prv:存储模拟器运行时的指令和事件信息,可以用于进一步分析系统的行为。
- system.pim:存储模拟器运行时的状态和内存信息,可以用于进一步分析系统的行为。
- system.map:存储模拟器运行时的地址映射信息,可以用于进一步分析系统的行为。
- system.ptx:存储模拟器运行时的指令流信息,可以用于进一步分析系统的行为。
这些文件的作用各不相同
二、经常出现的tick是啥?
在gem5中,tick是指模拟器模拟的时间单位。它用于指定模拟器每次迭代执行的时间间隔。这个时间间隔是可以通过配置文件来设定的。例如,如果在config.ini中将tick设定为1ns,那么每次迭代模拟器就会执行1ns的时间。
tick在gem5中扮演着重要的角色,因为它可以用来控制模拟的精度和速度。如果将tick设定的更小,那么模拟器就会更加精确,但同时也会更慢。反之,如果将tick设定的更大,那么模拟器就会更快,但同时也会更不精确。因此,在使用gem5时,需要合理地调整tick的值,以达到最佳的模拟精度和速度。
三、stats.txt中的输出都是啥意思?
---------- Begin Simulation Statistics ----------
simSeconds 0.000057 # Number of seconds simulated (Second)
simTicks 57467000 # Number of ticks simulated (Tick)
finalTick 57467000 # Number of ticks from beginning of simulation (restored from checkpoints and never reset) (Tick)
simFreq 1000000000000 # The number of ticks per simulated second ((Tick/Second))
hostSeconds 0.03 # Real time elapsed on the host (Second)
hostTickRate 2295882330 # The number of ticks simulated per host second (ticks/s) ((Tick/Second))
hostMemory 665792 # Number of bytes of host memory used (Byte)
simInsts 6225 # Number of instructions simulated (Count)
simOps 11204 # Number of ops (including micro ops) simulated (Count)
hostInstRate 247382 # Simulator instruction rate (inst/s) ((Count/Second))
hostOpRate 445086 # Simulator op (including micro ops) rate (op/s) ((Count/Second))
-
simSeconds
表示模拟的秒数。这个值表示模拟的时钟的累计时间。
-
simTicks
表示模拟的时钟滴答数,可以看作时钟周期。滴答(tick)是模拟中使用的最小时间单位。
-
finalTick
表示模拟从开始到结束的时钟滴答数,即总的时钟周期数。注意,这个值不会重置,即使模拟从检查点恢复。
-
simFreq
表示模拟时钟的频率。它表示每秒钟有多少滴答(时钟周期)。
-
hostSeconds
指在宿主机上,表示真实时间中的秒数。这个值表示主机上实际流逝的时间。
-
hostTickRate
指在宿主机上,表示每秒钟模拟的时钟周期数。它反映了模拟的速度。
-
hostMemory
表示模拟器在宿主机上使用了多少字节的内存。
-
simInsts
:指模拟器模拟了多少条指令。指令(instruction)是计算机中执行的最小单位。这个数值越大,表明模拟器的性能越好。
-
simOps
:指模拟器模拟了多少个操作(包括微操作)。这个数值越大,表明模拟器的性能越好。
-
hostInstRate
:指模拟器的指令模拟速率,单位是指令/秒。这个数值越大,表明模拟器的性能越好。
-
hostOpRate
:指模拟器的操作模拟速率(包括微操作),单位是操作/秒。这个数值越大,表明模拟器的性能越好。
四、怎么看SimObjects’ statistics?
(1)以CPU为例:
system.clk_domain.clock 1000 # Clock period in ticks (Tick)
system.clk_domain.voltage_domain.voltage 1 # Voltage in Volts (Volt)
system.cpu.numCycles 57467 # Number of cpu cycles simulated (Cycle)
system.cpu.numWorkItemsStarted 0 # Number of work items this cpu started (Count)
system.cpu.numWorkItemsCompleted 0 # Number of work items this cpu completed (Count)
system.cpu.dcache.demandHits::cpu.data 1941 # number of demand (read+write) hits (Count)
system.cpu.dcache.demandHits::total 1941 # number of demand (read+write) hits (Count)
system.cpu.dcache.overallHits::cpu.data 1941 # number of overall hits (Count)
上面这些输出是一组性能指标,每个指标都对应着一个数字。比如,system.clk_domain.clock
表示时钟周期,它对应的数字是 1000,这意味着时钟的频率是 1000 ticks/second。另一个例子是 system.cpu.dcache.demandHits::cpu.data
,它表示 CPU 数据高速缓存的需求命中次数,它对应的数字是 1941,这意味着在模拟过程中,CPU 数据高速缓存有 1941 次需求命中。用户可以比较不同模型的吞吐量、延迟、命中率等参数来评估模型的好坏。
(2)以存储器为例
system.mem_ctrl.bytesReadWrQ 0 # Total number of bytes read from write queue (Byte)
system.mem_ctrl.bytesReadSys 23168 # Total read bytes from the system interface side (Byte)
system.mem_ctrl.bytesWrittenSys 0 # Total written bytes from the system interface side (Byte)
system.mem_ctrl.avgRdBWSys 403153113.96105593 # Average system read bandwidth in Byte/s ((Byte/Second))
system.mem_ctrl.avgWrBWSys 0.00000000 # Average system write bandwidth in Byte/s ((Byte/Second))
system.mem_ctrl.totGap 57336000 # Total gap between requests (Tick)
system.mem_ctrl.avgGap 158386.74 # Average gap between requests ((Tick/Count))
system.mem_ctrl.requestorReadBytes::cpu.inst 14656 # Per-requestor bytes read from memory (Byte)
system.mem_ctrl.requestorReadBytes::cpu.data 8512 # Per-requestor bytes read from memory (Byte)
system.mem_ctrl.requestorReadRate::cpu.inst 255033323.472601681948 # Per-requestor bytes read from memory rate ((Byte/Second))
system.mem_ctrl.requestorReadRate::cpu.data 148119790.488454252481 # Per-requestor bytes read from memory rate ((Byte/Second))
system.mem_ctrl.requestorReadAccesses::cpu.inst 229 # Per-requestor read serviced memory accesses (Count)
system.mem_ctrl.requestorReadAccesses::cpu.data 133 # Per-requestor read serviced memory accesses (Count)
system.mem_ctrl.requestorReadTotalLat::cpu.inst 6234000 # Per-requestor read total memory access latency (Tick)
system.mem_ctrl.requestorReadTotalLat::cpu.data 4141000 # Per-requestor read total memory access latency (Tick)
system.mem_ctrl.requestorReadAvgLat::cpu.inst 27222.71 # Per-requestor read average memory access latency ((Tick/Count))
system.mem_ctrl.requestorReadAvgLat::cpu.data 31135.34 # Per-requestor read average memory access latency ((Tick/Count))
system.mem_ctrl.dram.bytesRead::cpu.inst 14656 # Number of bytes read from this memory (Byte)
上面这些输出是一组性能指标,每个指标都对应着一个数字。举个例子,system.mem_ctrl.avgRdBWSys
表示系统接口侧读取的平均带宽,它对应的数字是 403153113.96105593,这意味着在模拟过程中,系统接口侧的读取带宽平均为 403153113.96105593 Bytes/second。另一个例子是 system.mem_ctrl.requestorReadAccesses::cpu.data
,它表示 CPU 数据请求方的读取访问次数,它对应的数字是 133,这意味着 CPU 数据请求方在模拟过程中有 133 次读取访问。
五、如何通过比较gem5的输出来判断哪种模型性能更好呢?
gem5的输出可以通过分析统计信息和调试信息来评估模拟计算机系统的性能。用户可以通过比较不同模型的统计信息和调试信息来判断哪种模型的性能更好。
在分析统计信息时,用户可以比较不同模型的吞吐量、延迟、命中率等参数,以评估模型的性能。例如,用户可以通过比较不同模型的吞吐量来评估模型的处理能力;可以通过比较不同模型的延迟来评估模型的响应能力;可以通过比较不同模型的命中率来评估模型的存储能力。在分析调试信息时,用户可以比较不同模型的调度策略、内存管理策略等参数,以评估模型的性能。