IBM®
Skip to main content
    Country/region [select]      Terms of use
 
 
    
     Home      Products      Services & solutions      Support & downloads      My account     
 
developerworks > My developerWorks >  Dashboard > Linux for Power Architecture > Home > Entries in the proc Filesystem
developerWorks
Log In   View a printable version of the current page.
Overview Connect Spaces Forums Wikis
Entries in the proc Filesystem
Added by mperzl, last edited by mperzl on Nov 20, 2006  (view change)
Labels: 
(None)

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:

# ls -al /proc/ppc64
total 8
dr-xr-xr-x    4 root root    0 Dec 10 17:11 .
dr-xr-xr-x  264 root root    0 Dec 10 17:09 ..
-r--r--r--    1 root root    0 Dec 15 20:19 eeh
-r--------    1 root root    0 Dec 15 20:19 lparcfg
-r--------    1 root root 4096 Dec 15 20:19 naca
--w-------    1 root root    0 Dec 15 20:19 ofdt
dr-xr-xr-x    2 root root    0 Dec 15 20:19 paca
dr-xr-xr-x    2 root root    0 Dec 10 17:11 rtas
-r--r--r--    1 root root 4096 Dec 15 17:07 systemcfg

The /proc/ppc64/eeh Entry

# cat /proc/ppc64/eeh
EEH Subsystem is globally disabled
eeh_total_mmio_ffs=0

The /proc/ppc64/lparcfg Entry

/proc/ppc64/lparcfg on a LPAR-capable system

# cat /proc/ppc64/lparcfg
lparcfg 1.6
serial_number=IBM,021008B1A
system_type=IBM,9123-710
partition_id=2
R4=0x1e
R5=0x0
R6=0x80020000
R7=0x100000020002
BoundThrds=1
CapInc=1
DisWheRotPer=2070000
MinEntCap=10
MinEntCapPerVP=10
MinMem=512
MinProcs=1
partition_max_entitled_capacity=100
system_potential_processors=2
DesEntCap=30
DesMem=1024
DesProcs=1
DesVarCapWt=16

partition_entitled_capacity=30
group=32770
system_active_processors=2
pool=0
pool_capacity=200
pool_idle_time=2126092257974
pool_num_procs=0
unallocated_capacity_weight=0
capacity_weight=16
capped=0
unallocated_capacity=0
purr=1028292894312
partition_active_processors=1
partition_potential_processors=10
shared_processor_mode=1
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:

# cat lparcfg
lparcfg 1.6
serial_number=IBM,01659B11F
system_type=IBM,7029-6E3
partition_id=0
system_active_processors=2
system_potential_processors=2
partition_max_entitled_capacity=200
partition_entitled_capacity=200
partition_active_processors=2
partition_potential_processors=2
shared_processor_mode=0

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
Posted by vagnini at Dec 13, 2006 08:06 | Permalink

 
    About IBM Privacy Contact