The /proc/ppc64 Directory
We don't know of any complete separately available documentation covering the /proc file system. There is some documentation available, however, it is quite dispersed. What we would strongly recommend in any case is to download the latest version of the 2.6.x line of the Linux kernel source code from http://kernel.org
. There you'll find all available documentation in the directory "Documentation". Information about the /proc file system can be find in the file "proc.txt" in the directory "Documentation/filesystems".
For the PowerPC processor architecture the directory "Documentation/powerpc" is the most interesting one.
The following article might also be worth while reading: http://www-128.ibm.com/developerworks/linux/library/l-pow-dynamic/
This is the contents of the /proc/ppc64 directory on a PowerPC processor system:
The /proc/ppc64/eeh Entry
The /proc/ppc64/lparcfg Entry
/proc/ppc64/lparcfg on a LPAR-capable system
| Entry |
Meaning |
| lparcfg 1.6 |
Version number of the lparcfg entity ?? |
| serial_number=IBM,021008B1A |
Manufacturer (=IBM) and serial number (10-08B1A), what is the preceding 02 ??? |
| system_type=IBM,9123-710 |
Manufacturer (=IBM), Type=9123, Model=710, this is an OpenPower 710 |
| partition_id=2 |
The LPAR id number |
| R4=0x1e |
??? |
| R5=0x0 |
??? |
| R6=0x80020000 |
??? |
| R7=0x100000020002 |
??? |
| BoundThrds=1 |
??? |
| CapInc=1 |
Minimum CPU increment/decrement = 1% = 0.01 physical processor |
| DisWheRotPer=2070000 |
??? |
| MinEntCap=10 |
Minimum entitled capacity for LPAR = 10% = 0.1 physical processor |
| MinEntCapPerVP=10 |
Minimum entitled capacity required per virtual processor = 10% = 0.1 physical processor |
| MinMem=512 |
Minimum required amount of main memory required for start of LPAR (= 512 MB) |
| MinProcs=1 |
Minimum required number of virtual processor for start of LPAR |
| partition_max_entitled_capacity=100 |
Maximum entitled capacity for LPAR = 100% = 1.0 physical processor |
| system_potential_processors=2 |
Maximum number of physical processors in the system (fully equipped) |
| DesEntCap=30 |
Desired entitled capacity for LPAR = 30% = 0.3 physical processor |
| DesMem=1024 |
Desired amount of main memory for LPAR (= 1024 MB) |
| DesProcs=1 |
Desired number of virtual processors for LPAR |
| DesVarCapWt=16 |
Desired weight of LPAR when running in uncapped mode |
| partition_entitled_capacity=30 |
Current entitled capacity of the LPAR = 30% = 0.3 physical processor |
| group=32770 |
??? |
| system_active_processors=2 |
Total number of active physical processors in the system |
| pool=0 |
The id number of the shared processor pool (only one available) ??? |
| pool_capacity=200 |
Maximum capacity of the shared processor pool = 200% = 2.0 physical processors |
| pool_idle_time=2126092257974 |
Please see separate discussion of the PURR register further below |
| pool_num_procs=0 |
??? |
| unallocated_capacity_weight=0 |
??? |
| capacity_weight=16 |
Weight of LPAR when running in uncapped mode |
| capped=0 |
LPAR runs in capped mode ? (0=FALSE, 1=TRUE) |
| unallocated_capacity=0 |
??? |
| purr=1028292894312 |
Please see separate discussion of the PURR register further below |
| partition_active_processors=1 |
Current number of virtual processors of the LPAR |
| partition_potential_processors=10 |
Maximum number of possible virtual processors for LPAR |
| shared_processor_mode=1 |
Is the shared processor pool being used (0=FALSE, 1=TRUE) |
/proc/ppc64/lparcfg on a non LPAR-capable system
On a system that is not LPAR-capable (e.g., a POWER4 p615) only the following entities are set:
The PURR register - Calculation of consumed CPU cycles for an uncapped LPAR
Let's assume the following situation:
Our LPAR has a certain CPU entitlement but is running in uncapped mode. Now, when our LPAR is very busy it can utilize non-used free CPU-cycles available in the shared processor pool and actually go beyond the assigned CPU entitlement up to the maximum defined in the LPAR profile.
The question is now: how do we determine how much physical CPU resources our LPAR has really used?
This can be calculated with the help of the PURR register. PURR is an acronym for Processor Utilization Resources Register. You calculate the number of physical CPU seconds as follows:
- At starting time t1 (measured in seconds) extract the value of purr from /proc/ppc64/lparcfg as p1.
- At end time t2 (measured in seconds) extract the value of purr from /proc/ppc64/lparcfg as p2.
- Calculate the time difference (elapsed time in seconds), now denoted as delta t = t2 - t1.
- Calculate the purr difference, now denoted as delta purr = p2 - p1.
- Extract the value for timebase from /proc/cpuinfo.
- The number of physical CPU seconds is now calculated as: ((delta purr) / timebase) / (elapsed time)
Here is the calculation as a formula: 
Some remarks:
- Please note that the values of purr are rather large! For the calculation you have to use 64-bit variables, e.g., of data type long long.
- The values of purr are represented in units of timebase as obtained from /proc/cpuinfo.
- The calculated value represents the average usage of physical CPU resources during the observed time interval!
Relation of purr and pool_idle_time:
- The same calculation can be made for pool_idle_time (i.e., replace purr with pool_idle_time) except that the calculated value then represents the number of CPU cycles (in units of physical processors) of the shared processor pool that were not used for LPARs, e.g., that were idle.
Very technical details can be found in the following article Advanced virtualization capabilities of POWER5 systems which appeared in the IBM Journal of Research and Development (Volume 49, Number 4/5, 2005), available at http://www.research.ibm.com/journal/rd/494/armstrong.html
.
Example calculation #1
still to be done...
Example calculation #2
still to be done...
The /proc/ppc64/naca Entry
 | No Documentation currently available
So far no documentation found...  |
The /proc/ppc64/ofdt Entry
ofdt - perform operations on the Open Firmware device tree
The /proc/ppc64/paca Directory
 | No Documentation currently available
So far no documentation found...  |
The /proc/ppc64/rtas Directory
Die Beschreibung der Parameter im Verzeichnis "rtas" bezieht sich auf Linux on pSeries RAS. Hierzu einige URLs:
Homepage der Linux on POWER Service Aids:
http://techsupport.services.ibm.com/server/lopdiags
Linux on POWER RAS Whitepaper:
http://techsupport.services.ibm.com/server/lopdiags/images/Linux_RAS.pdf
Hier eine recht gute und ausführliche Beschreibung der Parameter im "rtas" Verzeichnis:
http://lib.hutech.edu.vn/ebookonline/ebook1/0738498769/ch04lev1sec1.html
The /proc/ppc64/systemcfg Entry
Die Datei systemcfg ist eine Binärdatei und beinhaltet ein Structure vom Type "struct systemcfg". Wie der Struct aufgebaut ist, ist in folgender Include-Datei beschrieben: /usr/include/asm-ppc64/systemcfg.h
Ein Code-Example wie man darauf zugreifen kann findet sich z.B auf:
http://www.funet.fi/pub/Linux/PEOPLE/Linus/v2.4/patch-html/patch-2.4.21/linux-2.4.21_include_asm-ppc64_systemcfg.h.html
Das File "Documentation/powerpc/eeh-pci-error-recovery.txt" beschreibt die Parameter der Datei eeh.
Example of CPU usage computation script.
It may introduce some small error but it seems to work quile well.
if [ $# -eq 1 ] then DELTA=$1 else echo "Usage: cpu-usage <interval>" echo " Show physical CPU usage every given interval in seconds." exit 0 fi while true do P1=$(cat /proc/ppc64/lparcfg | grep purr | sed 's/^purr=//') sleep $DELTA P2=$(cat /proc/ppc64/lparcfg | grep purr | sed 's/^purr=//') TIMEBASE=$(cat /proc/cpuinfo | awk '/timebase/ { print $3 }') CPU=$(echo "scale=2;($P2-$P1)/$TIMEBASE/$DELTA" | bc) echo $CPU done