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