1# System calls 2 3On Linux and Android (userdebug builds only) Perfetto can keep track of system 4calls. 5 6Right now only the syscall number is recorded in the trace, the arguments are 7not stored to limit the trace size overhead. 8 9At import time, the Trace Processor uses an internal syscall mapping table, 10currently supporting x86, x86_64, ArmEabi, aarch32 and aarch64. These tables are 11generated through the 12[`extract_linux_syscall_tables`](/tools/extract_linux_syscall_tables) script. 13 14## UI 15 16At the UI level system calls are shown inlined with the per-thread slice tracks: 17 18![](/docs/images/syscalls.png "System calls in the thread tracks") 19 20## SQL 21 22At the SQL level, syscalls are no different than any other userspace slice 23event. They get interleaved in the per-thread slice stack and can be easily 24filtered by looking for the 'sys_' prefix: 25 26```sql 27select ts, dur, t.name as thread, s.name, depth from slices as s 28left join thread_track as tt on s.track_id = tt.id 29left join thread as t on tt.utid = t.utid 30where s.name like 'sys_%' 31``` 32 33ts | dur | thread | name 34---|-----|--------|------ 35856325324372751 | 439867648 | s.nexuslauncher | sys_epoll_pwait 36856325324376970 | 990 | FpsThrottlerThr | sys_recvfrom 37856325324378376 | 2657 | surfaceflinger | sys_ioctl 38856325324419574 | 1250 | android.anim.lf | sys_recvfrom 39856325324428168 | 27344 | android.anim.lf | sys_ioctl 40856325324451345 | 573 | FpsThrottlerThr | sys_getuid 41 42## TraceConfig 43 44```protobuf 45data_sources: { 46 config { 47 name: "linux.ftrace" 48 ftrace_config { 49 ftrace_events: "raw_syscalls/sys_enter" 50 ftrace_events: "raw_syscalls/sys_exit" 51 } 52 } 53} 54``` 55