Re: [Gems-users] cache statistics with timing info.


Date: Tue, 8 Mar 2005 07:50:32 -0600 (CST)
From: Luke Yen <lyen@xxxxxxxxxxx>
Subject: Re: [Gems-users] cache statistics with timing info.
Hello Ayse:

   As you may know, Opal has to check its OoO execution with Simics'
in-order execution at retirement.  Therefore this is the area to
look for when locating wrong-path memory instructions.
   In Opal, all speculatively executed instructions (including memory
instructions) are checked in retireInstruction().  Inside this function it
calls checkChangedState(), which enables checking all destination
registers written to by each instruction as well as the misc control
registers.  Therefore incorrect loads will be detected when the
destination register's value  written by the load does not match the
destination register value  for that load when Simics is stepped forward.
   When this happens, fullSquash() is invoked to rollback the PC to the
in-order retirement PC.
  Keep in mind that Opal is very aggressive in its memory consistency
model so you may find that loads and stores are executed out of program
order.

   Luke

On Mon, 7 Mar 2005 yilmazer@xxxxxxxxxxx wrote:

> Thanks Nauman and Mike.
>
> I will try protocol debug tracer. Actually, I have a few more question. I want
> to  trace speculative wrong-path loads in ruby.
>
> When it is known that the speculatively executed path is wrong and what happens,
> how recovery is handled in opal, where I should look for?
>
> Thanks a lot for your help and time,
>
> Ayse Yilmazer.
>
> Quoting Mike Marty <mikem@xxxxxxxxxxx>:
>
> > Nauman and Ayse,
> >
> > Its great to see others contributing to this mailing list!  Your
> > information was quite good.
> >
> > By default, the Ruby statistics will tell you how many transitions
> > occured.  As Nauman pointed out, these transitions and states are
> > specified in the SLICC files.
> >
> > In order to get the time of these transitions, you can use the protocol
> > debug tracer.  This is mentioned briefly on our documentation site in the
> > "Debugging Ruby README" file.  Have a look at this.
> >
> > In short, set the RUBY_DEBUG Makefile flag to true.  Ensure that the
> > PROTOCOL_DEBUG_TRACE option is also set to true in the
> > ruby/config/rubydefaults.config.
> >
> > This will enabled a trace of every transition that occurs.  To start the
> > trace in Simics, enter this command:
> >
> >   ruby0.debug-start-time "1"'
> >
> > This will start the protocol trace at time 1 (the very first cycle).  It
> > will give you every transition, for every block, and give you the time as
> > well.
> >
> >
> > I believe you can direct this output to a file as well with this command:
> >
> >   ruby0.debug-output-file /scratch/ruby_debug_output.txt
> >
> > --Mike
> >
> >
> > > You have to look into SLICC specification of cache coherence protocols.
> > The
> > > SLICC specification is translated automatically to C++ code. So all the
> > code for
> > > caches is automatically generated.
> > > To find the specification for different protocols, look into the protocols
> > > directory in gems folder.
> > >
> > > Here is an example of profiling in SLICC
> > >
> >
> -------------------------------------------------------------------------------
> > >   action(uu_profileMiss, "\u", desc="Profile the demand miss") {
> > >     peek(L1requestNetwork_in, RequestMsg) {
> > >       // AccessModeType not implemented
> > >       profile_L2Cache_miss(convertToGenericType(in_msg.Type),
> > in_msg.AccessMode,
> > > MessageSizeTypeToInt(in_msg.MessageSize),  in_msg.Prefetch,
> > > machineIDToNodeID(in_msg.Requestor));
> > >     }
> > >   }
> > >
> >
> -------------------------------------------------------------------------------
> > >
> > > The function profile_L2Cache_miss is declared in RubySlicc_Profiler.sm,
> > > GEMS/ruby/slicc_interface/RubySlicc_Profiler_interface.h and
> > > GEMS/ruby/slicc_interface/RubySlicc_Profiler_interface.C.
> > > It is implemented in files in GEMS/ruby/profiler.
> > > So make your own function on the same pattern.
> > > p.s.
> > > Just trying to point you in the right direction. I am a newbie too so dont
> > trust
> > > me too much :)
> > >
> > > Thanks.
> > > --
> > > Nauman
> > >
> > >
> > > Quoting yilmazer@xxxxxxxxxxx:
> > >
> > > > Hi,
> > > > I have just started to use gems. I want to collect some statistics from
> > ruby
> > > > cache module. What I want to do is to track transitions of shared
> > > > cache-lines
> > > > with timing information.
> > > >    t1: Modified
> > > >    ..
> > > >    tn: Modified/Shared
> > > >    tm: Invalid
> > > >    what is t1 time, tn and tm?
> > > > I looked over the source code but I couldn't figure out where to start.
> > If
> > > > you
> > > > can help me, I will very appreciate it.
> > > > Thanks,
> > > > Ayse Yilmazer.
> > > >
> > > > _______________________________________________
> > > > Gems-users mailing list
> > > > Gems-users@xxxxxxxxxxx
> > > > https://lists.cs.wisc.edu/mailman/listinfo/gems-users
> > > >
> > >
> > > _______________________________________________
> > > Gems-users mailing list
> > > Gems-users@xxxxxxxxxxx
> > > https://lists.cs.wisc.edu/mailman/listinfo/gems-users
> > >
> > _______________________________________________
> > Gems-users mailing list
> > Gems-users@xxxxxxxxxxx
> > https://lists.cs.wisc.edu/mailman/listinfo/gems-users
> >
>
>
>
> _______________________________________________
> Gems-users mailing list
> Gems-users@xxxxxxxxxxx
> https://lists.cs.wisc.edu/mailman/listinfo/gems-users
>
[← Prev in Thread] Current Thread [Next in Thread→]