APPLDATA monitor record layout

Ubuntu 22.04 LTS z/VM guest

Each of the data-gathering modules writes a different type of record.

z/VM can identify the records by their unique product ID. The product ID is an EBCDIC string of this form: LINUXKRNL<record ID>260100. The <record ID> is treated as a byte value, not a string.

The records contain data of the following types:
u32
unsigned 4-byte integer.
u64
unsigned 8-byte integer.
Table 1. APPLDATA_MEM_DATA record (Record ID 0x01)
Offset (Decimal) Offset (Hex) Type Name Description
0 0x0 u64 timestamp TOD time stamp that is generated on the Linux side after record update
8 0x8 u32 sync_count_1 After z/VM collected the record data, sync_count_1 and sync_count_2 must be the same. Otherwise, the record was updated on the Linux side while z/VM was collecting the data. As a result, the data might be inconsistent.
12 0xC u32 sync_count_2 See sync_count_1.
16 0x10 u64 pgpgin Data that was read from disk (in KB)
24 0x18 u64 pgpgout Data that was written to disk (in KB)
32 0x20 u64 pswpin Pages that were swapped in
40 0x28 u64 pswpout Pages that were swapped out
48 0x30 u64 sharedram Shared RAM in KB
56 0x38 u64 totalram Total usable main memory size in KB
64 0x40 u64 freeram Available memory size in KB
72 0x48 u64 totalhigh Total high memory size in KB
80 0x50 u64 freehigh Available high memory size in KB
88 0x58 u64 bufferram Memory that was reserved for raw disk blocks, corresponding to "Buffers" from /proc/meminfo, in KB
96 0x60 u64 cached Size of used cache, including "Cached" and "SwapCached" from /proc/meminfo, in KB
104 0x68 u64 totalswap Total swap space size in KB
112 0x70 u64 freeswap Free swap space in KB
120 0x78 u64 pgalloc Page allocations
128 0x80 u64 pgfault Page faults (major+minor)
136 0x88 u64 pgmajfault Page faults (major only)
Table 2. APPLDATA_OS_DATA record (Record ID 0x02)
Offset (Decimal) Offset (Hex) Type (size) Name Description
0 0x0 u64 timestamp TOD time stamp that is generated on the Linux side after record update
8 0x8 u32 sync_count_1 After z/VM collected the record data, sync_count_1 and sync_count_2 must be the same. Otherwise, the record was updated on the Linux side while z/VM was collecting the data. As a result, the data might be inconsistent.
12 0xC u32 sync_count_2 See sync_count_1.
16 0x10 u32 nr_cpus Number of virtual CPUs.
20 0x14 u32 per_cpu_size Size of the per_cpu_data for each CPU (= 36).
24 0x18 u32 cpu_offset Offset of the first per_cpu_data (= 52).
28 0x1C u32 nr_running Number of runnable threads.
32 0x20 u32 nr_threads Number of threads.
36 0x24 3 × u32 avenrun[3] Average number of running processes during the last 1 (first value), 5 (second value) and 15 (third value) minutes. These values are "fake fix-point". Each value is composed of a 10-bit integer and an 11-bit fractional part. See note 1.
48 0x30 u32 nr_iowait Number of blocked threads (waiting for I/O).
52 0x34 See note 2. per_cpu_data Time spent in user, kernel, idle, nice, etc for every CPU. See note 3.
52 0x34 u32 per_cpu_user Timer ticks that were spent in user mode.
56 0x38 u32 per_cpu_nice Timer ticks that were spent with modified priority.
60 0x3C u32 per_cpu_system Timer ticks that were spent in kernel mode.
64 0x40 u32 per_cpu_idle Timer ticks that were spent in idle mode.
68 0x44 u32 per_cpu_irq Timer ticks that were spent in interrupts.
72 0x48 u32 per_cpu_softirq Timer ticks that were spent in softirqs.
76 0x4C u32 per_cpu_iowait Timer ticks that were spent while waiting for I/O.
80 0x50 u32 per_cpu_steal Timer ticks "stolen" by the hypervisor.
84 0x54 u32 cpu_id The number of this CPU.
Note:
  1. The following C-Macros are used inside Linux to transform these into values with two decimal places:
    #define LOAD_INT(x) ((x) >> 11)
    #define LOAD_FRAC(x) LOAD_INT(((x) & ((1 << 11) - 1)) * 100)
  2. nr_cpus * per_cpu_size
  3. per_cpu_user through cpu_id are repeated for each CPU
Table 3. APPLDATA_NET_SUM_DATA record (Record ID 0x03)
Offset (Decimal) Offset (Hex) Type Name Description
0 0x0 u64 timestamp TOD time stamp that is generated on the Linux side after record update
8 0x8 u32 sync_count_1 After z/VM collected the record data, sync_count_1 and sync_count_2 must be the same. Otherwise, the record was updated on the Linux side while z/VM was collecting the data. As a result, the data might be inconsistent.
12 0xC u32 sync_count_2 See sync_count_1.
16 0x10 u32 nr_interfaces Number of interfaces being monitored
20 0x14 u32 padding Unused. The next value is 64-bit aligned, so these 4 bytes would be padded out by compiler
24 0x18 u64 rx_packets Total packets that were received
32 0x20 u64 tx_packets Total packets that were transmitted
40 0x28 u64 rx_bytes Total bytes that were received
48 0x30 u64 tx_bytes Total bytes that were transmitted
56 0x38 u64 rx_errors Number of bad packets that were received
64 0x40 u64 tx_errors Number of packet transmit problems
72 0x48 u64 rx_dropped Number of incoming packets that were dropped because of insufficient space in Linux buffers
80 0x50 u64 tx_dropped Number of outgoing packets that were dropped because of insufficient space in Linux buffers
88 0x58 u64 collisions Number of collisions while transmitting