This repository has been archived by the owner on Sep 3, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsystem_test.cfg
304 lines (262 loc) · 20.5 KB
/
system_test.cfg
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
R"AIR(
This configuration file is used as an AIR fundamental setting.
All of setting data would be interpreted at compile-time.
If this configuration syntax is invalid, it means build error may occur.
Paragraphs are organized within sqaure brackets at the beginning and end.
Sentences must be enclosed in double quotation marks.
In paragraph, several sentences could be exist. Here is an example.
[Paragraph1] "Sentence1" "Sentence2" "Sentence3" [/Paragraph2]
User should not change paragraphs.
User could change or add/remove sentences.
- DEFAULT paragraph contains default behavior.
This paragraph must have only one sentence which has key:value pairs below.
* AirBuild {Mandatory key, Valid value: True/False}
: False value means all AIR API do nothing and all the other options below is useless.
So that target application might be built without AIR library at compile-time(depending on optimization).
User can not control this option at run-time.
* StreamingInterval {Mandatory key, Valid value: 1~99 (seconds)}
: AIR internally collects raw sampled data and calculates it to make statistics result.
StreamingInterval key means periodic base time for calculating & saving the result.
For example, when this value is set to 3, every 3 seconds, sampled data during 3 seconds will be calculated
and the statistics result will be sent to the file(/tmp/air_yyyymmdd_pid.json).
User can control this option by air_cli, air_tui at run-time.
* FileWrite {Mandatory key, Valid value: On/Off}
: Off value means AIR do not write the statistics result to the file.
User can control this option by air_cli at run-time.
* RemainingFileCount {Mandatory key, Valid value: 1~99 (files = days)}
: If FileWrite value is On, AIR keeps the count of files in the latest date.
This option could prevent it from being full of local disk.
User can control this option by air_cli at run-time.
* NodeBuild {Mandatory key, Valid value: True/False}
: False value means airlog(...) API do nothing but other AIR business logic works.
If a sentence has not this option in GROUP and NODE paragraph, that follows DEFAULT paragraph's rule.
User can not control this option at run-time.
* NodeRun {Mandatory, Valid value: On/Off}
: Off value means airlog(...) API stop logging. On value means airlog(...) API keep logging.
If a sentence has not this option in GROUP and NODE paragraph, that follows DEFAULT paragraph's rule.
User can control this option by air_cli, air_tui at run-time.
* NodeIndexSize {Mandatory, Valid value: 1~999}
: NodeIndex could be used to profiling numerical separation for the same NODE sentence.
For example, when NodeIndexSize value is set to 10, user can distinguish 10 maximum different(hashed)
statistics data for the same NODE sentence. The range of the NodeIndex is the same as the range of uint64_t.
When AIR build, NodeIndexSize is one of the factor to decide memory pool size.
User can not control this option at run-time.
[DEFAULT]
"AirBuild: True, StreamingInterval: 3, FileWrite: On, RemainingFileCount: 2,
NodeBuild: True, NodeRun: On, NodeIndexSize: 10"
[/DEFAULT]
- GROUP paragraph defines group behavior.
GROUP sentences may have node related behavior(NodeBuild, NodeRun, ...) such as DEFAULT sentence.
However, it's not necessary but optional.
If a GROUP sentence has a different value of NodeRun, group rule has more higher priority than default rule.
So that, it follows GROUP sentence's NodeRun value. If not defined NodeRun, it follows default behavior.
This paragraph could have several sentences which have key:value pairs below.
* Group {Mandatory, Valid value: unique string in GROUP paragraph}
: Name of group, this value has to be unique in GROUP paragraph without space.
User can not control this option at run-time.
* NodeBuild {Optional, Valid value: True/False}
: Same as default rule
* NodeRun {Optional, Valid value: On/Off}
: Same as default rule
* NodeIndexSize {Optional, Valid value: 1~999}
: Same as default rule
[GROUP]
"Group:SUBMIT, NodeIndexSize: 5"
"Group:COMPLETE"
"Group:COMMON"
"Group:UNGROUPED, NodeBuild: True"
[/GROUP]
- FILTER paragraph defines semantic separation for the NODE sentence.
This paragraph could have several sentences which have key:value pairs below.
* Filter {Mandatory, Valid value: unique enum name in target application}
: Name of filter, this value is used as enum name in target application cause of C-style API extension.
* Item {Mandatory, Valid value: unique enumerator in target application}
: This value is used as enumerator in target application. It's organized within round bracket.
In round bracket, number of enumerators could be exist. Here is an example.
(TYPE_A, TYPE_B, TYPE_C)
Also, range expression with suffix(_#number) is possible. Here is an example.
(TYPE_1 ... TYPE_30)
[FILTER]
"Filter: Base, Item: (base)"
"Filter: IO, Item: (read, write)"
"Filter: Thread, Item: (submit, process, complete)"
"Filter: Range, Item: (range_0 ... range_3)"
[/FILTER]
- BUCKET paragraph defines histogram's bucket range, size and scale.
Only histogram type NODE sentence can have and must have a Bucket option.
Depending on Scale notation, each BUCKET sentence is distinguished a linear type or a exponential type.
This paragraph could have several sentences which have key:value pairs below.
* Bucket {Mandatory, Valid value: unique string in BUCKET paragraph}
: Name of bucket, this value has to be unique in BUCKET paragraph without space.
User can not control this option at run-time.
* Scale {Mandatory, Valid value: unsigned integer or 2^~10^}
: This value means range of each bucket.
If this value includes circumflex symbol(^), it's exponential type. Or not, it's linear type.
For example, "Bucket: BUCKET_1, Bounds: [0, 100), Scale: 10" is a linear type and bucket scope is 10.
Bucket's ranges are 0 <= bucket[0] < 9, 10 <= bucket[1] < 20, ..., 90 <= bucket[9] < 100
"Bucket: BUCKET_4, Bounds: [2^0, 2^10), Scale: 2^" is a exponential type and bucket scope is 2^.
Bucket's ranges are 1 <= bucket[0] < 2, 2 <= bucket[1] < 4, ..., 512 <= bucket[9] < 1024
"Bucket: BUCKET_6, Bounds: (-10^3, 10^5), Scale: 10^" is a exponential type and bucket scope is 10^.
Bucket's ranges are -1000 < bucket[0] <= -100, -100 < bucket[1] <= -10, -10 < bucket[2] <= -1,
0 <= bucket[3] <= 0, 1 <= bucket[4] < 10, ..., 10000 <= bucket[8] < 100000
* Bounds {Mandatory, Valid value: nations for intervals}
: This value basically follows mathematics interval. (a, b] = {x -> integer(^exponent), a < x <= b}
'a' is a lower boundary and 'b' is a upper boundary.
In a linear type BUCKET sentence, notaion has to be '[ , )' so that it's easy to get bucket size.
Bucket size is ((b - a) / scale). If bucket size exceed 20, syntax error will occur at compile-time.
In a exponential type BUCKET sentence, if a > 0, notation has to be '[ , )',
else if b < 0, notation has to be '( , ]', else notation has to be '( , )'.
'a' and 'b' have to be defined scale_value^x.
[BUCKET]
"Bucket: BUCKET_1, Bounds: [0, 100), Scale: 10"
"Scale: 3, Bucket: BUCKET_2, Bounds: [33, 66)"
"Bounds: [-100, 80), Scale: 20, Bucket: BUCKET_3"
"Bucket: BUCKET_4, Bounds: [2^0, 2^10), Scale: 2^"
"Bucket: BUCKET_5, Bounds: (-4^6, -4^2], Scale: 2^"
"Bucket: BUCKET_6, Bounds: (-10^3, 10^5), Scale: 10^"
[/BUCKET]
- NODE paragraph defines NODE sentences that tracing point of code with specific data type.
This paragraph could have several sentences which have key:value pairs below.
* Node {Mandatory, Valid value: unique enumerator in target application}
: Name of node, this value is used as first parameter of airlog(...) API.
For example, C++ style --> airlog("NodeA", ...), C style --> AIRLOG(NodeA, ...)
* Filter {Mandatory, Valid value: Filter name}
: Second parameter value of airlog(...) API has to be one of the Item from this Filter.
* Type {Mandatory, Valid value: Count/Histogram/Latency/Performance/Queue/Utilization}
: Forth parameter value of airlog(...) API is calculated differently according to the type value.
Count --> +/- count
Histogram --> value within bucket bounds
Latency --> unique key for matching between start point and end point
Performance --> io size & io type
Queue --> queue depth
Utilization --> usage(tick, size, ...)
* Group {Mandatory, Valid value: Group name}
: If a NODE sentence doesn't have optional key/value pairs below, those rules follow this group behavior.
If a NODE sentence has a different value of Run, node rule has more higher priority than group rule.
* Build {Optional, Valid value: True/False}
: Same as DEFAULT rule
* Run {Optional, Valid value: On/Off}
: Same as DEFAULT rule
* IndexSize {Optional, Valid value: 1~999}
: Same as DEFAULT rule
* Bucket {Mandatory(Histogram type only), Valid value: Bucket name}
: Only histogram type NODE sentence can have Bucket option,
otherwise syntax error will occur at compile-time.
[NODE]
"Node: PERF_BENCHMARK, Filter: IO, Type: Performance, Group: COMMON"
"Node: LAT_SUBMIT, Filter: Range, Type: Latency, Group: SUBMIT"
"Node: LAT_PROCESS, Filter: Range, Type: Latency, Group: COMMON"
"Node: LAT_COMPLETE, Filter: Range, Type: Latency, Group: COMPLETE"
"Node: LAT_IO_PATH, Filter: Range, Type: Latency, Group: COMMON, IndexSize: 3"
"Node: Q_SUBMISSION, Filter: Base, Type: Queue, Group: SUBMIT"
"Node: Q_COMPLETION, Filter: Base, Type: Queue, Group: COMPLETE, Build: False"
"Node: UTIL_SUBMIT_THR, Filter: Thread, Type: Utilization, Group: SUBMIT"
"Node: CNT_TEST_EVENT, Filter: Thread, Type: Count, Group: SUBMIT, IndexSize: 10"
"Node: HIST_SAMPLE_1, Filter: Range, Type: Histogram, Group: COMMON, IndexSize: 10, Bucket: BUCKET_1"
"Node: HIST_SAMPLE_2, Filter: Range, Type: Histogram, Group: COMMON, IndexSize: 10, Bucket: BUCKET_2"
"Node: HIST_SAMPLE_3, Filter: Range, Type: Histogram, Group: COMMON, IndexSize: 10, Bucket: BUCKET_3"
"Node: HIST_SAMPLE_4, Filter: Range, Type: Histogram, Group: COMMON, IndexSize: 10, Bucket: BUCKET_4"
"Node: HIST_SAMPLE_5, Filter: Range, Type: Histogram, Group: COMMON, IndexSize: 10, Bucket: BUCKET_5"
"Node: HIST_SAMPLE_6, Filter: Range, Type: Histogram, Group: COMMON, IndexSize: 10, Bucket: BUCKET_6"
"Node: LAT_DUMMY_00, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_01, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_02, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_03, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_04, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_05, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_06, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_07, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_08, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_09, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_10, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_11, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_12, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_13, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_14, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_15, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_16, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_17, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_18, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_19, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_20, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_21, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_22, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_23, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_24, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_25, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_26, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_27, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_28, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_29, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_30, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_31, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_32, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_33, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_34, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_35, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_36, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_37, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_38, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_39, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_40, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_41, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_42, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_43, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_44, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_45, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_46, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_47, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_48, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_49, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_50, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_51, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_52, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_53, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_54, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_55, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_56, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_57, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_58, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_59, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_60, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_61, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_62, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_63, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_64, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_65, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_66, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_67, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_68, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_69, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_70, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_71, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_72, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_73, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_74, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_75, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_76, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_77, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_78, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_79, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_80, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_81, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_82, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_83, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_84, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_85, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_86, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_87, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_88, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_89, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_90, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_91, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_92, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_93, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_94, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_95, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_96, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_97, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_98, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
"Node: LAT_DUMMY_99, Filter: Range, Type: Latency, Group: UNGROUPED, IndexSize: 100"
[/NODE]
)AIR"