stats: Move the swpipl function into the Alpha kernel stats.
authorGabe Black <gabeblack@google.com>
Sat, 26 Aug 2017 01:02:01 +0000 (18:02 -0700)
committerGabe Black <gabeblack@google.com>
Mon, 11 Sep 2017 04:59:01 +0000 (04:59 +0000)
This stat is only incremented by Alpha. Also move the _hwrei into the Alpha
stats object since it's the class that actually sets up and maintains that
value and it probably should have been there all along.

Change-Id: Ibd038a33230c01432c160490926d8e1e55f8ccb0
Reviewed-on: https://gem5-review.googlesource.com/4601
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>

src/arch/alpha/kernel_stats.cc
src/arch/alpha/kernel_stats.hh
src/kern/kernel_stats.cc
src/kern/kernel_stats.hh

index a1ed532d8eb1c6311733dbd178c2815473d380d0..39f460f1cbbe7f07718386ed2e117011c55d619a 100644 (file)
@@ -52,7 +52,8 @@ const char *modestr[] = { "kernel", "user", "idle" };
 
 Statistics::Statistics()
     : ::Kernel::Statistics(),
-      idleProcess((Addr)-1), themode(kernel), lastModeTick(0)
+      idleProcess((Addr)-1), themode(kernel), lastModeTick(0),
+      iplLast(0), iplLastTick(0)
 {
 }
 
@@ -120,6 +121,35 @@ Statistics::regStats(const string &_name)
         .name(name() + ".swap_context")
         .desc("number of times the context was actually changed")
         ;
+
+    _iplCount
+        .init(32)
+        .name(name() + ".ipl_count")
+        .desc("number of times we switched to this ipl")
+        .flags(total | pdf | nozero | nonan)
+        ;
+
+    _iplGood
+        .init(32)
+        .name(name() + ".ipl_good")
+        .desc("number of times we switched to this ipl from a different ipl")
+        .flags(total | pdf | nozero | nonan)
+        ;
+
+    _iplTicks
+        .init(32)
+        .name(name() + ".ipl_ticks")
+        .desc("number of cycles we spent at this ipl")
+        .flags(total | pdf | nozero | nonan)
+        ;
+
+    _iplUsed
+        .name(name() + ".ipl_used")
+        .desc("fraction of swpipl calls that actually changed the ipl")
+        .flags(total | nozero | nonan)
+        ;
+
+    _iplUsed = _iplGood / _iplCount;
 }
 
 void
@@ -183,6 +213,22 @@ Statistics::callpal(int code, ThreadContext *tc)
     _callpal[code]++;
 }
 
+void
+Statistics::swpipl(int ipl)
+{
+    assert(ipl >= 0 && ipl <= 0x1f && "invalid IPL\n");
+
+    _iplCount[ipl]++;
+
+    if (ipl == iplLast)
+        return;
+
+    _iplGood[ipl]++;
+    _iplTicks[iplLast] += curTick() - iplLastTick;
+    iplLastTick = curTick();
+    iplLast = ipl;
+}
+
 void
 Statistics::serialize(CheckpointOut &cp) const
 {
@@ -191,6 +237,8 @@ Statistics::serialize(CheckpointOut &cp) const
     SERIALIZE_SCALAR(exemode);
     SERIALIZE_SCALAR(idleProcess);
     SERIALIZE_SCALAR(lastModeTick);
+    SERIALIZE_SCALAR(iplLast);
+    SERIALIZE_SCALAR(iplLastTick);
 }
 
 void
@@ -202,6 +250,8 @@ Statistics::unserialize(CheckpointIn &cp)
     UNSERIALIZE_SCALAR(idleProcess);
     UNSERIALIZE_SCALAR(lastModeTick);
     themode = (cpu_mode)exemode;
+    UNSERIALIZE_SCALAR(iplLast);
+    UNSERIALIZE_SCALAR(iplLastTick);
 }
 
 } // namespace Kernel
index 3b2b5a0c07fc50f20ffdfb64bab89e44a3f9791d..1bedeb0e635490202bc2c34cad57a77af33fb7db 100644 (file)
@@ -59,7 +59,8 @@ class Statistics : public ::Kernel::Statistics
 
   private:
     Stats::Vector _callpal;
-//    Stats::Vector _faults;
+
+    Stats::Scalar _hwrei;
 
     Stats::Vector _mode;
     Stats::Vector _modeGood;
@@ -68,6 +69,15 @@ class Statistics : public ::Kernel::Statistics
 
     Stats::Scalar _swap_context;
 
+    Stats::Vector _iplCount;
+    Stats::Vector _iplGood;
+    Stats::Vector _iplTicks;
+    Stats::Formula _iplUsed;
+
+  private:
+    int iplLast;
+    Tick iplLastTick;
+
   public:
     Statistics();
 
@@ -78,6 +88,7 @@ class Statistics : public ::Kernel::Statistics
     void context(Addr oldpcbb, Addr newpcbb, ThreadContext *tc);
     void callpal(int code, ThreadContext *tc);
     void hwrei() { _hwrei++; }
+    void swpipl(int ipl);
 
     void setIdleProcess(Addr idle, ThreadContext *tc);
 
index 37677c1fc0e2d8d55ac4f74110b4e8b3ec02d22f..2d1d4fa8456af733ed91fe5a170d6f8c033ca155 100644 (file)
@@ -41,11 +41,6 @@ using namespace Stats;
 
 namespace Kernel {
 
-Statistics::Statistics()
-    : iplLast(0), iplLastTick(0)
-{
-}
-
 void
 Statistics::regStats(const string &_name)
 {
@@ -60,65 +55,6 @@ Statistics::regStats(const string &_name)
         .name(name() + ".inst.quiesce")
         .desc("number of quiesce instructions executed")
         ;
-
-    _iplCount
-        .init(32)
-        .name(name() + ".ipl_count")
-        .desc("number of times we switched to this ipl")
-        .flags(total | pdf | nozero | nonan)
-        ;
-
-    _iplGood
-        .init(32)
-        .name(name() + ".ipl_good")
-        .desc("number of times we switched to this ipl from a different ipl")
-        .flags(total | pdf | nozero | nonan)
-        ;
-
-    _iplTicks
-        .init(32)
-        .name(name() + ".ipl_ticks")
-        .desc("number of cycles we spent at this ipl")
-        .flags(total | pdf | nozero | nonan)
-        ;
-
-    _iplUsed
-        .name(name() + ".ipl_used")
-        .desc("fraction of swpipl calls that actually changed the ipl")
-        .flags(total | nozero | nonan)
-        ;
-
-    _iplUsed = _iplGood / _iplCount;
-}
-
-void
-Statistics::swpipl(int ipl)
-{
-    assert(ipl >= 0 && ipl <= 0x1f && "invalid IPL\n");
-
-    _iplCount[ipl]++;
-
-    if (ipl == iplLast)
-        return;
-
-    _iplGood[ipl]++;
-    _iplTicks[iplLast] += curTick() - iplLastTick;
-    iplLastTick = curTick();
-    iplLast = ipl;
-}
-
-void
-Statistics::serialize(CheckpointOut &cp) const
-{
-    SERIALIZE_SCALAR(iplLast);
-    SERIALIZE_SCALAR(iplLastTick);
-}
-
-void
-Statistics::unserialize(CheckpointIn &cp)
-{
-    UNSERIALIZE_SCALAR(iplLast);
-    UNSERIALIZE_SCALAR(iplLastTick);
 }
 
 } // namespace Kernel
index d516baaec448c23a165f39429ee7c4dd179771dd..41071ce08c4fa8ade0ecf117fa81ac7e4efd105a 100644 (file)
@@ -48,19 +48,8 @@ class Statistics : public Serializable
   protected:
     Stats::Scalar _arm;
     Stats::Scalar _quiesce;
-    Stats::Scalar _hwrei;
-
-    Stats::Vector _iplCount;
-    Stats::Vector _iplGood;
-    Stats::Vector _iplTicks;
-    Stats::Formula _iplUsed;
-
-  private:
-    int iplLast;
-    Tick iplLastTick;
 
   public:
-    Statistics();
     virtual ~Statistics() {}
 
     const std::string name() const { return myname; }
@@ -69,11 +58,10 @@ class Statistics : public Serializable
   public:
     void arm() { _arm++; }
     void quiesce() { _quiesce++; }
-    void swpipl(int ipl);
 
   public:
-    void serialize(CheckpointOut &cp) const override;
-    void unserialize(CheckpointIn &cp) override;
+    void serialize(CheckpointOut &cp) const override {}
+    void unserialize(CheckpointIn &cp) override {}
 };
 
 } // namespace Kernel