fs_power.py revision 11973
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
4211973Sandreas.sandberg@arm.comimport argparse
4311973Sandreas.sandberg@arm.comimport os
4411973Sandreas.sandberg@arm.com
4511973Sandreas.sandberg@arm.comimport m5
4611973Sandreas.sandberg@arm.comfrom m5.objects import MathExprPowerModel, PowerModel
4711973Sandreas.sandberg@arm.com
4811973Sandreas.sandberg@arm.comimport fs_bigLITTLE as bL
4911973Sandreas.sandberg@arm.com
5011973Sandreas.sandberg@arm.com
5111973Sandreas.sandberg@arm.comclass CpuPowerOn(MathExprPowerModel):
5211973Sandreas.sandberg@arm.com    # 2A per IPC, 3pA per cache miss
5311973Sandreas.sandberg@arm.com    # and then convert to Watt
5411973Sandreas.sandberg@arm.com    dyn = "voltage * (2 * ipc + " \
5511973Sandreas.sandberg@arm.com            "3 * 0.000000001 * dcache.overall_misses / sim_seconds)"
5611973Sandreas.sandberg@arm.com    st = "4 * temp"
5711973Sandreas.sandberg@arm.com
5811973Sandreas.sandberg@arm.comclass CpuPowerOff(MathExprPowerModel):
5911973Sandreas.sandberg@arm.com    dyn = "0"
6011973Sandreas.sandberg@arm.com    st = "0"
6111973Sandreas.sandberg@arm.com
6211973Sandreas.sandberg@arm.comclass CpuPowerModel(PowerModel):
6311973Sandreas.sandberg@arm.com    pm = [
6411973Sandreas.sandberg@arm.com        CpuPowerOn(), # ON
6511973Sandreas.sandberg@arm.com        CpuPowerOff(), # CLK_GATED
6611973Sandreas.sandberg@arm.com        CpuPowerOff(), # SRAM_RETENTION
6711973Sandreas.sandberg@arm.com        CpuPowerOff(), # OFF
6811973Sandreas.sandberg@arm.com    ]
6911973Sandreas.sandberg@arm.com
7011973Sandreas.sandberg@arm.com
7111973Sandreas.sandberg@arm.comdef main():
7211973Sandreas.sandberg@arm.com    parser = argparse.ArgumentParser(
7311973Sandreas.sandberg@arm.com        description="Generic ARM big.LITTLE configuration with "\
7411973Sandreas.sandberg@arm.com        "example power models")
7511973Sandreas.sandberg@arm.com    bL.addOptions(parser)
7611973Sandreas.sandberg@arm.com    options = parser.parse_args()
7711973Sandreas.sandberg@arm.com
7811973Sandreas.sandberg@arm.com    if options.cpu_type != "timing":
7911973Sandreas.sandberg@arm.com        m5.fatal("The power example script requires 'timing' CPUs.")
8011973Sandreas.sandberg@arm.com
8111973Sandreas.sandberg@arm.com    root = bL.build(options)
8211973Sandreas.sandberg@arm.com
8311973Sandreas.sandberg@arm.com    # Wire up some example power models to the CPUs
8411973Sandreas.sandberg@arm.com    for cpu in root.system.descendants():
8511973Sandreas.sandberg@arm.com        if not isinstance(cpu, m5.objects.BaseCPU):
8611973Sandreas.sandberg@arm.com            continue
8711973Sandreas.sandberg@arm.com
8811973Sandreas.sandberg@arm.com        cpu.default_p_state = "ON"
8911973Sandreas.sandberg@arm.com        cpu.power_model = CpuPowerModel()
9011973Sandreas.sandberg@arm.com
9111973Sandreas.sandberg@arm.com    bL.instantiate(options)
9211973Sandreas.sandberg@arm.com
9311973Sandreas.sandberg@arm.com    print "*" * 70
9411973Sandreas.sandberg@arm.com    print "WARNING: The power numbers generated by this script are " \
9511973Sandreas.sandberg@arm.com        "examples. They are not representative of any particular " \
9611973Sandreas.sandberg@arm.com        "implementation or process."
9711973Sandreas.sandberg@arm.com    print "*" * 70
9811973Sandreas.sandberg@arm.com
9911973Sandreas.sandberg@arm.com    # Dumping stats periodically
10011973Sandreas.sandberg@arm.com    m5.stats.periodicStatDump(m5.ticks.fromSeconds(0.1E-3))
10111973Sandreas.sandberg@arm.com    bL.run()
10211973Sandreas.sandberg@arm.com
10311973Sandreas.sandberg@arm.com
10411973Sandreas.sandberg@arm.comif __name__ == "__m5_main__":
10511973Sandreas.sandberg@arm.com    main()
106