~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/admin-guide/workload-tracing.rst

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/admin-guide/workload-tracing.rst (Architecture m68k) and /Documentation/admin-guide/workload-tracing.rst (Architecture i386)


  1 .. SPDX-License-Identifier: (GPL-2.0+ OR CC-BY      1 .. SPDX-License-Identifier: (GPL-2.0+ OR CC-BY-4.0)
  2                                                     2 
  3 ==============================================      3 ======================================================
  4 Discovering Linux kernel subsystems used by a       4 Discovering Linux kernel subsystems used by a workload
  5 ==============================================      5 ======================================================
  6                                                     6 
  7 :Authors: - Shuah Khan <skhan@linuxfoundation.o      7 :Authors: - Shuah Khan <skhan@linuxfoundation.org>
  8           - Shefali Sharma <sshefali021@gmail.c      8           - Shefali Sharma <sshefali021@gmail.com>
  9 :maintained-by: Shuah Khan <skhan@linuxfoundati      9 :maintained-by: Shuah Khan <skhan@linuxfoundation.org>
 10                                                    10 
 11 Key Points                                         11 Key Points
 12 ==========                                         12 ==========
 13                                                    13 
 14  * Understanding system resources necessary to     14  * Understanding system resources necessary to build and run a workload
 15    is important.                                   15    is important.
 16  * Linux tracing and strace can be used to dis     16  * Linux tracing and strace can be used to discover the system resources
 17    in use by a workload. The completeness of t     17    in use by a workload. The completeness of the system usage information
 18    depends on the completeness of coverage of      18    depends on the completeness of coverage of a workload.
 19  * Performance and security of the operating s     19  * Performance and security of the operating system can be analyzed with
 20    the help of tools such as:                      20    the help of tools such as:
 21    `perf <https://man7.org/linux/man-pages/man     21    `perf <https://man7.org/linux/man-pages/man1/perf.1.html>`_,
 22    `stress-ng <https://www.mankier.com/1/stres     22    `stress-ng <https://www.mankier.com/1/stress-ng>`_,
 23    `paxtest <https://github.com/opntr/paxtest-     23    `paxtest <https://github.com/opntr/paxtest-freebsd>`_.
 24  * Once we discover and understand the workloa     24  * Once we discover and understand the workload needs, we can focus on them
 25    to avoid regressions and use it to evaluate     25    to avoid regressions and use it to evaluate safety considerations.
 26                                                    26 
 27 Methodology                                        27 Methodology
 28 ===========                                        28 ===========
 29                                                    29 
 30 `strace <https://man7.org/linux/man-pages/man1     30 `strace <https://man7.org/linux/man-pages/man1/strace.1.html>`_ is a
 31 diagnostic, instructional, and debugging tool      31 diagnostic, instructional, and debugging tool and can be used to discover
 32 the system resources in use by a workload. Onc     32 the system resources in use by a workload. Once we discover and understand
 33 the workload needs, we can focus on them to av     33 the workload needs, we can focus on them to avoid regressions and use it
 34 to evaluate safety considerations. We use stra     34 to evaluate safety considerations. We use strace tool to trace workloads.
 35                                                    35 
 36 This method of tracing using strace tells us t     36 This method of tracing using strace tells us the system calls invoked by
 37 the workload and doesn't include all the syste     37 the workload and doesn't include all the system calls that can be invoked
 38 by it. In addition, this tracing method tells      38 by it. In addition, this tracing method tells us just the code paths within
 39 these system calls that are invoked. As an exa     39 these system calls that are invoked. As an example, if a workload opens a
 40 file and reads from it successfully, then the      40 file and reads from it successfully, then the success path is the one that
 41 is traced. Any error paths in that system call     41 is traced. Any error paths in that system call will not be traced. If there
 42 is a workload that provides full coverage of a     42 is a workload that provides full coverage of a workload then the method
 43 outlined here will trace and find all possible     43 outlined here will trace and find all possible code paths. The completeness
 44 of the system usage information depends on the     44 of the system usage information depends on the completeness of coverage of a
 45 workload.                                          45 workload.
 46                                                    46 
 47 The goal is tracing a workload on a system run     47 The goal is tracing a workload on a system running a default kernel without
 48 requiring custom kernel installs.                  48 requiring custom kernel installs.
 49                                                    49 
 50 How do we gather fine-grained system informati     50 How do we gather fine-grained system information?
 51 ==============================================     51 =================================================
 52                                                    52 
 53 strace tool can be used to trace system calls      53 strace tool can be used to trace system calls made by a process and signals
 54 it receives. System calls are the fundamental      54 it receives. System calls are the fundamental interface between an
 55 application and the operating system kernel. T     55 application and the operating system kernel. They enable a program to
 56 request services from the kernel. For instance     56 request services from the kernel. For instance, the open() system call in
 57 Linux is used to provide access to a file in t     57 Linux is used to provide access to a file in the file system. strace enables
 58 us to track all the system calls made by an ap     58 us to track all the system calls made by an application. It lists all the
 59 system calls made by a process and their resul     59 system calls made by a process and their resulting output.
 60                                                    60 
 61 You can generate profiling data combining stra     61 You can generate profiling data combining strace and perf record tools to
 62 record the events and information associated w     62 record the events and information associated with a process. This provides
 63 insight into the process. "perf annotate" tool     63 insight into the process. "perf annotate" tool generates the statistics of
 64 each instruction of the program. This document     64 each instruction of the program. This document goes over the details of how
 65 to gather fine-grained information on a worklo     65 to gather fine-grained information on a workload's usage of system resources.
 66                                                    66 
 67 We used strace to trace the perf, stress-ng, p     67 We used strace to trace the perf, stress-ng, paxtest workloads to illustrate
 68 our methodology to discover resources used by      68 our methodology to discover resources used by a workload. This process can
 69 be applied to trace other workloads.               69 be applied to trace other workloads.
 70                                                    70 
 71 Getting the system ready for tracing               71 Getting the system ready for tracing
 72 ====================================               72 ====================================
 73                                                    73 
 74 Before we can get started we will show you how     74 Before we can get started we will show you how to get your system ready.
 75 We assume that you have a Linux distribution r     75 We assume that you have a Linux distribution running on a physical system
 76 or a virtual machine. Most distributions will      76 or a virtual machine. Most distributions will include strace command. Let’s
 77 install other tools that aren’t usually incl     77 install other tools that aren’t usually included to build Linux kernel.
 78 Please note that the following works on Debian     78 Please note that the following works on Debian based distributions. You
 79 might have to find equivalent packages on othe     79 might have to find equivalent packages on other Linux distributions.
 80                                                    80 
 81 Install tools to build Linux kernel and tools      81 Install tools to build Linux kernel and tools in kernel repository.
 82 scripts/ver_linux is a good way to check if yo     82 scripts/ver_linux is a good way to check if your system already has
 83 the necessary tools::                              83 the necessary tools::
 84                                                    84 
 85   sudo apt-get build-essentials flex bison yac     85   sudo apt-get build-essentials flex bison yacc
 86   sudo apt install libelf-dev systemtap-sdt-de     86   sudo apt install libelf-dev systemtap-sdt-dev libaudit-dev libslang2-dev libperl-dev libdw-dev
 87                                                    87 
 88 cscope is a good tool to browse kernel sources     88 cscope is a good tool to browse kernel sources. Let's install it now::
 89                                                    89 
 90   sudo apt-get install cscope                      90   sudo apt-get install cscope
 91                                                    91 
 92 Install stress-ng and paxtest::                    92 Install stress-ng and paxtest::
 93                                                    93 
 94   apt-get install stress-ng                        94   apt-get install stress-ng
 95   apt-get install paxtest                          95   apt-get install paxtest
 96                                                    96 
 97 Workload overview                                  97 Workload overview
 98 =================                                  98 =================
 99                                                    99 
100 As mentioned earlier, we used strace to trace     100 As mentioned earlier, we used strace to trace perf bench, stress-ng and
101 paxtest workloads to show how to analyze a wor    101 paxtest workloads to show how to analyze a workload and identify Linux
102 subsystems used by these workloads. Let's star    102 subsystems used by these workloads. Let's start with an overview of these
103 three workloads to get a better understanding     103 three workloads to get a better understanding of what they do and how to
104 use them.                                         104 use them.
105                                                   105 
106 perf bench (all) workload                         106 perf bench (all) workload
107 -------------------------                         107 -------------------------
108                                                   108 
109 The perf bench command contains multiple multi    109 The perf bench command contains multiple multi-threaded microkernel
110 benchmarks for executing different subsystems     110 benchmarks for executing different subsystems in the Linux kernel and
111 system calls. This allows us to easily measure    111 system calls. This allows us to easily measure the impact of changes,
112 which can help mitigate performance regression    112 which can help mitigate performance regressions. It also acts as a common
113 benchmarking framework, enabling developers to    113 benchmarking framework, enabling developers to easily create test cases,
114 integrate transparently, and use performance-r    114 integrate transparently, and use performance-rich tooling subsystems.
115                                                   115 
116 Stress-ng netdev stressor workload                116 Stress-ng netdev stressor workload
117 ----------------------------------                117 ----------------------------------
118                                                   118 
119 stress-ng is used for performing stress testin    119 stress-ng is used for performing stress testing on the kernel. It allows
120 you to exercise various physical subsystems of    120 you to exercise various physical subsystems of the computer, as well as
121 interfaces of the OS kernel, using "stressor-s    121 interfaces of the OS kernel, using "stressor-s". They are available for
122 CPU, CPU cache, devices, I/O, interrupts, file    122 CPU, CPU cache, devices, I/O, interrupts, file system, memory, network,
123 operating system, pipelines, schedulers, and v    123 operating system, pipelines, schedulers, and virtual machines. Please refer
124 to the `stress-ng man-page <https://www.mankie    124 to the `stress-ng man-page <https://www.mankier.com/1/stress-ng>`_ to
125 find the description of all the available stre    125 find the description of all the available stressor-s. The netdev stressor
126 starts specified number (N) of workers that ex    126 starts specified number (N) of workers that exercise various netdevice
127 ioctl commands across all the available networ    127 ioctl commands across all the available network devices.
128                                                   128 
129 paxtest kiddie workload                           129 paxtest kiddie workload
130 -----------------------                           130 -----------------------
131                                                   131 
132 paxtest is a program that tests buffer overflo    132 paxtest is a program that tests buffer overflows in the kernel. It tests
133 kernel enforcements over memory usage. General    133 kernel enforcements over memory usage. Generally, execution in some memory
134 segments makes buffer overflows possible. It r    134 segments makes buffer overflows possible. It runs a set of programs that
135 attempt to subvert memory usage. It is used as    135 attempt to subvert memory usage. It is used as a regression test suite for
136 PaX, but might be useful to test other memory     136 PaX, but might be useful to test other memory protection patches for the
137 kernel. We used paxtest kiddie mode which look    137 kernel. We used paxtest kiddie mode which looks for simple vulnerabilities.
138                                                   138 
139 What is strace and how do we use it?              139 What is strace and how do we use it?
140 ====================================              140 ====================================
141                                                   141 
142 As mentioned earlier, strace which is a useful    142 As mentioned earlier, strace which is a useful diagnostic, instructional,
143 and debugging tool and can be used to discover    143 and debugging tool and can be used to discover the system resources in use
144 by a workload. It can be used:                    144 by a workload. It can be used:
145                                                   145 
146  * To see how a process interacts with the ker    146  * To see how a process interacts with the kernel.
147  * To see why a process is failing or hanging.    147  * To see why a process is failing or hanging.
148  * For reverse engineering a process.             148  * For reverse engineering a process.
149  * To find the files on which a program depend    149  * To find the files on which a program depends.
150  * For analyzing the performance of an applica    150  * For analyzing the performance of an application.
151  * For troubleshooting various problems relate    151  * For troubleshooting various problems related to the operating system.
152                                                   152 
153 In addition, strace can generate run-time stat    153 In addition, strace can generate run-time statistics on times, calls, and
154 errors for each system call and report a summa    154 errors for each system call and report a summary when program exits,
155 suppressing the regular output. This attempts     155 suppressing the regular output. This attempts to show system time (CPU time
156 spent running in the kernel) independent of wa    156 spent running in the kernel) independent of wall clock time. We plan to use
157 these features to get information on workload     157 these features to get information on workload system usage.
158                                                   158 
159 strace command supports basic, verbose, and st    159 strace command supports basic, verbose, and stats modes. strace command when
160 run in verbose mode gives more detailed inform    160 run in verbose mode gives more detailed information about the system calls
161 invoked by a process.                             161 invoked by a process.
162                                                   162 
163 Running strace -c generates a report of the pe    163 Running strace -c generates a report of the percentage of time spent in each
164 system call, the total time in seconds, the mi    164 system call, the total time in seconds, the microseconds per call, the total
165 number of calls, the count of each system call    165 number of calls, the count of each system call that has failed with an error
166 and the type of system call made.                 166 and the type of system call made.
167                                                   167 
168  * Usage: strace <command we want to trace>       168  * Usage: strace <command we want to trace>
169  * Verbose mode usage: strace -v <command>        169  * Verbose mode usage: strace -v <command>
170  * Gather statistics: strace -c <command>         170  * Gather statistics: strace -c <command>
171                                                   171 
172 We used the “-c” option to gather fine-gra    172 We used the “-c” option to gather fine-grained run-time statistics in use
173 by three workloads we have chose for this anal    173 by three workloads we have chose for this analysis.
174                                                   174 
175  * perf                                           175  * perf
176  * stress-ng                                      176  * stress-ng
177  * paxtest                                        177  * paxtest
178                                                   178 
179 What is cscope and how do we use it?              179 What is cscope and how do we use it?
180 ====================================              180 ====================================
181                                                   181 
182 Now let’s look at `cscope <https://cscope.so    182 Now let’s look at `cscope <https://cscope.sourceforge.net/>`_, a command
183 line tool for browsing C, C++ or Java code-bas    183 line tool for browsing C, C++ or Java code-bases. We can use it to find
184 all the references to a symbol, global definit    184 all the references to a symbol, global definitions, functions called by a
185 function, functions calling a function, text s    185 function, functions calling a function, text strings, regular expression
186 patterns, files including a file.                 186 patterns, files including a file.
187                                                   187 
188 We can use cscope to find which system call be    188 We can use cscope to find which system call belongs to which subsystem.
189 This way we can find the kernel subsystems use    189 This way we can find the kernel subsystems used by a process when it is
190 executed.                                         190 executed.
191                                                   191 
192 Let’s checkout the latest Linux repository a    192 Let’s checkout the latest Linux repository and build cscope database::
193                                                   193 
194   git clone git://git.kernel.org/pub/scm/linux    194   git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux
195   cd linux                                        195   cd linux
196   cscope -R -p10  # builds cscope.out database    196   cscope -R -p10  # builds cscope.out database before starting browse session
197   cscope -d -p10  # starts browse session on c    197   cscope -d -p10  # starts browse session on cscope.out database
198                                                   198 
199 Note: Run "cscope -R -p10" to build the databa    199 Note: Run "cscope -R -p10" to build the database and c"scope -d -p10" to
200 enter into the browsing session. cscope by def    200 enter into the browsing session. cscope by default cscope.out database.
201 To get out of this mode press ctrl+d. -p optio    201 To get out of this mode press ctrl+d. -p option is used to specify the
202 number of file path components to display. -p1    202 number of file path components to display. -p10 is optimal for browsing
203 kernel sources.                                   203 kernel sources.
204                                                   204 
205 What is perf and how do we use it?                205 What is perf and how do we use it?
206 ==================================                206 ==================================
207                                                   207 
208 Perf is an analysis tool based on Linux 2.6+ s    208 Perf is an analysis tool based on Linux 2.6+ systems, which abstracts the
209 CPU hardware difference in performance measure    209 CPU hardware difference in performance measurement in Linux, and provides
210 a simple command line interface. Perf is based    210 a simple command line interface. Perf is based on the perf_events interface
211 exported by the kernel. It is very useful for     211 exported by the kernel. It is very useful for profiling the system and
212 finding performance bottlenecks in an applicat    212 finding performance bottlenecks in an application.
213                                                   213 
214 If you haven't already checked out the Linux m    214 If you haven't already checked out the Linux mainline repository, you can do
215 so and then build kernel and perf tool::          215 so and then build kernel and perf tool::
216                                                   216 
217   git clone git://git.kernel.org/pub/scm/linux    217   git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux
218   cd linux                                        218   cd linux
219   make -j3 all                                    219   make -j3 all
220   cd tools/perf                                   220   cd tools/perf
221   make                                            221   make
222                                                   222 
223 Note: The perf command can be built without bu    223 Note: The perf command can be built without building the kernel in the
224 repository and can be run on older kernels. Ho    224 repository and can be run on older kernels. However matching the kernel
225 and perf revisions gives more accurate informa    225 and perf revisions gives more accurate information on the subsystem usage.
226                                                   226 
227 We used "perf stat" and "perf bench" options.     227 We used "perf stat" and "perf bench" options. For a detailed information on
228 the perf tool, run "perf -h".                     228 the perf tool, run "perf -h".
229                                                   229 
230 perf stat                                         230 perf stat
231 ---------                                         231 ---------
232 The perf stat command generates a report of va    232 The perf stat command generates a report of various hardware and software
233 events. It does so with the help of hardware c    233 events. It does so with the help of hardware counter registers found in
234 modern CPUs that keep the count of these activ    234 modern CPUs that keep the count of these activities. "perf stat cal" shows
235 stats for cal command.                            235 stats for cal command.
236                                                   236 
237 Perf bench                                        237 Perf bench
238 ----------                                        238 ----------
239 The perf bench command contains multiple multi    239 The perf bench command contains multiple multi-threaded microkernel
240 benchmarks for executing different subsystems     240 benchmarks for executing different subsystems in the Linux kernel and
241 system calls. This allows us to easily measure    241 system calls. This allows us to easily measure the impact of changes,
242 which can help mitigate performance regression    242 which can help mitigate performance regressions. It also acts as a common
243 benchmarking framework, enabling developers to    243 benchmarking framework, enabling developers to easily create test cases,
244 integrate transparently, and use performance-r    244 integrate transparently, and use performance-rich tooling.
245                                                   245 
246 "perf bench all" command runs the following be    246 "perf bench all" command runs the following benchmarks:
247                                                   247 
248  * sched/messaging                                248  * sched/messaging
249  * sched/pipe                                     249  * sched/pipe
250  * syscall/basic                                  250  * syscall/basic
251  * mem/memcpy                                     251  * mem/memcpy
252  * mem/memset                                     252  * mem/memset
253                                                   253 
254 What is stress-ng and how do we use it?           254 What is stress-ng and how do we use it?
255 =======================================           255 =======================================
256                                                   256 
257 As mentioned earlier, stress-ng is used for pe    257 As mentioned earlier, stress-ng is used for performing stress testing on
258 the kernel. It allows you to exercise various     258 the kernel. It allows you to exercise various physical subsystems of the
259 computer, as well as interfaces of the OS kern    259 computer, as well as interfaces of the OS kernel, using stressor-s. They
260 are available for CPU, CPU cache, devices, I/O    260 are available for CPU, CPU cache, devices, I/O, interrupts, file system,
261 memory, network, operating system, pipelines,     261 memory, network, operating system, pipelines, schedulers, and virtual
262 machines.                                         262 machines.
263                                                   263 
264 The netdev stressor starts N workers that exer    264 The netdev stressor starts N workers that exercise various netdevice ioctl
265 commands across all the available network devi    265 commands across all the available network devices. The following ioctls are
266 exercised:                                        266 exercised:
267                                                   267 
268  * SIOCGIFCONF, SIOCGIFINDEX, SIOCGIFNAME, SIO    268  * SIOCGIFCONF, SIOCGIFINDEX, SIOCGIFNAME, SIOCGIFFLAGS
269  * SIOCGIFADDR, SIOCGIFNETMASK, SIOCGIFMETRIC,    269  * SIOCGIFADDR, SIOCGIFNETMASK, SIOCGIFMETRIC, SIOCGIFMTU
270  * SIOCGIFHWADDR, SIOCGIFMAP, SIOCGIFTXQLEN       270  * SIOCGIFHWADDR, SIOCGIFMAP, SIOCGIFTXQLEN
271                                                   271 
272 The following command runs the stressor::         272 The following command runs the stressor::
273                                                   273 
274   stress-ng --netdev 1 -t 60 --metrics command    274   stress-ng --netdev 1 -t 60 --metrics command.
275                                                   275 
276 We can use the perf record command to record t    276 We can use the perf record command to record the events and information
277 associated with a process. This command record    277 associated with a process. This command records the profiling data in the
278 perf.data file in the same directory.             278 perf.data file in the same directory.
279                                                   279 
280 Using the following commands you can record th    280 Using the following commands you can record the events associated with the
281 netdev stressor, view the generated report per    281 netdev stressor, view the generated report perf.data and annotate the to
282 view the statistics of each instruction of the    282 view the statistics of each instruction of the program::
283                                                   283 
284   perf record stress-ng --netdev 1 -t 60 --met    284   perf record stress-ng --netdev 1 -t 60 --metrics command.
285   perf report                                     285   perf report
286   perf annotate                                   286   perf annotate
287                                                   287 
288 What is paxtest and how do we use it?             288 What is paxtest and how do we use it?
289 =====================================             289 =====================================
290                                                   290 
291 paxtest is a program that tests buffer overflo    291 paxtest is a program that tests buffer overflows in the kernel. It tests
292 kernel enforcements over memory usage. General    292 kernel enforcements over memory usage. Generally, execution in some memory
293 segments makes buffer overflows possible. It r    293 segments makes buffer overflows possible. It runs a set of programs that
294 attempt to subvert memory usage. It is used as    294 attempt to subvert memory usage. It is used as a regression test suite for
295 PaX, and will be useful to test other memory p    295 PaX, and will be useful to test other memory protection patches for the
296 kernel.                                           296 kernel.
297                                                   297 
298 paxtest provides kiddie and blackhat modes. Th    298 paxtest provides kiddie and blackhat modes. The paxtest kiddie mode runs
299 in normal mode, whereas the blackhat mode trie    299 in normal mode, whereas the blackhat mode tries to get around the protection
300 of the kernel testing for vulnerabilities. We     300 of the kernel testing for vulnerabilities. We focus on the kiddie mode here
301 and combine "paxtest kiddie" run with "perf re    301 and combine "paxtest kiddie" run with "perf record" to collect CPU stack
302 traces for the paxtest kiddie run to see which    302 traces for the paxtest kiddie run to see which function is calling other
303 functions in the performance profile. Then the    303 functions in the performance profile. Then the "dwarf" (DWARF's Call Frame
304 Information) mode can be used to unwind the st    304 Information) mode can be used to unwind the stack.
305                                                   305 
306 The following command can be used to view resu    306 The following command can be used to view resulting report in call-graph
307 format::                                          307 format::
308                                                   308 
309   perf record --call-graph dwarf paxtest kiddi    309   perf record --call-graph dwarf paxtest kiddie
310   perf report --stdio                             310   perf report --stdio
311                                                   311 
312 Tracing workloads                                 312 Tracing workloads
313 =================                                 313 =================
314                                                   314 
315 Now that we understand the workloads, let's st    315 Now that we understand the workloads, let's start tracing them.
316                                                   316 
317 Tracing perf bench all workload                   317 Tracing perf bench all workload
318 -------------------------------                   318 -------------------------------
319                                                   319 
320 Run the following command to trace perf bench     320 Run the following command to trace perf bench all workload::
321                                                   321 
322  strace -c perf bench all                         322  strace -c perf bench all
323                                                   323 
324 **System Calls made by the workload**             324 **System Calls made by the workload**
325                                                   325 
326 The below table shows the system calls invoked    326 The below table shows the system calls invoked by the workload, number of
327 times each system call is invoked, and the cor    327 times each system call is invoked, and the corresponding Linux subsystem.
328                                                   328 
329 +-------------------+-----------+-------------    329 +-------------------+-----------+-----------------+-------------------------+
330 | System Call       | # calls   | Linux Subsys    330 | System Call       | # calls   | Linux Subsystem | System Call (API)       |
331 +===================+===========+=============    331 +===================+===========+=================+=========================+
332 | getppid           | 10000001  | Process Mgmt    332 | getppid           | 10000001  | Process Mgmt    | sys_getpid()            |
333 +-------------------+-----------+-------------    333 +-------------------+-----------+-----------------+-------------------------+
334 | clone             | 1077      | Process Mgmt    334 | clone             | 1077      | Process Mgmt.   | sys_clone()             |
335 +-------------------+-----------+-------------    335 +-------------------+-----------+-----------------+-------------------------+
336 | prctl             | 23        | Process Mgmt    336 | prctl             | 23        | Process Mgmt.   | sys_prctl()             |
337 +-------------------+-----------+-------------    337 +-------------------+-----------+-----------------+-------------------------+
338 | prlimit64         | 7         | Process Mgmt    338 | prlimit64         | 7         | Process Mgmt.   | sys_prlimit64()         |
339 +-------------------+-----------+-------------    339 +-------------------+-----------+-----------------+-------------------------+
340 | getpid            | 10        | Process Mgmt    340 | getpid            | 10        | Process Mgmt.   | sys_getpid()            |
341 +-------------------+-----------+-------------    341 +-------------------+-----------+-----------------+-------------------------+
342 | uname             | 3         | Process Mgmt    342 | uname             | 3         | Process Mgmt.   | sys_uname()             |
343 +-------------------+-----------+-------------    343 +-------------------+-----------+-----------------+-------------------------+
344 | sysinfo           | 1         | Process Mgmt    344 | sysinfo           | 1         | Process Mgmt.   | sys_sysinfo()           |
345 +-------------------+-----------+-------------    345 +-------------------+-----------+-----------------+-------------------------+
346 | getuid            | 1         | Process Mgmt    346 | getuid            | 1         | Process Mgmt.   | sys_getuid()            |
347 +-------------------+-----------+-------------    347 +-------------------+-----------+-----------------+-------------------------+
348 | getgid            | 1         | Process Mgmt    348 | getgid            | 1         | Process Mgmt.   | sys_getgid()            |
349 +-------------------+-----------+-------------    349 +-------------------+-----------+-----------------+-------------------------+
350 | geteuid           | 1         | Process Mgmt    350 | geteuid           | 1         | Process Mgmt.   | sys_geteuid()           |
351 +-------------------+-----------+-------------    351 +-------------------+-----------+-----------------+-------------------------+
352 | getegid           | 1         | Process Mgmt    352 | getegid           | 1         | Process Mgmt.   | sys_getegid             |
353 +-------------------+-----------+-------------    353 +-------------------+-----------+-----------------+-------------------------+
354 | close             | 49951     | Filesystem      354 | close             | 49951     | Filesystem      | sys_close()             |
355 +-------------------+-----------+-------------    355 +-------------------+-----------+-----------------+-------------------------+
356 | pipe              | 604       | Filesystem      356 | pipe              | 604       | Filesystem      | sys_pipe()              |
357 +-------------------+-----------+-------------    357 +-------------------+-----------+-----------------+-------------------------+
358 | openat            | 48560     | Filesystem      358 | openat            | 48560     | Filesystem      | sys_opennat()           |
359 +-------------------+-----------+-------------    359 +-------------------+-----------+-----------------+-------------------------+
360 | fstat             | 8338      | Filesystem      360 | fstat             | 8338      | Filesystem      | sys_fstat()             |
361 +-------------------+-----------+-------------    361 +-------------------+-----------+-----------------+-------------------------+
362 | stat              | 1573      | Filesystem      362 | stat              | 1573      | Filesystem      | sys_stat()              |
363 +-------------------+-----------+-------------    363 +-------------------+-----------+-----------------+-------------------------+
364 | pread64           | 9646      | Filesystem      364 | pread64           | 9646      | Filesystem      | sys_pread64()           |
365 +-------------------+-----------+-------------    365 +-------------------+-----------+-----------------+-------------------------+
366 | getdents64        | 1873      | Filesystem      366 | getdents64        | 1873      | Filesystem      | sys_getdents64()        |
367 +-------------------+-----------+-------------    367 +-------------------+-----------+-----------------+-------------------------+
368 | access            | 3         | Filesystem      368 | access            | 3         | Filesystem      | sys_access()            |
369 +-------------------+-----------+-------------    369 +-------------------+-----------+-----------------+-------------------------+
370 | lstat             | 1880      | Filesystem      370 | lstat             | 1880      | Filesystem      | sys_lstat()             |
371 +-------------------+-----------+-------------    371 +-------------------+-----------+-----------------+-------------------------+
372 | lseek             | 6         | Filesystem      372 | lseek             | 6         | Filesystem      | sys_lseek()             |
373 +-------------------+-----------+-------------    373 +-------------------+-----------+-----------------+-------------------------+
374 | ioctl             | 3         | Filesystem      374 | ioctl             | 3         | Filesystem      | sys_ioctl()             |
375 +-------------------+-----------+-------------    375 +-------------------+-----------+-----------------+-------------------------+
376 | dup2              | 1         | Filesystem      376 | dup2              | 1         | Filesystem      | sys_dup2()              |
377 +-------------------+-----------+-------------    377 +-------------------+-----------+-----------------+-------------------------+
378 | execve            | 2         | Filesystem      378 | execve            | 2         | Filesystem      | sys_execve()            |
379 +-------------------+-----------+-------------    379 +-------------------+-----------+-----------------+-------------------------+
380 | fcntl             | 8779      | Filesystem      380 | fcntl             | 8779      | Filesystem      | sys_fcntl()             |
381 +-------------------+-----------+-------------    381 +-------------------+-----------+-----------------+-------------------------+
382 | statfs            | 1         | Filesystem      382 | statfs            | 1         | Filesystem      | sys_statfs()            |
383 +-------------------+-----------+-------------    383 +-------------------+-----------+-----------------+-------------------------+
384 | epoll_create      | 2         | Filesystem      384 | epoll_create      | 2         | Filesystem      | sys_epoll_create()      |
385 +-------------------+-----------+-------------    385 +-------------------+-----------+-----------------+-------------------------+
386 | epoll_ctl         | 64        | Filesystem      386 | epoll_ctl         | 64        | Filesystem      | sys_epoll_ctl()         |
387 +-------------------+-----------+-------------    387 +-------------------+-----------+-----------------+-------------------------+
388 | newfstatat        | 8318      | Filesystem      388 | newfstatat        | 8318      | Filesystem      | sys_newfstatat()        |
389 +-------------------+-----------+-------------    389 +-------------------+-----------+-----------------+-------------------------+
390 | eventfd2          | 192       | Filesystem      390 | eventfd2          | 192       | Filesystem      | sys_eventfd2()          |
391 +-------------------+-----------+-------------    391 +-------------------+-----------+-----------------+-------------------------+
392 | mmap              | 243       | Memory Mgmt.    392 | mmap              | 243       | Memory Mgmt.    | sys_mmap()              |
393 +-------------------+-----------+-------------    393 +-------------------+-----------+-----------------+-------------------------+
394 | mprotect          | 32        | Memory Mgmt.    394 | mprotect          | 32        | Memory Mgmt.    | sys_mprotect()          |
395 +-------------------+-----------+-------------    395 +-------------------+-----------+-----------------+-------------------------+
396 | brk               | 21        | Memory Mgmt.    396 | brk               | 21        | Memory Mgmt.    | sys_brk()               |
397 +-------------------+-----------+-------------    397 +-------------------+-----------+-----------------+-------------------------+
398 | munmap            | 128       | Memory Mgmt.    398 | munmap            | 128       | Memory Mgmt.    | sys_munmap()            |
399 +-------------------+-----------+-------------    399 +-------------------+-----------+-----------------+-------------------------+
400 | set_mempolicy     | 156       | Memory Mgmt.    400 | set_mempolicy     | 156       | Memory Mgmt.    | sys_set_mempolicy()     |
401 +-------------------+-----------+-------------    401 +-------------------+-----------+-----------------+-------------------------+
402 | set_tid_address   | 1         | Process Mgmt    402 | set_tid_address   | 1         | Process Mgmt.   | sys_set_tid_address()   |
403 +-------------------+-----------+-------------    403 +-------------------+-----------+-----------------+-------------------------+
404 | set_robust_list   | 1         | Futex           404 | set_robust_list   | 1         | Futex           | sys_set_robust_list()   |
405 +-------------------+-----------+-------------    405 +-------------------+-----------+-----------------+-------------------------+
406 | futex             | 341       | Futex           406 | futex             | 341       | Futex           | sys_futex()             |
407 +-------------------+-----------+-------------    407 +-------------------+-----------+-----------------+-------------------------+
408 | sched_getaffinity | 79        | Scheduler       408 | sched_getaffinity | 79        | Scheduler       | sys_sched_getaffinity() |
409 +-------------------+-----------+-------------    409 +-------------------+-----------+-----------------+-------------------------+
410 | sched_setaffinity | 223       | Scheduler       410 | sched_setaffinity | 223       | Scheduler       | sys_sched_setaffinity() |
411 +-------------------+-----------+-------------    411 +-------------------+-----------+-----------------+-------------------------+
412 | socketpair        | 202       | Network         412 | socketpair        | 202       | Network         | sys_socketpair()        |
413 +-------------------+-----------+-------------    413 +-------------------+-----------+-----------------+-------------------------+
414 | rt_sigprocmask    | 21        | Signal          414 | rt_sigprocmask    | 21        | Signal          | sys_rt_sigprocmask()    |
415 +-------------------+-----------+-------------    415 +-------------------+-----------+-----------------+-------------------------+
416 | rt_sigaction      | 36        | Signal          416 | rt_sigaction      | 36        | Signal          | sys_rt_sigaction()      |
417 +-------------------+-----------+-------------    417 +-------------------+-----------+-----------------+-------------------------+
418 | rt_sigreturn      | 2         | Signal          418 | rt_sigreturn      | 2         | Signal          | sys_rt_sigreturn()      |
419 +-------------------+-----------+-------------    419 +-------------------+-----------+-----------------+-------------------------+
420 | wait4             | 889       | Time            420 | wait4             | 889       | Time            | sys_wait4()             |
421 +-------------------+-----------+-------------    421 +-------------------+-----------+-----------------+-------------------------+
422 | clock_nanosleep   | 37        | Time            422 | clock_nanosleep   | 37        | Time            | sys_clock_nanosleep()   |
423 +-------------------+-----------+-------------    423 +-------------------+-----------+-----------------+-------------------------+
424 | capget            | 4         | Capability      424 | capget            | 4         | Capability      | sys_capget()            |
425 +-------------------+-----------+-------------    425 +-------------------+-----------+-----------------+-------------------------+
426                                                   426 
427 Tracing stress-ng netdev stressor workload        427 Tracing stress-ng netdev stressor workload
428 ------------------------------------------        428 ------------------------------------------
429                                                   429 
430 Run the following command to trace stress-ng n    430 Run the following command to trace stress-ng netdev stressor workload::
431                                                   431 
432   strace -c  stress-ng --netdev 1 -t 60 --metr    432   strace -c  stress-ng --netdev 1 -t 60 --metrics
433                                                   433 
434 **System Calls made by the workload**             434 **System Calls made by the workload**
435                                                   435 
436 The below table shows the system calls invoked    436 The below table shows the system calls invoked by the workload, number of
437 times each system call is invoked, and the cor    437 times each system call is invoked, and the corresponding Linux subsystem.
438                                                   438 
439 +-------------------+-----------+-------------    439 +-------------------+-----------+-----------------+-------------------------+
440 | System Call       | # calls   | Linux Subsys    440 | System Call       | # calls   | Linux Subsystem | System Call (API)       |
441 +===================+===========+=============    441 +===================+===========+=================+=========================+
442 | openat            | 74        | Filesystem      442 | openat            | 74        | Filesystem      | sys_openat()            |
443 +-------------------+-----------+-------------    443 +-------------------+-----------+-----------------+-------------------------+
444 | close             | 75        | Filesystem      444 | close             | 75        | Filesystem      | sys_close()             |
445 +-------------------+-----------+-------------    445 +-------------------+-----------+-----------------+-------------------------+
446 | read              | 58        | Filesystem      446 | read              | 58        | Filesystem      | sys_read()              |
447 +-------------------+-----------+-------------    447 +-------------------+-----------+-----------------+-------------------------+
448 | fstat             | 20        | Filesystem      448 | fstat             | 20        | Filesystem      | sys_fstat()             |
449 +-------------------+-----------+-------------    449 +-------------------+-----------+-----------------+-------------------------+
450 | flock             | 10        | Filesystem      450 | flock             | 10        | Filesystem      | sys_flock()             |
451 +-------------------+-----------+-------------    451 +-------------------+-----------+-----------------+-------------------------+
452 | write             | 7         | Filesystem      452 | write             | 7         | Filesystem      | sys_write()             |
453 +-------------------+-----------+-------------    453 +-------------------+-----------+-----------------+-------------------------+
454 | getdents64        | 8         | Filesystem      454 | getdents64        | 8         | Filesystem      | sys_getdents64()        |
455 +-------------------+-----------+-------------    455 +-------------------+-----------+-----------------+-------------------------+
456 | pread64           | 8         | Filesystem      456 | pread64           | 8         | Filesystem      | sys_pread64()           |
457 +-------------------+-----------+-------------    457 +-------------------+-----------+-----------------+-------------------------+
458 | lseek             | 1         | Filesystem      458 | lseek             | 1         | Filesystem      | sys_lseek()             |
459 +-------------------+-----------+-------------    459 +-------------------+-----------+-----------------+-------------------------+
460 | access            | 2         | Filesystem      460 | access            | 2         | Filesystem      | sys_access()            |
461 +-------------------+-----------+-------------    461 +-------------------+-----------+-----------------+-------------------------+
462 | getcwd            | 1         | Filesystem      462 | getcwd            | 1         | Filesystem      | sys_getcwd()            |
463 +-------------------+-----------+-------------    463 +-------------------+-----------+-----------------+-------------------------+
464 | execve            | 1         | Filesystem      464 | execve            | 1         | Filesystem      | sys_execve()            |
465 +-------------------+-----------+-------------    465 +-------------------+-----------+-----------------+-------------------------+
466 | mmap              | 61        | Memory Mgmt.    466 | mmap              | 61        | Memory Mgmt.    | sys_mmap()              |
467 +-------------------+-----------+-------------    467 +-------------------+-----------+-----------------+-------------------------+
468 | munmap            | 3         | Memory Mgmt.    468 | munmap            | 3         | Memory Mgmt.    | sys_munmap()            |
469 +-------------------+-----------+-------------    469 +-------------------+-----------+-----------------+-------------------------+
470 | mprotect          | 20        | Memory Mgmt.    470 | mprotect          | 20        | Memory Mgmt.    | sys_mprotect()          |
471 +-------------------+-----------+-------------    471 +-------------------+-----------+-----------------+-------------------------+
472 | mlock             | 2         | Memory Mgmt.    472 | mlock             | 2         | Memory Mgmt.    | sys_mlock()             |
473 +-------------------+-----------+-------------    473 +-------------------+-----------+-----------------+-------------------------+
474 | brk               | 3         | Memory Mgmt.    474 | brk               | 3         | Memory Mgmt.    | sys_brk()               |
475 +-------------------+-----------+-------------    475 +-------------------+-----------+-----------------+-------------------------+
476 | rt_sigaction      | 21        | Signal          476 | rt_sigaction      | 21        | Signal          | sys_rt_sigaction()      |
477 +-------------------+-----------+-------------    477 +-------------------+-----------+-----------------+-------------------------+
478 | rt_sigprocmask    | 1         | Signal          478 | rt_sigprocmask    | 1         | Signal          | sys_rt_sigprocmask()    |
479 +-------------------+-----------+-------------    479 +-------------------+-----------+-----------------+-------------------------+
480 | sigaltstack       | 1         | Signal          480 | sigaltstack       | 1         | Signal          | sys_sigaltstack()       |
481 +-------------------+-----------+-------------    481 +-------------------+-----------+-----------------+-------------------------+
482 | rt_sigreturn      | 1         | Signal          482 | rt_sigreturn      | 1         | Signal          | sys_rt_sigreturn()      |
483 +-------------------+-----------+-------------    483 +-------------------+-----------+-----------------+-------------------------+
484 | getpid            | 8         | Process Mgmt    484 | getpid            | 8         | Process Mgmt.   | sys_getpid()            |
485 +-------------------+-----------+-------------    485 +-------------------+-----------+-----------------+-------------------------+
486 | prlimit64         | 5         | Process Mgmt    486 | prlimit64         | 5         | Process Mgmt.   | sys_prlimit64()         |
487 +-------------------+-----------+-------------    487 +-------------------+-----------+-----------------+-------------------------+
488 | arch_prctl        | 2         | Process Mgmt    488 | arch_prctl        | 2         | Process Mgmt.   | sys_arch_prctl()        |
489 +-------------------+-----------+-------------    489 +-------------------+-----------+-----------------+-------------------------+
490 | sysinfo           | 2         | Process Mgmt    490 | sysinfo           | 2         | Process Mgmt.   | sys_sysinfo()           |
491 +-------------------+-----------+-------------    491 +-------------------+-----------+-----------------+-------------------------+
492 | getuid            | 2         | Process Mgmt    492 | getuid            | 2         | Process Mgmt.   | sys_getuid()            |
493 +-------------------+-----------+-------------    493 +-------------------+-----------+-----------------+-------------------------+
494 | uname             | 1         | Process Mgmt    494 | uname             | 1         | Process Mgmt.   | sys_uname()             |
495 +-------------------+-----------+-------------    495 +-------------------+-----------+-----------------+-------------------------+
496 | setpgid           | 1         | Process Mgmt    496 | setpgid           | 1         | Process Mgmt.   | sys_setpgid()           |
497 +-------------------+-----------+-------------    497 +-------------------+-----------+-----------------+-------------------------+
498 | getrusage         | 1         | Process Mgmt    498 | getrusage         | 1         | Process Mgmt.   | sys_getrusage()         |
499 +-------------------+-----------+-------------    499 +-------------------+-----------+-----------------+-------------------------+
500 | geteuid           | 1         | Process Mgmt    500 | geteuid           | 1         | Process Mgmt.   | sys_geteuid()           |
501 +-------------------+-----------+-------------    501 +-------------------+-----------+-----------------+-------------------------+
502 | getppid           | 1         | Process Mgmt    502 | getppid           | 1         | Process Mgmt.   | sys_getppid()           |
503 +-------------------+-----------+-------------    503 +-------------------+-----------+-----------------+-------------------------+
504 | sendto            | 3         | Network         504 | sendto            | 3         | Network         | sys_sendto()            |
505 +-------------------+-----------+-------------    505 +-------------------+-----------+-----------------+-------------------------+
506 | connect           | 1         | Network         506 | connect           | 1         | Network         | sys_connect()           |
507 +-------------------+-----------+-------------    507 +-------------------+-----------+-----------------+-------------------------+
508 | socket            | 1         | Network         508 | socket            | 1         | Network         | sys_socket()            |
509 +-------------------+-----------+-------------    509 +-------------------+-----------+-----------------+-------------------------+
510 | clone             | 1         | Process Mgmt    510 | clone             | 1         | Process Mgmt.   | sys_clone()             |
511 +-------------------+-----------+-------------    511 +-------------------+-----------+-----------------+-------------------------+
512 | set_tid_address   | 1         | Process Mgmt    512 | set_tid_address   | 1         | Process Mgmt.   | sys_set_tid_address()   |
513 +-------------------+-----------+-------------    513 +-------------------+-----------+-----------------+-------------------------+
514 | wait4             | 2         | Time            514 | wait4             | 2         | Time            | sys_wait4()             |
515 +-------------------+-----------+-------------    515 +-------------------+-----------+-----------------+-------------------------+
516 | alarm             | 1         | Time            516 | alarm             | 1         | Time            | sys_alarm()             |
517 +-------------------+-----------+-------------    517 +-------------------+-----------+-----------------+-------------------------+
518 | set_robust_list   | 1         | Futex           518 | set_robust_list   | 1         | Futex           | sys_set_robust_list()   |
519 +-------------------+-----------+-------------    519 +-------------------+-----------+-----------------+-------------------------+
520                                                   520 
521 Tracing paxtest kiddie workload                   521 Tracing paxtest kiddie workload
522 -------------------------------                   522 -------------------------------
523                                                   523 
524 Run the following command to trace paxtest kid    524 Run the following command to trace paxtest kiddie workload::
525                                                   525 
526  strace -c paxtest kiddie                         526  strace -c paxtest kiddie
527                                                   527 
528 **System Calls made by the workload**             528 **System Calls made by the workload**
529                                                   529 
530 The below table shows the system calls invoked    530 The below table shows the system calls invoked by the workload, number of
531 times each system call is invoked, and the cor    531 times each system call is invoked, and the corresponding Linux subsystem.
532                                                   532 
533 +-------------------+-----------+-------------    533 +-------------------+-----------+-----------------+----------------------+
534 | System Call       | # calls   | Linux Subsys    534 | System Call       | # calls   | Linux Subsystem | System Call (API)    |
535 +===================+===========+=============    535 +===================+===========+=================+======================+
536 | read              | 3         | Filesystem      536 | read              | 3         | Filesystem      | sys_read()           |
537 +-------------------+-----------+-------------    537 +-------------------+-----------+-----------------+----------------------+
538 | write             | 11        | Filesystem      538 | write             | 11        | Filesystem      | sys_write()          |
539 +-------------------+-----------+-------------    539 +-------------------+-----------+-----------------+----------------------+
540 | close             | 41        | Filesystem      540 | close             | 41        | Filesystem      | sys_close()          |
541 +-------------------+-----------+-------------    541 +-------------------+-----------+-----------------+----------------------+
542 | stat              | 24        | Filesystem      542 | stat              | 24        | Filesystem      | sys_stat()           |
543 +-------------------+-----------+-------------    543 +-------------------+-----------+-----------------+----------------------+
544 | fstat             | 2         | Filesystem      544 | fstat             | 2         | Filesystem      | sys_fstat()          |
545 +-------------------+-----------+-------------    545 +-------------------+-----------+-----------------+----------------------+
546 | pread64           | 6         | Filesystem      546 | pread64           | 6         | Filesystem      | sys_pread64()        |
547 +-------------------+-----------+-------------    547 +-------------------+-----------+-----------------+----------------------+
548 | access            | 1         | Filesystem      548 | access            | 1         | Filesystem      | sys_access()         |
549 +-------------------+-----------+-------------    549 +-------------------+-----------+-----------------+----------------------+
550 | pipe              | 1         | Filesystem      550 | pipe              | 1         | Filesystem      | sys_pipe()           |
551 +-------------------+-----------+-------------    551 +-------------------+-----------+-----------------+----------------------+
552 | dup2              | 24        | Filesystem      552 | dup2              | 24        | Filesystem      | sys_dup2()           |
553 +-------------------+-----------+-------------    553 +-------------------+-----------+-----------------+----------------------+
554 | execve            | 1         | Filesystem      554 | execve            | 1         | Filesystem      | sys_execve()         |
555 +-------------------+-----------+-------------    555 +-------------------+-----------+-----------------+----------------------+
556 | fcntl             | 26        | Filesystem      556 | fcntl             | 26        | Filesystem      | sys_fcntl()          |
557 +-------------------+-----------+-------------    557 +-------------------+-----------+-----------------+----------------------+
558 | openat            | 14        | Filesystem      558 | openat            | 14        | Filesystem      | sys_openat()         |
559 +-------------------+-----------+-------------    559 +-------------------+-----------+-----------------+----------------------+
560 | rt_sigaction      | 7         | Signal          560 | rt_sigaction      | 7         | Signal          | sys_rt_sigaction()   |
561 +-------------------+-----------+-------------    561 +-------------------+-----------+-----------------+----------------------+
562 | rt_sigreturn      | 38        | Signal          562 | rt_sigreturn      | 38        | Signal          | sys_rt_sigreturn()   |
563 +-------------------+-----------+-------------    563 +-------------------+-----------+-----------------+----------------------+
564 | clone             | 38        | Process Mgmt    564 | clone             | 38        | Process Mgmt.   | sys_clone()          |
565 +-------------------+-----------+-------------    565 +-------------------+-----------+-----------------+----------------------+
566 | wait4             | 44        | Time            566 | wait4             | 44        | Time            | sys_wait4()          |
567 +-------------------+-----------+-------------    567 +-------------------+-----------+-----------------+----------------------+
568 | mmap              | 7         | Memory Mgmt.    568 | mmap              | 7         | Memory Mgmt.    | sys_mmap()           |
569 +-------------------+-----------+-------------    569 +-------------------+-----------+-----------------+----------------------+
570 | mprotect          | 3         | Memory Mgmt.    570 | mprotect          | 3         | Memory Mgmt.    | sys_mprotect()       |
571 +-------------------+-----------+-------------    571 +-------------------+-----------+-----------------+----------------------+
572 | munmap            | 1         | Memory Mgmt.    572 | munmap            | 1         | Memory Mgmt.    | sys_munmap()         |
573 +-------------------+-----------+-------------    573 +-------------------+-----------+-----------------+----------------------+
574 | brk               | 3         | Memory Mgmt.    574 | brk               | 3         | Memory Mgmt.    | sys_brk()            |
575 +-------------------+-----------+-------------    575 +-------------------+-----------+-----------------+----------------------+
576 | getpid            | 1         | Process Mgmt    576 | getpid            | 1         | Process Mgmt.   | sys_getpid()         |
577 +-------------------+-----------+-------------    577 +-------------------+-----------+-----------------+----------------------+
578 | getuid            | 1         | Process Mgmt    578 | getuid            | 1         | Process Mgmt.   | sys_getuid()         |
579 +-------------------+-----------+-------------    579 +-------------------+-----------+-----------------+----------------------+
580 | getgid            | 1         | Process Mgmt    580 | getgid            | 1         | Process Mgmt.   | sys_getgid()         |
581 +-------------------+-----------+-------------    581 +-------------------+-----------+-----------------+----------------------+
582 | geteuid           | 2         | Process Mgmt    582 | geteuid           | 2         | Process Mgmt.   | sys_geteuid()        |
583 +-------------------+-----------+-------------    583 +-------------------+-----------+-----------------+----------------------+
584 | getegid           | 1         | Process Mgmt    584 | getegid           | 1         | Process Mgmt.   | sys_getegid()        |
585 +-------------------+-----------+-------------    585 +-------------------+-----------+-----------------+----------------------+
586 | getppid           | 1         | Process Mgmt    586 | getppid           | 1         | Process Mgmt.   | sys_getppid()        |
587 +-------------------+-----------+-------------    587 +-------------------+-----------+-----------------+----------------------+
588 | arch_prctl        | 2         | Process Mgmt    588 | arch_prctl        | 2         | Process Mgmt.   | sys_arch_prctl()     |
589 +-------------------+-----------+-------------    589 +-------------------+-----------+-----------------+----------------------+
590                                                   590 
591 Conclusion                                        591 Conclusion
592 ==========                                        592 ==========
593                                                   593 
594 This document is intended to be used as a guid    594 This document is intended to be used as a guide on how to gather fine-grained
595 information on the resources in use by workloa    595 information on the resources in use by workloads using strace.
596                                                   596 
597 References                                        597 References
598 ==========                                        598 ==========
599                                                   599 
600  * `Discovery Linux Kernel Subsystems used by     600  * `Discovery Linux Kernel Subsystems used by OpenAPS <https://elisa.tech/blog/2022/02/02/discovery-linux-kernel-subsystems-used-by-openaps>`_
601  * `ELISA-White-Papers-Discovering Linux kerne    601  * `ELISA-White-Papers-Discovering Linux kernel subsystems used by a workload <https://github.com/elisa-tech/ELISA-White-Papers/blob/master/Processes/Discovering_Linux_kernel_subsystems_used_by_a_workload.md>`_
602  * `strace <https://man7.org/linux/man-pages/m    602  * `strace <https://man7.org/linux/man-pages/man1/strace.1.html>`_
603  * `perf <https://man7.org/linux/man-pages/man    603  * `perf <https://man7.org/linux/man-pages/man1/perf.1.html>`_
604  * `paxtest README <https://github.com/opntr/p    604  * `paxtest README <https://github.com/opntr/paxtest-freebsd/blob/hardenedbsd/0.9.14-hbsd/README>`_
605  * `stress-ng <https://www.mankier.com/1/stres    605  * `stress-ng <https://www.mankier.com/1/stress-ng>`_
606  * `Monitoring and managing system status and     606  * `Monitoring and managing system status and performance <https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/monitoring_and_managing_system_status_and_performance/index>`_
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php