[PATCH] PURR data on iSeries Linux

will schmidt will_schmidt at vnet.ibm.com
Thu Nov 11 02:17:06 EST 2004


Hi,

   Since we're incrementing the lparcfg version,..  It might be helpful to actually print
the value on the iSeries leg, like we do on the non-iSeries leg.   (an earlier oversight on my part..)

something like

         seq_printf(m, "%s %s \n", MODULE_NAME, MODULE_VERS);

up near the top of lparcfg_data().

-Will


jscheel at magnaspeed.net wrote:
> With the addtion of the PURR for Power5 systems,
> applications have begun being built to utilize this value.
>  One application in particular is looking for equivalent
> information for Linux running on legacy iSeries systems.
> 
> The data necessary to report this data is available from
> the hypervisor.  It simply has to be retrieved and reported
> by /proc/ppc64/lparcfg interface on iSeries.
> 
> For those interested in testing this patch, retrieve the
> purr data at two defined intervals and calculate the
> difference.  Then, multiply the delta by 100, divide by
> the number of seconds in your interval, divide by the
> "timebase" value from "/proc/cpuinfo", and divide again by
> the number of processors. This will provide the physical
> cpu utilization ranging from 1 to 100.
> 
> For shared processor configurations, this will depend on
> workload with the actual value somewhere between 1 and 100.
>  For dedicated processors, this number should always be
> 100 as the operating system gets all of the physical
> processor capacity.
> 
> This patch to arch/ppc64/lparcfg.c reports this data.  It
> has been tested on legacy iSeries systems and is not
> dependent on the Power5 PURR implementation.
> Please consider it for inclusion in the arch/ppc64 tree.
>  Additionally, I would appreciate any and all comments.
> 
> Thanks,
> -Jeff
> 
> P.S. Sorry I had to use my personal email address but I
> can't get the patch out without losing tabs.  I think this
> works.  :-)
> 
> Signed-off-by: Jeff Scheel <scheel at vnet.ibm.com>
> 
> ---
> linuxppc-2.6.9_rc1.orig/arch/ppc64/kernel/lparcfg.c	2004-11-09
> 07:03:43.354383000 -0600
> +++
> linuxppc-2.6.9_rc1/arch/ppc64/kernel/lparcfg.c	2004-11-09
> 10:40:36.375934020 -0600
> @@ -34,7 +34,7 @@
>  #include <asm/rtas.h>
>  #include <asm/system.h>
> 
> -#define MODULE_VERS "1.4"
> +#define MODULE_VERS "1.5"
>  #define MODULE_NAME "lparcfg"
> 
>  /* #define LPARCFG_DEBUG */
> @@ -70,6 +70,30 @@
> 
>  #ifdef CONFIG_PPC_ISERIES
> 
> +static unsigned long get_purr(void);
> +
> +/*
> + * For iSeries legacy systems, the PPA purr function is
> available from the
> + * xEmulatedTimeBase field in the paca.
> + */
> +static unsigned long get_purr()
> +{
> +	unsigned long sum_purr=0;
> +	int cpu;
> +	struct paca_struct *lpaca;
> +
> +	for_each_online_cpu(cpu) {
> +		lpaca = paca + cpu;
> +		sum_purr += lpaca->xLpPaca.xEmulatedTimeBase;
> +
> +#ifdef PURR_DEBUG
> +		printk(KERN_INFO "get_purr for cpu (%x) has value (%lx)
> \n",
> +			cpu,lpaca->xLpPaca.xEmulatedTimeBase);
> +#endif
> +	}
> +	return sum_purr;
> +}
> +
>  #define lparcfg_write NULL
> 
>  /* 
> @@ -81,6 +105,7 @@
>  	int shared, entitled_capacity, max_entitled_capacity;
>  	int processors, max_processors;
>  	struct paca_struct *lpaca = get_paca();
> +	unsigned long purr = get_purr();
> 
>  	shared = (int)(lpaca->lppaca_ptr->xSharedProc);
>  	seq_printf(m, "serial_number=%c%c%c%c%c%c%c\n",
> @@ -131,6 +156,7 @@
>  		seq_printf(m, "pool_capacity=%d\n",
>  			   (int)(HvLpConfig_getNumProcsInSharedPool(pool_id) *
>  				 100));
> +		seq_printf(m, "purr=%ld\n", purr);
>  	}
> 
>  	seq_printf(m, "shared_processor_mode=%d\n", shared);
> 
> _______________________________________________
> Linuxppc64-dev mailing list
> Linuxppc64-dev at ozlabs.org
> https://ozlabs.org/cgi-bin/mailman/listinfo/linuxppc64-dev




More information about the Linuxppc64-dev mailing list