Working with the z/VM *MONITOR record writer
The monitor stream application device driver uses the z/VM CP instruction DIAG X'DC' to write to the z/VM monitor stream. Monitor data must be preceded by a data structure, monwrite_hdr.
See z/VM: CP Programming Services, SC24-6272 for more information about the DIAG X'DC' instruction and the different monitor record types (sample, config, event).
The application writes monitor data by passing a monwrite_hdr structure that is followed by monitor data. The only exception is the STOP function, which requires no monitor data. The monwrite_hdr structure, as described in monwriter.h, is filled in by the application. The structure includes the DIAG X'DC' function to be performed, the product identifier, the header length, and the data length.
- ppppppp
- is a fixed ASCII string, for example, LNXAPPL.
- ff
- is the application number (hexadecimal number). This number can be chosen by the
application. You can reduce the chance of conflicts with other applications, by requesting an
application number from the IBM®
z/VM Performance team at
www.vm.ibm.com/perf
- n
- is the record number as specified by the application
- vv, rr, and mm
- can also be specified by the application. A possible use is to specify version, release, and modification level information, allowing changes to a certain record number when the layout is changed, without changing the record number itself.
The first 7 bytes of the structure (LNXAPPL) are filled in by the device driver when it writes
the monitor data record to the CP buffer. The last 9 bytes contain information that is supplied by
the application on the write()
call when writing the data.
The monwrite_hdr structure that must be written before any monitor record data is defined as follows:
/* the header the app uses in its write() data */
struct monwrite_hdr {
unsigned char mon_function;
unsigned short applid;
unsigned char record_num;
unsigned short version;
unsigned short release;
unsigned short mod_level;
unsigned short datalen;
unsigned char hdrlen;
}__attribute__((packed));
The following function code values are defined:
/* mon_function values */
#define MONWRITE_START_INTERVAL 0x00 /* start interval recording */
#define MONWRITE_STOP_INTERVAL 0x01 /* stop interval or config recording */
#define MONWRITE_GEN_EVENT 0x02 /* generate event record */
#define MONWRITE_START_CONFIG 0x03 /* start configuration recording */