summaryrefslogtreecommitdiff
path: root/man/man5/pcp-archive.5
blob: f27547dfe2e5fcc9957f0bbea976b3fa85cc65ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
'\"! tbl | nroff \-man
'\"macro stdmacro
.\"
.\" Copyright (c) 2014 Red Hat Inc.
.\" 
.\" This program is free software; you can redistribute it and/or modify it
.\" under the terms of the GNU General Public License as published by the
.\" Free Software Foundation; either version 2 of the License, or (at your
.\" option) any later version.
.\" 
.\" This program is distributed in the hope that it will be useful, but
.\" WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
.\" or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
.\" for more details.
.\" 
.\"
.TH PCP-ARCHIVE 5 "" "Performance Co-Pilot"

.SH NAME
\f3pcp-archive\f1 \- Archive Files for Performance Co-Pilot

.SH SYNOPSIS

.I $PCP_LOG_DIR/pmlogger/*/*.{meta,index,0}

.I $PCP_LOG_DIR/pmmgr/*/*.{meta,index,0}

.SH DESCRIPTION

PCP log archives store volumes of historical values of arbitrary
Performance Co-Pilot metrics recorded from a single host.  Archives
are self-contained in the sense that they contain all the important
metadata that would be required for off-line or off-site analysis.
The format is intended to be stable in order to allow long-term
historical storage and processing by current tools.  (Compatibility
in the other direction \- new files, old tools \- is not as fully
assured.)
.PP
Archives may be read by most PCP client tools, using the 
.IR "\-a ARCHIVE"
option, or dumped raw by
.BR pmdumplog (1).
Archives may be created by 
.BR pmlogger (1)
and bulk-import tools.
Archives may be merged, analyzed, and subsampled using specialized
tools such as
.BR pmlogsummary "(1), " pmlogreduce "(1), " pmlogrewrite "(1), and " pmlogextract (1).
In addition, PCP archives may be grouped together into PCP "archive folios",
which are managed by the
.BR pmafm (1)
tool.
.PP
PCP archives consist of several physical files that share a common arbitrary prefix, 
e.g.,
.IR myarchive .
.TP
myarchive.0, myarchive.1, ...
Metric values.  May grow rapidly.
.TP
myarchive.meta
Information for PMAPI functions such as
.IR pmLookupDesc "(3) and " pmGetInDom (3).
May grow in fits and spurts, as logged instances and instance domains vary.
.TP
myarchive.index
A temporal index, mapping timestamps to offsets in the other files.
Grows slowly.

.SH COMMON FEATURES

All three types of files have a similar record-based structure, a
convention of network-byte-order (big-endian) encoding, and 32-bit
fields for tagging/padding for those records.  Strings are stored as
8-bit characters without assuming a specific encoding, so normally
ASCII.  See also the
.BR __pmLog* 
types in
.IR include/pcp/impl.h .

.SS RECORD FRAMING
.PP
The volume and meta files are divided into self-identifying records.
.TS
box,center;
c | c | c
c | c | l.
Offset	Length	Name
_
0	4	N, length of record, in bytes, including this field
4	N-8	record payload, usually starting with a 32-bit tag
N-4	4	N, length of record (again)
.TE

.SS ARCHIVE LOG LABEL
All three types of files begin with a "log label" header, which
identifies the host name, the time interval covered, and a time zone.
.TS
box,center;
c | c | c
c | c | l.
Offset	Length	Name
_
0	4	tag, PM_LOG_MAGIC | PM_LOG_VERS02=0x50052602
4	4	pid of pmlogger process that wrote file
8	4	log start time, seconds part (past UNIX epoch)
12	4	log start time, microseconds part
16	4	current log volume number (or \-1=.meta, \-2=.index)
20	64	name of collection host
80	40	time zone string ($TZ environment variable)
.TE
.PP
All fields, except for the current log volume number field, match for
all archive-related files produced by a single run of the tool.

.SH ARCHIVE VOLUME (.0, .1, ...) RECORDS

.SS pmResult

After the archive log label record, an archive volume file contains
metric values corresponding to the 
.IR pmResult
set of one 
.IR pmFetch
operation, which is almost identical to the form on disk.  The record
size may vary according to number of PMIDs being fetched, the number
of instances for their domains.  File size is limited to 2GB, due to
storage of 32-bit offsets within the .index file.
.TS
box,center;
c | c | c
c | c | l.
Offset	Length	Name
_
0	4	timestamp, seconds part (past UNIX epoch)
4	4	timestamp, microseconds part
8	4	number of PMIDs with data following
12	M	pmValueSet #0
12+M	N	pmValueSet #1
12+M+N	...	...
NOP	X	pmValueBlock #0
NOP+X	Y	pmValueBlock #1
NOP+X+Y	...	...
.TE
.PP
Records with a number-of-PMIDs equal to zero are "markers", and may
represent interruptions, missing data, or time discontinuities in
logging.

.SS pmValueSet

This subrecord represents the measurements for one metric.

.TS
box,center;
c | c | c
c | c | l.
Offset	Length	Name
_
0	4	PMID
4	4	number of values
8	4	storage mode, PM_VAL_INSITU=0 or PM_VAL_DPTR=1
12	M	pmValue #0
12+M	N	pmValue #1
12+M+N	...	...
.TE

.PP
The metric-description metadata for PMIDs is found in the .meta files.
These entries are not timestamped, so the metadata is assumed to be
unchanging throughout the archiving session.

.SS pmValue

This subrecord represents one measurement for one instance of the metric.
It is a variant type, depending on the parent pmValueSet's value-format
field.  This allows small numbers to be encoded compactly, but retain
flexibility for larger or variable-length data to be stored later in the
pmResult record.

.TS
box,center;
c | c | c
c | c | l.
Offset	Length	Name
_
0	4	number in instance-domain (or PM_IN_NULL=-1)
4	4	value (INSITU) \fIor\fR
		offset in pmResult to our pmValueBlock (DPTR)
.TE

.PP
The instance-domain metadata for PMIDs is found in the .meta files.
Since the numeric mappings may change during the lifetime of the
logging session, it is important to match up the timestamp of the
measurement record with the corresponding instance-domain record.
That is, the instance-domain corresponding to a measurement at time T
are the records with largest timestamps T' <= T.

.SS pmValueBlock

Instances of this subrecord are placed at the end of the 
.IR pmValueSet ,
after all the 
.IR pmValue
subrecords.  Iff needed, they are padded at the end to the next-higher
32-bit boundary.

.TS
box,center;
c | c | c
c | c | l.
Offset	Length	Name
_
0	1	value type (same as \fIpmDesc.type\fR)
1	3	4 + N, the length of the subrecord
4	N	bytes that make up the raw value
4+N	0-3	padding (not included in the 4+N length field)
.TE

Note that for
.IR PM_TYPE_STRING ,
the length includes an explicit NUL terminator byte.
For
.IR PM_TYPE_EVENT ,
the value bytestring is further structured.

.SS pmEventArray

.IR (TBD)

.SH METADATA FILE (.meta) RECORDS

After the archive log label record, the metadata file contains
interleaved metric-description and timestamped instance-domain
descriptors.  File size is limited to 2GB, due to storage of 32-bit
offsets within the .index file.  Unlike the archive volumes, these
records are not forced to 32-bit alignment!  See also
.IR src/libpcp/src/logmeta.c .

.SS pmDesc 

Instances of this record represent the metric description, giving a
name, type, instance-domain identifier, and a set of names to each
PMID used in the archive volume.

.TS
box,center;
c | c | c
c | c | l.
Offset	Length	Name
_
0	4	tag, TYPE_DESC=1
4	4	pmid
8	4	type (PM_TYPE_*)
12	4	instance domain number
16	4	semantics of value (PM_SEM_*)
20	4	units: bit-packed pmUnits
4	4	number of alternative names for this PMID
28	4	N: number of bytes in this name
32	N	bytes of the name, no NUL terminator nor padding
32+N	4	N2: number of bytes in next name 
36+N	N2	bytes of the name, no NUL terminator nor padding
\...	...	...
.TE

.SS pmLogIndom

Instances of this record represent the number-string mapping table of
an instance domain.  The instance domain number will have already been
mentioned in a prior 
.IR pmDesc
record.  Since new instances may appear over a long archiving run, these
records are timestamped, and must be searched when decoding 
.IR pmResult
records from the main archive volumes.  Instance names may be reused
between instance numbers, so an offset-based string table is used that
could permit sharing.
 
.TS
box,center;
c | c | c
c | c | l.
Offset	Length	Name
_
0	4	tag, TYPE_INDOM=2
4	4	timestamp, seconds part (past UNIX epoch)
8	4	timestamp, microseconds part
12	4	instance domain number
16	4	N: number of instances in domain, normally >0
20	4	first instance number
24	4	first offset into string table (see below)
28	4	second instance number (if appropriate)
32	4	second offset into string table (etc.)
\...	...     ...
20+8*N	M	base of string table, containing
		packed, NUL-terminated instance names
.TE
.PP
Records of this form \fIreplace\fR the existing instance-domain: prior
records are not searched for resolving instance numbers in measurements
after this timestamp.
 
.SH INDEX FILE (.index) RECORDS

After the archive log label record, the temporal index file contains a
plainly concatenated, unframed group of tuples, which relate timestamps to
32-bit seek offsets in the volume and meta files.  (This limits those
files to 2GB in size.)  These records are fixed-size, fixed-format,
and are \fInot\fR enclosed in the standard length/payload/length
wrapper: they just take up the entire remainder of the .index file.
See also
.IR src/libpcp/src/logutil.c .

.TS
box,center;
c | c | c
c | c | l.
Offset	Length	Name
_
0	4	event time, seconds part (past UNIX epoch)
4	4	event time, microseconds part
8	4	archive volume number (0...N)
12	4	byte offset in .meta file of pmDesc or pmLogIndom
16	4	byte offset in archive volume file of pmResult
.TE

Since temporal indexes are optional, and exist only to speed up
time-wise random access of metrics and their metadata, index records
are emitted only intermittently.  An archive reader program should not
presume any particular rate of data flow into the index.  However,
common events that may trigger a new temporal-index record include
changes in instance-domains, switching over to a new archive volume,
just starting or stopping logging.  One reliable invariant however is
that, for each index entry, there are to be no meta or archive-volume
records with a timestamp after that in the index, but physically
before the byte-offset in the index.

.PP
.SH SEE ALSO
.BR PCPIntro (1),
.BR PMAPI (3),
.BR pmlogger (1),
.BR pmdumplog (1),
.BR pmafm (1),
.BR pcp.conf (5),
and
.BR pcp.env (5).