| 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. |