[Info-vax] High resolution per-process CPU consumption statistics

Mark Daniel mark.daniel at wasd.vsm.com.au
Tue Mar 24 13:05:22 EDT 2020


On 24/3/20 9:24 pm, johnwallace4 at yahoo.co.uk wrote:
> On Tuesday, 24 March 2020 00:02:22 UTC, Mark Daniel  wrote:
>> Would like to be able to measure process CPU consumed during specified
>> continuous sections of processing.  Only interested in CPU-intensive
>> sections so USER mode consumed relevant.  Imagine inserting calls at the
>> beginning and ending of those sections with a magic number representing
>> CPU consumption/delta/whatever made available.
>>
>> As some of these CPU-intensive code sections are short duration the
>> granularity needs to be quite fine.  The likes of JPI$_CPUTIM and
>> LIB$STAT_TIMER (10mS) seem unsuitable.
>>
>> Prepared for non- USER mode code.  This is only for ad hoc developmental
>> insight and not general use.  Needs to accommodate Alpha and/or Itanium
>> (and/or x86-64 :-)
>>
>> And, of course, any other suggestion.
>>
>> As always, TIA.
> 
> Is it safe to assume that the code in question is single-threaded?

Yes.

> Is it safe to assume that the code in question is running on a
> single-processor system?

Yes.

> Is an Alpha-only solution better than nothing at all?

Sure.

> Have a look at RPCC (Read Process Cycle Counter) in the Alpha/VMS
> PALcode and see if it might help.
> 
> See e.g. the Alpha Architecture Reference Manual documentation e.g.
> http://www.bitsavers.org/pdf/dec/alpha/Sites_AlphaArchitectureReferenceManual_1992.pdf
> (there's probably more useful RPCC-related stuff available too).

Before posting here, a fair effort with an unnamed but common search 
engine and my chosen query strings consistently returned references to 
that document and section.

My fevered imagination (but internals hacking very-much limited to 
monkey-see-monkey-do) has something of the ilk:

    unsigned __int64  start_count,
                      end_count;

    void get_cpu_count (unsigned __int64 *here)
    {
       *here = EXE$GL_CURRENT_CPU_COUNT;
       return SS$_NORMAL;
    }

    sys$cmkrnl (&get_cpu_count, &start_count);
    ...
    sys$cmkrnl (&get_cpu_count, &end_count);

Some similar code would be used to obtain the RPCC.

Thanks for the suggestion John.



More information about the Info-vax mailing list