Processing Aggregation Data in DTrace
Aggregations have two sets of records: the key (or keys) and the value corresponding to the key (or keys). The following example shows a sample dtrace_aggdesc_t structure.
typedef struct dtrace_aggdesc {
DTRACE_PTR(char, dtagd_name); /* not filled in by kernel */
dtrace_aggvarid_t dtagd_varid; /* not filled in by kernel */
int dtagd_flags; /* not filled in by kernel */
dtrace_aggid_t dtagd_id; /* aggregation ID */
dtrace_epid_t dtagd_epid; /* enabled probe ID */
uint32_t dtagd_size; /* size in bytes */
int dtagd_nrecs; /* number of records */
uint32_t dtagd_pad; /* explicit padding */
dtrace_recdesc_t dtagd_rec[1]; /* record descriptions */
} dtrace_aggdesc_t;The dtagd_nrecs member of this structure specifies the number of record descriptions in the dtagd_rec array. dtagd_rec[1] through dtagd_rec[dtagd_nrecs - 2] contains the record description for the keys. The dtagd_rec[0] does not contain a key. The final record in this array, dtagd_rec[dtagd_nrecs - 1], is the record description for the value. The values for these aggregations are stored as simple values. The formats for the different value types are as follows: