Commit | Line | Data |
---|---|---|
43550d37 JB |
1 | ustctl(1) -- a program to control the tracing of userspace applications |
2 | ======================================================================= | |
3 | ||
4 | ## SYNOPSIS | |
5 | ||
6 | `ustctl` [<command>] [<PIDs>]... | |
7 | ||
8 | ## DESCRIPTION | |
9 | ||
c3947c25 | 10 | `ustctl` is a program to control the tracing of userspace applications. It can |
43550d37 JB |
11 | list markers, start the tracing, stop the tracing, enable/disable markers, etc. |
12 | ||
13 | ## OPTIONS | |
14 | ||
15 | These programs follow the usual GNU command line syntax, with long options | |
16 | starting with two dashes(`-'). A summary of options is included below. | |
17 | ||
18 | * `-h`, `--help`: | |
19 | Show summary of options. | |
20 | ||
21 | * `--create-trace`: | |
22 | Create trace. | |
23 | ||
24 | * `--alloc-trace`: | |
c3947c25 | 25 | Allocate trace. |
43550d37 JB |
26 | |
27 | * `--start-trace`: | |
28 | Start tracing. | |
29 | ||
30 | * `--stop-trace`: | |
31 | Stop tracing. | |
32 | ||
33 | * `--destroy-trace`: | |
34 | Destroy the trace. | |
35 | ||
36 | * `--set-subbuf-size` <CHANNEL>/<bytes>: | |
c3947c25 | 37 | Set the size of subbuffers in CHANNEL. |
43550d37 JB |
38 | |
39 | * `--set-subbuf-num` <CHANNEL>: | |
c3947c25 | 40 | Set the number of subbuffers per buffer for CHANNEL. Must be a power of 2. |
43550d37 | 41 | |
3af38436 AH |
42 | * `--set-sock-path`: |
43 | Set the path of the daemon socket. | |
44 | ||
43550d37 | 45 | * `--get-subbuf-size` <CHANNEL>: |
c3947c25 | 46 | Print the size of subbuffers per buffer for CHANNEL. |
43550d37 JB |
47 | |
48 | * `--get-subbuf-num` <CHANNEL>: | |
c3947c25 | 49 | Print the number of subbuffers per buffer for CHANNEL. |
43550d37 | 50 | |
3af38436 AH |
51 | * `--get-sock-path`: |
52 | Get the path of the daemon socket. | |
53 | ||
43550d37 JB |
54 | * `--enable-marker` <CHANNEL>/<MARKER>: |
55 | Enable a marker. | |
56 | ||
57 | * `--disable-marker` <CHANNEL>/<MARKER>: | |
58 | Disable a marker. | |
59 | ||
60 | * `--list-markers`: | |
61 | List the markers of the process, their state and format string. | |
62 | ||
c3947c25 PMF |
63 | ## LIFE CYCLE OF A TRACE |
64 | ||
65 | Typically, the first step is to enable markers with `--enable-marker`. An | |
66 | enabled marker generates an event when the control flow passes over it | |
67 | (assuming the trace is recording). A disabled marker produces nothing. Enabling | |
68 | and disabling markers may however be done at any point, including while the | |
69 | trace is being recorded. | |
70 | ||
71 | In order to record events, a trace is first created with `--create-trace`. At | |
72 | this point, the subbuffer count and size may be changed with `--set-subbuf-num` | |
73 | and `--set-subbuf-size`. | |
74 | ||
75 | Afterward, the trace may be allocated with `--alloc-trace`. This allocates the | |
76 | buffers in memory, so once this is done, the subbuffer size and count can not | |
77 | be changed. Trace allocation also causes the daemon to connect to the trace | |
78 | buffers and wait for data to arrive. Explicit allocation is optional, as it is | |
79 | done automatically at trace start. | |
80 | ||
81 | The trace may then be started with `--start-trace`. This results in events | |
82 | being recorded in the buffer. The daemon automatically collects these events. | |
83 | ||
84 | The trace may be stopped with `--stop-trace`, either definitely after all the | |
85 | wanted information is collected, or temporarily, before being started again | |
86 | with `--start-trace`. This results in effectively "pausing" the recording. | |
87 | ||
88 | Finally, when `--destroy-trace` is used, the trace buffers are unallocated. | |
89 | However, the memory may not be effectively freed until the daemon finishes to | |
90 | collect them. | |
91 | ||
92 | ## STRUCTURE OF A TRACE | |
93 | ||
94 | Each instrumentation point that is added in a program is associated to a | |
95 | channel. | |
96 | ||
97 | Trace events are put in buffers. There is one buffer per channel, per cpu. | |
98 | For example, on a system with 4 cores and tracing an application with 3 | |
99 | channels, there will be 12 buffers in total. The content of each of these | |
100 | buffers is put in a distinct file in the trace directory. For example, the | |
101 | `metadata_2` file contains the data that was extracted from the buffer that | |
102 | contained the events from the metadata channel and having occurred on cpu 2. | |
103 | ||
104 | In memory, each buffer is divided in subbuffers. Subbuffers are equally-sized, | |
105 | contiguous parts of a buffer. The size of a buffer is equal to the number of | |
106 | subbuffers it contains times the size of each subbuffer. When a subbuffer is | |
107 | full, it is collected by the daemon while the others are filled. If, however, | |
108 | the buffer size is too small, buffer overflows may occur and result in event | |
109 | loss. By default, the number of subbuffers per buffer is 2. Subbuffer size | |
110 | for a given channel may be chosen with `--set-subbuf-size` while the subbuffer | |
111 | count is set with `--set-subbuf-num`. | |
112 | ||
113 | ## SEE ALSO | |
114 | ||
115 | usttrace(1), ustd(1) | |
116 | ||
43550d37 JB |
117 | ## AUTHOR |
118 | ||
119 | `ustctl` was written by Pierre-Marc Fournier. | |
120 | ||
121 | This manual page was written by Jon Bernard <jbernard@debian.org>, for | |
c3947c25 PMF |
122 | the Debian project (and may be used by others). It was updated by Pierre-Marc |
123 | Fournier. |