|                  Information about /proc/ppc_htab | 
 | ===================================================================== | 
 |  | 
 | This document and the related code was written by me (Cort Dougan), please | 
 | email me (cort@fsmlabs.com) if you have questions, comments or corrections. | 
 |  | 
 | Last Change: 2.16.98 | 
 |  | 
 | This entry in the proc directory is readable by all users but only | 
 | writable by root. | 
 |  | 
 | The ppc_htab interface is a user level way of accessing the | 
 | performance monitoring registers as well as providing information | 
 | about the PTE hash table. | 
 |  | 
 | 1. Reading | 
 |  | 
 |   Reading this file will give you information about the memory management | 
 |   hash table that serves as an extended tlb for page translation on the | 
 |   powerpc.  It will also give you information about performance measurement | 
 |   specific to the cpu that you are using. | 
 |  | 
 |   Explanation of the 604 Performance Monitoring Fields: | 
 |     MMCR0 - the current value of the MMCR0 register | 
 |     PMC1 | 
 |     PMC2 - the value of the performance counters and a | 
 |            description of what events they are counting | 
 |            which are based on MMCR0 bit settings. | 
 |   Explanation of the PTE Hash Table fields: | 
 |  | 
 |     Size - hash table size in Kb. | 
 |     Buckets -  number of buckets in the table. | 
 |     Address - the virtual kernel address of the hash table base. | 
 |     Entries - the number of ptes that can be stored in the hash table. | 
 |     User/Kernel - how many pte's are in use by the kernel or user at that time. | 
 |     Overflows - How many of the entries are in their secondary hash location. | 
 |     Percent full - ratio of free pte entries to in use entries. | 
 |     Reloads - Count of how many hash table misses have occurred | 
 |               that were fixed with a reload from the linux tables. | 
 |               Should always be 0 on 603 based machines. | 
 |     Non-error Misses - Count of how many hash table misses have occurred | 
 |               that were completed with the creation of a pte in the linux | 
 |               tables with a call to do_page_fault(). | 
 |     Error Misses - Number of misses due to errors such as bad address | 
 |               and permission violations.  This includes kernel access of | 
 |               bad user addresses that are fixed up by the trap handler. | 
 |  | 
 |   Note that calculation of the data displayed from /proc/ppc_htab takes | 
 |   a long time and spends a great deal of time in the kernel.  It would | 
 |   be quite hard on performance to read this file constantly.  In time | 
 |   there may be a counter in the kernel that allows successive reads from | 
 |   this file only after a given amount of time has passed to reduce the | 
 |   possibility of a user slowing the system by reading this file. | 
 |  | 
 | 2. Writing | 
 |  | 
 |   Writing to the ppc_htab allows you to change the characteristics of | 
 |   the powerpc PTE hash table and setup performance monitoring. | 
 |  | 
 |   Resizing the PTE hash table is not enabled right now due to many | 
 |   complications with moving the hash table, rehashing the entries | 
 |   and many many SMP issues that would have to be dealt with. | 
 |  | 
 |   Write options to ppc_htab: | 
 |    | 
 |    - To set the size of the hash table to 64Kb: | 
 |  | 
 |       echo 'size 64' > /proc/ppc_htab | 
 |  | 
 |      The size must be a multiple of 64 and must be greater than or equal to | 
 |      64. | 
 |  | 
 |    - To turn off performance monitoring: | 
 |  | 
 |       echo 'off' > /proc/ppc_htab | 
 |  | 
 |    - To reset the counters without changing what they're counting: | 
 |  | 
 |       echo 'reset' > /proc/ppc_htab | 
 |  | 
 |      Note that counting will continue after the reset if it is enabled. | 
 |  | 
 |    - To count only events in user mode or only in kernel mode: | 
 |  | 
 |       echo 'user' > /proc/ppc_htab | 
 |        ...or... | 
 |       echo 'kernel' > /proc/ppc_htab | 
 |  | 
 |      Note that these two options are exclusive of one another and the | 
 |      lack of either of these options counts user and kernel. | 
 |      Using 'reset' and 'off' reset these flags. | 
 |  | 
 |    - The 604 has 2 performance counters which can each count events from | 
 |      a specific set of events.  These sets are disjoint so it is not | 
 |      possible to count _any_ combination of 2 events.  One event can | 
 |      be counted by PMC1 and one by PMC2. | 
 |  | 
 |      To start counting a particular event use: | 
 |  | 
 |       echo 'event' > /proc/ppc_htab | 
 |  | 
 |      and choose from these events: | 
 |  | 
 |      PMC1 | 
 |      ---- | 
 |       'ic miss' - instruction cache misses | 
 |       'dtlb' - data tlb misses (not hash table misses) | 
 |  | 
 |      PMC2 | 
 |      ---- | 
 |       'dc miss' - data cache misses | 
 |       'itlb' - instruction tlb misses (not hash table misses) | 
 |       'load miss time' - cycles to complete a load miss | 
 |  | 
 | 3. Bugs | 
 |  | 
 |   The PMC1 and PMC2 counters can overflow and give no indication of that | 
 |   in /proc/ppc_htab. |