xref: /aosp_15_r20/external/perfetto/test/stress_test/README.md (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker# Perfetto Stress Test
2*6dbdd20aSAndroid Build Coastguard Worker
3*6dbdd20aSAndroid Build Coastguard WorkerThis is a test harness that to stress test the client library (DataSource-level
4*6dbdd20aSAndroid Build Coastguard Workeronly for now).
5*6dbdd20aSAndroid Build Coastguard Worker
6*6dbdd20aSAndroid Build Coastguard WorkerThe test is based on a number of configs in /test/stress_test/configs/*.cfg
7*6dbdd20aSAndroid Build Coastguard Worker(NOTE: they must be listed in configs/BUILD.gn).
8*6dbdd20aSAndroid Build Coastguard WorkerThe config is a /protos/perfetto/config/stress_test_config.proto message, which
9*6dbdd20aSAndroid Build Coastguard Workerembeds the configuration of the test and a whole trace config.
10*6dbdd20aSAndroid Build Coastguard Worker
11*6dbdd20aSAndroid Build Coastguard WorkerEach configs defines a testing scenario, determining the general trace config
12*6dbdd20aSAndroid Build Coastguard Workerand all the settings of the test (e.g., how many producer processes to spawn,
13*6dbdd20aSAndroid Build Coastguard Workerthe write timings).
14*6dbdd20aSAndroid Build Coastguard Worker
15*6dbdd20aSAndroid Build Coastguard WorkerThe test is based on exec()-ing `traced` (the tracing service), `perfetto` (the
16*6dbdd20aSAndroid Build Coastguard Workerconsumer cmdline client) and a variable number of `stress_producer` instances.
17*6dbdd20aSAndroid Build Coastguard Worker
18*6dbdd20aSAndroid Build Coastguard Worker`stress_producer` emits events at a configurable rate, writing predictable
19*6dbdd20aSAndroid Build Coastguard Workersequences of numbers / string, so that the test harness can easily detect
20*6dbdd20aSAndroid Build Coastguard Workercorruptions, out-of-order events or gaps.
21*6dbdd20aSAndroid Build Coastguard Worker
22*6dbdd20aSAndroid Build Coastguard WorkerAfter running each test, the `stress_test` binary reads back the trace and
23*6dbdd20aSAndroid Build Coastguard Workerperforms a bunch of checks:
24*6dbdd20aSAndroid Build Coastguard Worker
25*6dbdd20aSAndroid Build Coastguard Worker- Checks that the number of sequences is exactly equal to #processes x #threads.
26*6dbdd20aSAndroid Build Coastguard Worker- Checks that each sequence has all the expected packets in the right sequence
27*6dbdd20aSAndroid Build Coastguard Worker- Checks the payload and correctness of proto nesting of each trace packet.
28*6dbdd20aSAndroid Build Coastguard Worker- Reports CPU/Memory/Context-switch numbers for the service and producer
29*6dbdd20aSAndroid Build Coastguard Worker  processes.
30*6dbdd20aSAndroid Build Coastguard Worker
31*6dbdd20aSAndroid Build Coastguard WorkerEach test config is isolated from the others. All processes are killed and
32*6dbdd20aSAndroid Build Coastguard Workerre-spawned for each test.
33*6dbdd20aSAndroid Build Coastguard Worker
34*6dbdd20aSAndroid Build Coastguard WorkerThe stdout/err of each process is saved in a dedicated /tmp/ folder, as well as
35*6dbdd20aSAndroid Build Coastguard Workerthe resulting trace.
36*6dbdd20aSAndroid Build Coastguard Worker
37*6dbdd20aSAndroid Build Coastguard Worker## Building and running the test
38*6dbdd20aSAndroid Build Coastguard Worker
39*6dbdd20aSAndroid Build Coastguard Worker```bash
40*6dbdd20aSAndroid Build Coastguard Worker# This will recursively build traced, perfetto and stress_producer.
41*6dbdd20aSAndroid Build Coastguard Workerninja -C out/default stress_test
42*6dbdd20aSAndroid Build Coastguard Worker
43*6dbdd20aSAndroid Build Coastguard Workerout/default/stress_test
44*6dbdd20aSAndroid Build Coastguard Worker```
45*6dbdd20aSAndroid Build Coastguard Worker
46*6dbdd20aSAndroid Build Coastguard Workerwill output:
47*6dbdd20aSAndroid Build Coastguard Worker
48*6dbdd20aSAndroid Build Coastguard Worker```txt
49*6dbdd20aSAndroid Build Coastguard Worker[307.909] stress_test.cc:116      Saving test results in /tmp/perfetto-ltIBJgA0
50*6dbdd20aSAndroid Build Coastguard Worker
51*6dbdd20aSAndroid Build Coastguard Worker===============================================================
52*6dbdd20aSAndroid Build Coastguard WorkerConfig: simple
53*6dbdd20aSAndroid Build Coastguard Worker===============================================================
54*6dbdd20aSAndroid Build Coastguard WorkerMetric               Expected   Actual
55*6dbdd20aSAndroid Build Coastguard Worker------               --------   ------
56*6dbdd20aSAndroid Build Coastguard Worker#Errors              0          0
57*6dbdd20aSAndroid Build Coastguard WorkerDuration [ms]        3000       3109
58*6dbdd20aSAndroid Build Coastguard WorkerNum threads          1          1
59*6dbdd20aSAndroid Build Coastguard WorkerNum packets          1000       1001
60*6dbdd20aSAndroid Build Coastguard WorkerTrace size [KB]      168        170
61*6dbdd20aSAndroid Build Coastguard WorkerSvc RSS [MB]         4          2
62*6dbdd20aSAndroid Build Coastguard WorkerProd RSS [MB]        ---        1
63*6dbdd20aSAndroid Build Coastguard WorkerSvc CPU [ms]         ---        10
64*6dbdd20aSAndroid Build Coastguard WorkerProd CPU [ms]        ---        32
65*6dbdd20aSAndroid Build Coastguard WorkerSvc #ctxswitch       ---        103 / 20
66*6dbdd20aSAndroid Build Coastguard WorkerProd #ctxswitch      ---        1022 / 1
67*6dbdd20aSAndroid Build Coastguard Worker
68*6dbdd20aSAndroid Build Coastguard Worker===============================================================
69*6dbdd20aSAndroid Build Coastguard WorkerConfig: bursts
70*6dbdd20aSAndroid Build Coastguard Worker===============================================================
71*6dbdd20aSAndroid Build Coastguard WorkerMetric               Expected   Actual
72*6dbdd20aSAndroid Build Coastguard Worker------               --------   ------
73*6dbdd20aSAndroid Build Coastguard Worker#Errors              0          0
74*6dbdd20aSAndroid Build Coastguard WorkerDuration [ms]        2000       2381
75*6dbdd20aSAndroid Build Coastguard WorkerNum threads          10         10
76*6dbdd20aSAndroid Build Coastguard WorkerNum packets          2675       20021
77*6dbdd20aSAndroid Build Coastguard WorkerTrace size [KB]      449        11063
78*6dbdd20aSAndroid Build Coastguard WorkerSvc RSS [MB]         32         17
79*6dbdd20aSAndroid Build Coastguard WorkerProd RSS [MB]        ---        1
80*6dbdd20aSAndroid Build Coastguard WorkerSvc CPU [ms]         ---        98
81*6dbdd20aSAndroid Build Coastguard WorkerProd CPU [ms]        ---        17
82*6dbdd20aSAndroid Build Coastguard WorkerSvc #ctxswitch       ---        704 / 1327
83*6dbdd20aSAndroid Build Coastguard WorkerProd #ctxswitch      ---        421 / 1
84*6dbdd20aSAndroid Build Coastguard Worker```
85*6dbdd20aSAndroid Build Coastguard Worker
86*6dbdd20aSAndroid Build Coastguard Worker```bash
87*6dbdd20aSAndroid Build Coastguard Worker$ ls -Rlh /tmp/perfetto-ltIBJgA0
88*6dbdd20aSAndroid Build Coastguard Workertotal 0
89*6dbdd20aSAndroid Build Coastguard Workerdrwxr-xr-x  16 primiano  wheel   512B  5 Aug 09:16 bursts
90*6dbdd20aSAndroid Build Coastguard Workerdrwxr-xr-x   9 primiano  wheel   288B  5 Aug 09:16 simple
91*6dbdd20aSAndroid Build Coastguard Workerdrwxr-xr-x  38 primiano  wheel   1.2K  5 Aug 09:16 the_storm
92*6dbdd20aSAndroid Build Coastguard Worker
93*6dbdd20aSAndroid Build Coastguard Worker/tmp/perfetto-ltIBJgA0/bursts:
94*6dbdd20aSAndroid Build Coastguard Workertotal 22752
95*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel     0B  5 Aug 09:16 errors.log
96*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel   180B  5 Aug 09:16 perfetto.log
97*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel   441B  5 Aug 09:16 producer.0.log
98*6dbdd20aSAndroid Build Coastguard Worker...
99*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel   441B  5 Aug 09:16 producer.9.log
100*6dbdd20aSAndroid Build Coastguard Worker-rw-------  1 primiano  wheel    11M  5 Aug 09:16 trace
101*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel   407B  5 Aug 09:16 traced.log
102*6dbdd20aSAndroid Build Coastguard Worker
103*6dbdd20aSAndroid Build Coastguard Worker/tmp/perfetto-ltIBJgA0/simple:
104*6dbdd20aSAndroid Build Coastguard Workertotal 400
105*6dbdd20aSAndroid Build Coastguard Workersrwxr-xr-x  1 primiano  wheel     0B  5 Aug 09:16 consumer.sock
106*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel     0B  5 Aug 09:16 errors.log
107*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel   178B  5 Aug 09:16 perfetto.log
108*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel     0B  5 Aug 09:16 producer.0.log
109*6dbdd20aSAndroid Build Coastguard Workersrwxr-xr-x  1 primiano  wheel     0B  5 Aug 09:16 producer.sock
110*6dbdd20aSAndroid Build Coastguard Worker-rw-------  1 primiano  wheel   167K  5 Aug 09:16 trace
111*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel   406B  5 Aug 09:16 traced.log
112*6dbdd20aSAndroid Build Coastguard Worker
113*6dbdd20aSAndroid Build Coastguard Worker/tmp/perfetto-ltIBJgA0/the_storm:
114*6dbdd20aSAndroid Build Coastguard Workertotal 524432
115*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel     0B  5 Aug 09:16 errors.log
116*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel   184B  5 Aug 09:16 perfetto.log
117*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel     0B  5 Aug 09:16 producer.0.log
118*6dbdd20aSAndroid Build Coastguard Worker...
119*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel     0B  5 Aug 09:16 producer.127.log
120*6dbdd20aSAndroid Build Coastguard Worker-rw-------  1 primiano  wheel   248M  5 Aug 09:16 trace
121*6dbdd20aSAndroid Build Coastguard Worker-rw-r--r--  1 primiano  wheel   408B  5 Aug 09:16 traced.log
122*6dbdd20aSAndroid Build Coastguard Worker```
123*6dbdd20aSAndroid Build Coastguard Worker
124*6dbdd20aSAndroid Build Coastguard Worker## TODOs
125*6dbdd20aSAndroid Build Coastguard Worker
126*6dbdd20aSAndroid Build Coastguard WorkerThe following scenarios requires more coverage:
127*6dbdd20aSAndroid Build Coastguard Worker
128*6dbdd20aSAndroid Build Coastguard Worker- Nested messages.
129*6dbdd20aSAndroid Build Coastguard Worker- Force losses and check that the last_dropped flag is consistent.
130*6dbdd20aSAndroid Build Coastguard Worker- Flushes and scraping.
131*6dbdd20aSAndroid Build Coastguard Worker- Report data losses in the test output.
132*6dbdd20aSAndroid Build Coastguard Worker- Multibuffer scenarios.
133*6dbdd20aSAndroid Build Coastguard Worker- write_into_file=true.
134*6dbdd20aSAndroid Build Coastguard Worker- Vary page size, smb size.
135