fs_power.py revision 13774
111973Sandreas.sandberg@arm.com# Copyright (c) 2017 ARM Limited 211973Sandreas.sandberg@arm.com# All rights reserved. 311973Sandreas.sandberg@arm.com# 411973Sandreas.sandberg@arm.com# The license below extends only to copyright in the software and shall 511973Sandreas.sandberg@arm.com# not be construed as granting a license to any other intellectual 611973Sandreas.sandberg@arm.com# property including but not limited to intellectual property relating 711973Sandreas.sandberg@arm.com# to a hardware implementation of the functionality of the software 811973Sandreas.sandberg@arm.com# licensed hereunder. You may use the software subject to the license 911973Sandreas.sandberg@arm.com# terms below provided that you ensure that this notice is replicated 1011973Sandreas.sandberg@arm.com# unmodified and in its entirety in all distributions of the software, 1111973Sandreas.sandberg@arm.com# modified or unmodified, in source code or in binary form. 1211973Sandreas.sandberg@arm.com# 1311973Sandreas.sandberg@arm.com# Redistribution and use in source and binary forms, with or without 1411973Sandreas.sandberg@arm.com# modification, are permitted provided that the following conditions are 1511973Sandreas.sandberg@arm.com# met: redistributions of source code must retain the above copyright 1611973Sandreas.sandberg@arm.com# notice, this list of conditions and the following disclaimer; 1711973Sandreas.sandberg@arm.com# redistributions in binary form must reproduce the above copyright 1811973Sandreas.sandberg@arm.com# notice, this list of conditions and the following disclaimer in the 1911973Sandreas.sandberg@arm.com# documentation and/or other materials provided with the distribution; 2011973Sandreas.sandberg@arm.com# neither the name of the copyright holders nor the names of its 2111973Sandreas.sandberg@arm.com# contributors may be used to endorse or promote products derived from 2211973Sandreas.sandberg@arm.com# this software without specific prior written permission. 2311973Sandreas.sandberg@arm.com# 2411973Sandreas.sandberg@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2511973Sandreas.sandberg@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2611973Sandreas.sandberg@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2711973Sandreas.sandberg@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2811973Sandreas.sandberg@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2911973Sandreas.sandberg@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3011973Sandreas.sandberg@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3111973Sandreas.sandberg@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3211973Sandreas.sandberg@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3311973Sandreas.sandberg@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3411973Sandreas.sandberg@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3511973Sandreas.sandberg@arm.com# 3611973Sandreas.sandberg@arm.com# Authors: Andreas Sandberg 3711973Sandreas.sandberg@arm.com# Stephan Diestelhorst 3811973Sandreas.sandberg@arm.com 3911973Sandreas.sandberg@arm.com# This configuration file extends the example ARM big.LITTLE(tm) 4011973Sandreas.sandberg@arm.com# with example power models. 4111973Sandreas.sandberg@arm.com 4212564Sgabeblack@google.comfrom __future__ import print_function 4313774Sandreas.sandberg@arm.comfrom __future__ import absolute_import 4412564Sgabeblack@google.com 4511973Sandreas.sandberg@arm.comimport argparse 4611973Sandreas.sandberg@arm.comimport os 4711973Sandreas.sandberg@arm.com 4811973Sandreas.sandberg@arm.comimport m5 4911973Sandreas.sandberg@arm.comfrom m5.objects import MathExprPowerModel, PowerModel 5011973Sandreas.sandberg@arm.com 5111973Sandreas.sandberg@arm.comimport fs_bigLITTLE as bL 5211973Sandreas.sandberg@arm.com 5311973Sandreas.sandberg@arm.com 5411973Sandreas.sandberg@arm.comclass CpuPowerOn(MathExprPowerModel): 5511973Sandreas.sandberg@arm.com # 2A per IPC, 3pA per cache miss 5611973Sandreas.sandberg@arm.com # and then convert to Watt 5711973Sandreas.sandberg@arm.com dyn = "voltage * (2 * ipc + " \ 5811973Sandreas.sandberg@arm.com "3 * 0.000000001 * dcache.overall_misses / sim_seconds)" 5911973Sandreas.sandberg@arm.com st = "4 * temp" 6011973Sandreas.sandberg@arm.com 6111973Sandreas.sandberg@arm.comclass CpuPowerOff(MathExprPowerModel): 6211973Sandreas.sandberg@arm.com dyn = "0" 6311973Sandreas.sandberg@arm.com st = "0" 6411973Sandreas.sandberg@arm.com 6511973Sandreas.sandberg@arm.comclass CpuPowerModel(PowerModel): 6611973Sandreas.sandberg@arm.com pm = [ 6711973Sandreas.sandberg@arm.com CpuPowerOn(), # ON 6811973Sandreas.sandberg@arm.com CpuPowerOff(), # CLK_GATED 6911973Sandreas.sandberg@arm.com CpuPowerOff(), # SRAM_RETENTION 7011973Sandreas.sandberg@arm.com CpuPowerOff(), # OFF 7111973Sandreas.sandberg@arm.com ] 7211973Sandreas.sandberg@arm.com 7313022Selhabbalsherif@gmail.comclass L2PowerOn(MathExprPowerModel): 7413022Selhabbalsherif@gmail.com # Example to report l2 Cache overall_accesses 7513022Selhabbalsherif@gmail.com # The estimated power is converted to Watt and will vary based on the size of the cache 7613022Selhabbalsherif@gmail.com dyn = "overall_accesses*0.000018000" 7713022Selhabbalsherif@gmail.com st = "(voltage * 3)/10" 7813022Selhabbalsherif@gmail.com 7913022Selhabbalsherif@gmail.comclass L2PowerOff(MathExprPowerModel): 8013022Selhabbalsherif@gmail.com dyn = "0" 8113022Selhabbalsherif@gmail.com st = "0" 8213022Selhabbalsherif@gmail.com 8313022Selhabbalsherif@gmail.comclass L2PowerModel(PowerModel): 8413022Selhabbalsherif@gmail.com # Choose a power model for every power state 8513022Selhabbalsherif@gmail.com pm = [ 8613022Selhabbalsherif@gmail.com L2PowerOn(), # ON 8713022Selhabbalsherif@gmail.com L2PowerOff(), # CLK_GATED 8813022Selhabbalsherif@gmail.com L2PowerOff(), # SRAM_RETENTION 8913022Selhabbalsherif@gmail.com L2PowerOff(), # OFF 9013022Selhabbalsherif@gmail.com ] 9113022Selhabbalsherif@gmail.com 9211973Sandreas.sandberg@arm.com 9311973Sandreas.sandberg@arm.comdef main(): 9411973Sandreas.sandberg@arm.com parser = argparse.ArgumentParser( 9511973Sandreas.sandberg@arm.com description="Generic ARM big.LITTLE configuration with "\ 9611973Sandreas.sandberg@arm.com "example power models") 9711973Sandreas.sandberg@arm.com bL.addOptions(parser) 9811973Sandreas.sandberg@arm.com options = parser.parse_args() 9911973Sandreas.sandberg@arm.com 10011973Sandreas.sandberg@arm.com if options.cpu_type != "timing": 10111973Sandreas.sandberg@arm.com m5.fatal("The power example script requires 'timing' CPUs.") 10211973Sandreas.sandberg@arm.com 10311973Sandreas.sandberg@arm.com root = bL.build(options) 10411973Sandreas.sandberg@arm.com 10511973Sandreas.sandberg@arm.com # Wire up some example power models to the CPUs 10611973Sandreas.sandberg@arm.com for cpu in root.system.descendants(): 10711973Sandreas.sandberg@arm.com if not isinstance(cpu, m5.objects.BaseCPU): 10811973Sandreas.sandberg@arm.com continue 10911973Sandreas.sandberg@arm.com 11011973Sandreas.sandberg@arm.com cpu.default_p_state = "ON" 11111973Sandreas.sandberg@arm.com cpu.power_model = CpuPowerModel() 11211973Sandreas.sandberg@arm.com 11313022Selhabbalsherif@gmail.com # Example power model for the L2 Cache of the bigCluster 11413022Selhabbalsherif@gmail.com for l2 in root.system.bigCluster.l2.descendants(): 11513022Selhabbalsherif@gmail.com if not isinstance(l2, m5.objects.Cache): 11613022Selhabbalsherif@gmail.com continue 11713022Selhabbalsherif@gmail.com 11813022Selhabbalsherif@gmail.com l2.default_p_state = "ON" 11913022Selhabbalsherif@gmail.com l2.power_model = L2PowerModel() 12013022Selhabbalsherif@gmail.com 12111973Sandreas.sandberg@arm.com bL.instantiate(options) 12211973Sandreas.sandberg@arm.com 12312564Sgabeblack@google.com print("*" * 70) 12412564Sgabeblack@google.com print("WARNING: The power numbers generated by this script are " 12512564Sgabeblack@google.com "examples. They are not representative of any particular " 12612564Sgabeblack@google.com "implementation or process.") 12712564Sgabeblack@google.com print("*" * 70) 12811973Sandreas.sandberg@arm.com 12911973Sandreas.sandberg@arm.com # Dumping stats periodically 13011973Sandreas.sandberg@arm.com m5.stats.periodicStatDump(m5.ticks.fromSeconds(0.1E-3)) 13111973Sandreas.sandberg@arm.com bL.run() 13211973Sandreas.sandberg@arm.com 13311973Sandreas.sandberg@arm.com 13411973Sandreas.sandberg@arm.comif __name__ == "__m5_main__": 13511973Sandreas.sandberg@arm.com main() 136