1*6dbdd20aSAndroid Build Coastguard Worker# System calls 2*6dbdd20aSAndroid Build Coastguard Worker 3*6dbdd20aSAndroid Build Coastguard WorkerOn Linux and Android (userdebug builds only) Perfetto can keep track of system 4*6dbdd20aSAndroid Build Coastguard Workercalls. 5*6dbdd20aSAndroid Build Coastguard Worker 6*6dbdd20aSAndroid Build Coastguard WorkerRight now only the syscall number is recorded in the trace, the arguments are 7*6dbdd20aSAndroid Build Coastguard Workernot stored to limit the trace size overhead. 8*6dbdd20aSAndroid Build Coastguard Worker 9*6dbdd20aSAndroid Build Coastguard WorkerAt import time, the Trace Processor uses an internal syscall mapping table, 10*6dbdd20aSAndroid Build Coastguard Workercurrently supporting x86, x86_64, ArmEabi, aarch32 and aarch64. These tables are 11*6dbdd20aSAndroid Build Coastguard Workergenerated through the 12*6dbdd20aSAndroid Build Coastguard Worker[`extract_linux_syscall_tables`](/tools/extract_linux_syscall_tables) script. 13*6dbdd20aSAndroid Build Coastguard Worker 14*6dbdd20aSAndroid Build Coastguard Worker## UI 15*6dbdd20aSAndroid Build Coastguard Worker 16*6dbdd20aSAndroid Build Coastguard WorkerAt the UI level system calls are shown inlined with the per-thread slice tracks: 17*6dbdd20aSAndroid Build Coastguard Worker 18*6dbdd20aSAndroid Build Coastguard Worker 19*6dbdd20aSAndroid Build Coastguard Worker 20*6dbdd20aSAndroid Build Coastguard Worker## SQL 21*6dbdd20aSAndroid Build Coastguard Worker 22*6dbdd20aSAndroid Build Coastguard WorkerAt the SQL level, syscalls are no different than any other userspace slice 23*6dbdd20aSAndroid Build Coastguard Workerevent. They get interleaved in the per-thread slice stack and can be easily 24*6dbdd20aSAndroid Build Coastguard Workerfiltered by looking for the 'sys\_' prefix: 25*6dbdd20aSAndroid Build Coastguard Worker 26*6dbdd20aSAndroid Build Coastguard Worker```sql 27*6dbdd20aSAndroid Build Coastguard Workerselect ts, dur, t.name as thread, s.name, depth from slices as s 28*6dbdd20aSAndroid Build Coastguard Workerleft join thread_track as tt on s.track_id = tt.id 29*6dbdd20aSAndroid Build Coastguard Workerleft join thread as t on tt.utid = t.utid 30*6dbdd20aSAndroid Build Coastguard Workerwhere s.name like 'sys_%' 31*6dbdd20aSAndroid Build Coastguard Worker``` 32*6dbdd20aSAndroid Build Coastguard Worker 33*6dbdd20aSAndroid Build Coastguard Worker| ts | dur | thread | name | 34*6dbdd20aSAndroid Build Coastguard Worker| --------------- | --------- | --------------- | --------------- | 35*6dbdd20aSAndroid Build Coastguard Worker| 856325324372751 | 439867648 | s.nexuslauncher | sys_epoll_pwait | 36*6dbdd20aSAndroid Build Coastguard Worker| 856325324376970 | 990 | FpsThrottlerThr | sys_recvfrom | 37*6dbdd20aSAndroid Build Coastguard Worker| 856325324378376 | 2657 | surfaceflinger | sys_ioctl | 38*6dbdd20aSAndroid Build Coastguard Worker| 856325324419574 | 1250 | android.anim.lf | sys_recvfrom | 39*6dbdd20aSAndroid Build Coastguard Worker| 856325324428168 | 27344 | android.anim.lf | sys_ioctl | 40*6dbdd20aSAndroid Build Coastguard Worker| 856325324451345 | 573 | FpsThrottlerThr | sys_getuid | 41*6dbdd20aSAndroid Build Coastguard Worker 42*6dbdd20aSAndroid Build Coastguard Worker## TraceConfig 43*6dbdd20aSAndroid Build Coastguard Worker 44*6dbdd20aSAndroid Build Coastguard Worker```protobuf 45*6dbdd20aSAndroid Build Coastguard Workerdata_sources: { 46*6dbdd20aSAndroid Build Coastguard Worker config { 47*6dbdd20aSAndroid Build Coastguard Worker name: "linux.ftrace" 48*6dbdd20aSAndroid Build Coastguard Worker ftrace_config { 49*6dbdd20aSAndroid Build Coastguard Worker ftrace_events: "raw_syscalls/sys_enter" 50*6dbdd20aSAndroid Build Coastguard Worker ftrace_events: "raw_syscalls/sys_exit" 51*6dbdd20aSAndroid Build Coastguard Worker } 52*6dbdd20aSAndroid Build Coastguard Worker } 53*6dbdd20aSAndroid Build Coastguard Worker} 54*6dbdd20aSAndroid Build Coastguard Worker``` 55