longpelaexpertise.com.au/ezine/SamplingMonitors.php?ezinemode=printfriend

LongEx Mainframe Quarterly - August 2015

technical: Monitoring by Sampling

Often when we think about monitors we think about software like IBM Omegamon XE, BMC MAINVIEW and ASG TMON. These software products do things like regularly hop around storage and control blocks to find out what's happening right now. They'll often also insert 'hooks' or other magic to get information on current performance and workloads. They may even have tracing features to give you more details about what's happening, and some historical features to find out not only what's happening now, but what was happening in the past.

However there's another type of monitor: a sampling monitor. And the chances are that you have one.

The First Sampling Monitor

In the 1970s, a company called Programart developed Strobe. If this sounds familiar, then it should. Compuware acquired Programart in 1999, and continue to market Strobe. Strobe is a sampling based monitor. This means that it will 'sample' an address space, meaning it will take lots of snapshots, to see what's happening. How often it samples is set when you define a sampling session. As a rough guide, I like to sample around 1,000-1,500 times per minute when analysing something for more than 5 minutes. So if we sample 1,000 times per minute, Strobe will check every 0.06 seconds to see what an address space is doing. Compuware isn't publishing how it does this, but we can make a few educated guesses. For a start, Strobe is checking to see if any task in the address space is currently executing on a processor. If it is, it will find out from the PSW the address, and from this (in most cases), the module.

So we can get a report that looks something like this:

MODULE    SECTION    LINE  PROCEDURE/FUNCTION         STARTING  CPU TIME %
 NAME     NAME       NUM   NAME                      LOCATION  SOLO  TOTAL

.COMMONX                        EXTENDED COMMON AREA 1823FB48  5.34   5.71
.XES     IXLR1LKR               LOCK W/RECORD STRUCT           5.09   5.50
.SUPERVS IGC0013{               SUPERVISOR SERVICES            2.38   2.42
.XMEMORY .XMEMORX               EXTENDED CROSS MEM             2.05   2.26
.CICS    DFHAIP        DFHEIP   EXEC(CMD-LEVEL)INT             2.05   2.05
.SVC     SVC 011                TIME                           1.93   1.93
.LELIB   CEEPLPKA      CEEV#GTS GET HEAP STORAGE               1.81   1.85
.COBLIB  IGZCPAC                COBPACK  GENERAL               1.81   1.85
.DB2     DSNXGRDS      DSNXEPM  PGM MGR                        1.68   1.81
.DB2     DSNK2DM                IDX MGR                        1.77   1.81

OK, but what does this all mean? What it tell us is where the CPU is being burned - in which modules. For example, we can see that the TIME SVC (SVC11) is consuming around 2% of the total CPU, and Language Environment GET HEAP almost the same. From this, we can target the CPU users, and start to tune them. Whenever I'm in a project looking to reduce CPU, this report is an excellent first step. Strobe will even go into more detail. So you can find the DB2 DBRM, the offset in a COBOL module, or the CICS transaction consuming the CPU. Nice huh?

Competition for Strobe

In 2004, Macro4 announced a new product as a direct competitor to Compuware Strobe: Freeze Frame. Shortly after in 2005, IBM announced an almost identical product: IBM Application Performance Analyzer. Like Compuware Strobe, these products are sampling monitors, producing reports on CPU usage for an address space. Reports break down CPU usage by module, and like Strobe, can go down further into the DBRM, Transaction and offset.

However all three products go further. They analyse wait times - why an address space was waiting. FreezeFrame can product a report similar to the following.

                                      -------- Mean Time in Seconds -----
Name    NTxns Description        Error Execution+Suspend + Delay = Service
CSMI   25464  Mirror transactio   0.6%   0.000    0.165    0.046     0.213
> DFHMIRS     CICS Program               0.000    0.161    0.044     0.206
  > CICS      System Services            0.000    0.161    0.039     0.201
    > IRLINK  Wait on InterRegion Link   0.000    0.081    0.000     0.081
              LINKMM1
    > FCIOWAIT Wait on VSAM File I/O     0.000    0.064    0.000     0.064
               FILE001 
    > CICSDly CICS Dispatch Delay        0.000    0.000    0.039     0.039
    > ZCIOWAIT Wait on Terminal I/O      0.000    0.015    0.000     0.015
    > FCXCSUSP FILE001 FILE001           0.000    0.000    0.000     0.000
    > LG_FORCE Wait on Log Buffer        0.000    0.000    0.000     0.000
               being Flushed
    > LG_DEFER Wait on Log Buffer        0.000    0.000    0.000     0.000
               being Flushed
    > LGWRITE Wait on Writing Log        0.000    0.000    0.000     0.000
              Record

So you can see that for a CICS region, FreezeFrame has broken down the service time by transaction. So our CSMI transaction has most of its service time waiting on the InterRegion Link LINKMM1, with VSAM File I/O on file FILE001 coming a close second.

Other Information

Our three sampling product go further than this. They include reports on things as varied as:

  • DASD and file I/O values, counts and performance
  • SQL activity
  • Websphere MQ statistics

And more. A gold mine of tuning information.

Cost vs Accuracy

All this information comes at a cost. For a start, a sampling session must be manually defined. You define the address space (job, region or started task), the monitoring options to enable, the number of samples to take, and how long to run. The number of samples and length of sampling run are important. Let's look at them:

You want the length of the sample to be long enough for a representative sample if monitoring online or recurring workloads. For example, I like a good 30 minute sampling period when monitoring a CICS region. For batch, the chances are that you want to measure the entire step you're looking at. All products have a flag that can be set to monitor until step-end. As an aside, they also all offer scheduling controls so you can setup a sampling session today that will run tomorrow, or next week, or every time a batch job runs.

The number of samples is also important. You don't want this too high, or you'll burn a lot of CPU monitoring the address space. If you have too many samples, the monitoring may also get in the way of the address space you're monitoring, skewing the results. On the other hand, you want enough samples to get a good look. If you only get 10 samples where a batch job is using CPU, the CPU reports are useless.

All three products include a report that is something like this:

| Total samples      45,000         | Duration           29 min 59.96 sec|
| Sampling rate      25.00 per sec  | Report dataspace   505.81MB        |
| CPU/WAIT samples   36,545         | Sample dataspace   863.95MB        |
| TCB samples        45,000         | Meas significance  81.21%          |
| CPU queued samples 8,455          |                                    |

In this example, we took 45,000 samples over a 30 minute period (well, 29 minutes, 59.96 seconds). During this period, we obtained 36,545 samples where the address space was executing, or waiting. This is good. However if this values was something like 50, you don't have enough samples.

If I'm trying to perform a very short sample (say, for a job step running for 15 seconds), I'll increase the number of samples to get a good number of CPU/WAIT samples. If I can't get a few hundred samples, I won't trust the output.

System z CPU Measurement Facility

In their z10 Systems z processors, IBM added the System z CPU Measurement Facility (CPU MF for short). This allows you to perform your own sampling without any of the above products. The HIS started task in z/OS manages this facility: operator commands start, stop and define sampling session parameters. This started tasks also collects these samples, and writes them to a z/OS UNIX dataset for analysis. CPU MF also provides some counter functionality and a new SMF Type 113 record. But we'll concentrate on the sampling side.

The CPU MF has the advantage over the previous products in that it is a hardware feature, so the sampling won't affect the results obtained. It will also sample everything that executes - all address spaces. It also uses less CPU than the sampling monitors.

The disadvantages start with the fact that this facility cannot be limited to one address space. You sample the entire z/OS system, or nothing. This will provide a huge amount of information, so it's rare to exceed 10 minutes in a sampling session. So sampling that 30 minute batch job step won't help. Further, this facility dumps information into a z/OS HFS. You need to do the analysis. Phoenix Software International market the zHISR product that can format and analyse this information.

CPU MF also won't provide much of the DB2, CICS Transaction, Websphere MQ, file I/O and other information provided by the above sampling monitors.

Summary

Sampling monitors are excellent tools for analysing the performance of batch and online applications and systems, providing information on the top CPU consumers, and why things are waiting. The CPU MF facility is a free alternative. However it provides different information that is harder to analyse, and does not provide many of the add-on benefits of the other sampling monitors.

David Stephens