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