Re: [Gems-users] Interpreting cache results from ruby output


Date: Mon, 22 Oct 2007 17:27:27 -0500
From: Dan Gibson <degibson@xxxxxxxx>
Subject: Re: [Gems-users] Interpreting cache results from ruby output
Jack,
Let me (try to) answer your questions inlined below.

Jack Tzu-Han Hung wrote:

Hi,
Does anybody know how to interpret the results from ruby output? I find it fairly hard. Below is my result from running a test program, walking through an array multiple times using a loop. I use the default configuration, except the L1D associativity is 1. ------------------------------------------
instruction_executed: 286820499 [ 286820499 ]
cycles_per_instruction: 0.570198 [ 0.570198 ]
misses_per_thousand_instructions: 0.258381 [ 0.258381 ]
...
L1D_cache cache stats:
  L1D_cache_total_misses: 512423
  L1D_cache_total_demand_misses: 512423
  L1D_cache_total_prefetches: 0
  L1D_cache_total_sw_prefetches: 0
  L1D_cache_total_hw_prefetches: 0
  L1D_cache_misses_per_transaction: 512423
  L1D_cache_misses_per_instruction: 0.00178656
  L1D_cache_instructions_per_misses: 559.734

  L1D_cache_request_type_LD:   84.6488%
  L1D_cache_request_type_ST:   9.76849%
  L1D_cache_request_type_ATOMIC:   5.58269%

  L1D_cache_access_mode_type_SupervisorMode:   272090    53.0987%
  L1D_cache_access_mode_type_UserMode:   240333    46.9013%
L1D_cache_request_size: [binsize: log2 max: 64 count: 512423 average: 5.94929 | standard deviation: 6.83207 | 0 14544 8970 313205 169318 0 0 6386 ]

........

Simics Driver Transaction Stats
----------------------------------
Insn requests: 0
Data requests: 115499491
....................................................

------------------------------------------
My questions are: (1) What does "L1D_cache_access_mode_type_SupervisorMode" mean? I suppose that's the number of cache misses (not access) from OS, but my toy program doesn't have too many system calls (actually, just one printf). Isn't the number too high to be reasonable?

Thats correct -- the number of supervisor cache misses. It might seem unreasonable, but remember that when you load ruby the caches are COLD, and generally the first time you run an application you page tables are cold, as well as TLBs and such. This is even more true of short-running processes like toys -- the OS starts to dominate.

(2) Since ruby can separate the misses fomr OS and user code, I wonder if I can get the individual numbers of executed instructions from OS and user code. Or if anyone has better ideas how we can reduce the effect from OS?

Actually, Ruby doesn't go out of its way to do this -- when Simics hands Ruby a memory access, there is a 'priv' bit associated with that access. However, ruby calculates the total number of instructions by querying simics at the start and end of the simulation. You could augment ruby to count user and supervisor instructions separately, but you would need to add state to SimicsProcessor or SimicsDriver to do that.

(3) Does "Data requests" mean the number of toal memory accesses (sending out from cpu)?

Thats correct. Data requests above is the total number of observed data accesses (loads, stores, and atomics) from all simics CPUs.

I really appreciate your help. Thanks a lot. Jack

------------------------------------------------------------------------

_______________________________________________
Gems-users mailing list
Gems-users@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/gems-users
Use Google to search the GEMS Users mailing list by adding "site:https://lists.cs.wisc.edu/archive/gems-users/"; to your search.


--
http://www.cs.wisc.edu/~gibson [esc]:wq!

[← Prev in Thread] Current Thread [Next in Thread→]