diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-06 19:39:18 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2018-06-06 19:39:18 -0400 |
| commit | 5eb6eed7e0fe880dc8de8da203cc888716bbf196 (patch) | |
| tree | 05a7c83182b34a567c68b35c091cf31200d5ddec /Documentation/trace | |
| parent | 8b5c6a3a49d9ebc7dc288870b9c56c4f946035d8 (diff) | |
| parent | 591a033dc17ff6f684b6b6d1d7426e22d178194f (diff) | |
Merge tag 'trace-v4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing updates from Steven Rostedt:
"One new feature was added to ftrace, which is the trace_marker now
supports triggers. For example:
# cd /sys/kernel/debug/tracing
# echo 'snapshot' > events/ftrace/print/trigger
# echo 'cause snapshot' > trace_marker
The rest of the changes are various clean ups and also one stable fix
that was added late in the cycle"
* tag 'trace-v4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: (21 commits)
tracing: Use match_string() instead of open coding it in trace_set_options()
branch-check: fix long->int truncation when profiling branches
ring-buffer: Fix typo in comment
ring-buffer: Fix a bunch of typos in comments
tracing/selftest: Add test to test simple snapshot trigger for trace_marker
tracing/selftest: Add test to test hist trigger between kernel event and trace_marker
tracing/selftest: Add selftests to test trace_marker histogram triggers
ftrace/selftest: Fix reset_trigger() to handle triggers with filters
ftrace/selftest: Have the reset_trigger code be a bit more careful
tracing: Document trace_marker triggers
tracing: Allow histogram triggers to access ftrace internal events
tracing: Prevent further users of zero size static arrays in trace events
tracing: Have zero size length in filter logic be full string
tracing: Add trigger file for trace_markers tracefs/ftrace/print
tracing: Do not show filter file for ftrace internal events
tracing: Add brackets in ftrace event dynamic arrays
tracing: Have event_trace_init() called by trace_init_tracefs()
tracing: Add __find_event_file() to find event files without restrictions
tracing: Do not reference event data in post call triggers
tracepoints: Fix the descriptions of tracepoint_probe_register{_prio}
...
Diffstat (limited to 'Documentation/trace')
| -rw-r--r-- | Documentation/trace/events.rst | 6 | ||||
| -rw-r--r-- | Documentation/trace/ftrace.rst | 5 | ||||
| -rw-r--r-- | Documentation/trace/histogram.txt | 545 |
3 files changed, 554 insertions, 2 deletions
diff --git a/Documentation/trace/events.rst b/Documentation/trace/events.rst index a5ea2cb0082b..1afae55dc55c 100644 --- a/Documentation/trace/events.rst +++ b/Documentation/trace/events.rst | |||
| @@ -338,10 +338,14 @@ used for conditionally invoking triggers. | |||
| 338 | 338 | ||
| 339 | The syntax for event triggers is roughly based on the syntax for | 339 | The syntax for event triggers is roughly based on the syntax for |
| 340 | set_ftrace_filter 'ftrace filter commands' (see the 'Filter commands' | 340 | set_ftrace_filter 'ftrace filter commands' (see the 'Filter commands' |
| 341 | section of Documentation/trace/ftrace.txt), but there are major | 341 | section of Documentation/trace/ftrace.rst), but there are major |
| 342 | differences and the implementation isn't currently tied to it in any | 342 | differences and the implementation isn't currently tied to it in any |
| 343 | way, so beware about making generalizations between the two. | 343 | way, so beware about making generalizations between the two. |
| 344 | 344 | ||
| 345 | Note: Writing into trace_marker (See Documentation/trace/ftrace.rst) | ||
| 346 | can also enable triggers that are written into | ||
| 347 | /sys/kernel/tracing/events/ftrace/print/trigger | ||
| 348 | |||
| 345 | 6.1 Expression syntax | 349 | 6.1 Expression syntax |
| 346 | --------------------- | 350 | --------------------- |
| 347 | 351 | ||
diff --git a/Documentation/trace/ftrace.rst b/Documentation/trace/ftrace.rst index 6b80ac4bbaae..a20d34955333 100644 --- a/Documentation/trace/ftrace.rst +++ b/Documentation/trace/ftrace.rst | |||
| @@ -512,6 +512,11 @@ of ftrace. Here is a list of some of the key files: | |||
| 512 | 512 | ||
| 513 | trace_fd = open("trace_marker", WR_ONLY); | 513 | trace_fd = open("trace_marker", WR_ONLY); |
| 514 | 514 | ||
| 515 | Note: Writing into the trace_marker file can also initiate triggers | ||
| 516 | that are written into /sys/kernel/tracing/events/ftrace/print/trigger | ||
| 517 | See "Event triggers" in Documentation/trace/events.rst and an | ||
| 518 | example in Documentation/trace/histogram.rst (Section 3.) | ||
| 519 | |||
| 515 | trace_marker_raw: | 520 | trace_marker_raw: |
| 516 | 521 | ||
| 517 | This is similar to trace_marker above, but is meant for for binary data | 522 | This is similar to trace_marker above, but is meant for for binary data |
diff --git a/Documentation/trace/histogram.txt b/Documentation/trace/histogram.txt index 6e05510afc28..b13771cb12c1 100644 --- a/Documentation/trace/histogram.txt +++ b/Documentation/trace/histogram.txt | |||
| @@ -1604,7 +1604,6 @@ | |||
| 1604 | Entries: 7 | 1604 | Entries: 7 |
| 1605 | Dropped: 0 | 1605 | Dropped: 0 |
| 1606 | 1606 | ||
| 1607 | |||
| 1608 | 2.2 Inter-event hist triggers | 1607 | 2.2 Inter-event hist triggers |
| 1609 | ----------------------------- | 1608 | ----------------------------- |
| 1610 | 1609 | ||
| @@ -1993,3 +1992,547 @@ hist trigger specification. | |||
| 1993 | Hits: 12970 | 1992 | Hits: 12970 |
| 1994 | Entries: 2 | 1993 | Entries: 2 |
| 1995 | Dropped: 0 | 1994 | Dropped: 0 |
| 1995 | |||
| 1996 | 3. User space creating a trigger | ||
| 1997 | -------------------------------- | ||
| 1998 | |||
| 1999 | Writing into /sys/kernel/tracing/trace_marker writes into the ftrace | ||
| 2000 | ring buffer. This can also act like an event, by writing into the trigger | ||
| 2001 | file located in /sys/kernel/tracing/events/ftrace/print/ | ||
| 2002 | |||
| 2003 | Modifying cyclictest to write into the trace_marker file before it sleeps | ||
| 2004 | and after it wakes up, something like this: | ||
| 2005 | |||
| 2006 | static void traceputs(char *str) | ||
| 2007 | { | ||
| 2008 | /* tracemark_fd is the trace_marker file descriptor */ | ||
| 2009 | if (tracemark_fd < 0) | ||
| 2010 | return; | ||
| 2011 | /* write the tracemark message */ | ||
| 2012 | write(tracemark_fd, str, strlen(str)); | ||
| 2013 | } | ||
| 2014 | |||
| 2015 | And later add something like: | ||
| 2016 | |||
| 2017 | traceputs("start"); | ||
| 2018 | clock_nanosleep(...); | ||
| 2019 | traceputs("end"); | ||
| 2020 | |||
| 2021 | We can make a histogram from this: | ||
| 2022 | |||
| 2023 | # cd /sys/kernel/tracing | ||
| 2024 | # echo 'latency u64 lat' > synthetic_events | ||
| 2025 | # echo 'hist:keys=common_pid:ts0=common_timestamp.usecs if buf == "start"' > events/ftrace/print/trigger | ||
| 2026 | # echo 'hist:keys=common_pid:lat=common_timestamp.usecs-$ts0:onmatch(ftrace.print).latency($lat) if buf == "end"' >> events/ftrace/print/trigger | ||
| 2027 | # echo 'hist:keys=lat,common_pid:sort=lat' > events/synthetic/latency/trigger | ||
| 2028 | |||
| 2029 | The above created a synthetic event called "latency" and two histograms | ||
| 2030 | against the trace_marker, one gets triggered when "start" is written into the | ||
| 2031 | trace_marker file and the other when "end" is written. If the pids match, then | ||
| 2032 | it will call the "latency" synthetic event with the calculated latency as its | ||
| 2033 | parameter. Finally, a histogram is added to the latency synthetic event to | ||
| 2034 | record the calculated latency along with the pid. | ||
| 2035 | |||
| 2036 | Now running cyclictest with: | ||
| 2037 | |||
| 2038 | # ./cyclictest -p80 -d0 -i250 -n -a -t --tracemark -b 1000 | ||
| 2039 | |||
| 2040 | -p80 : run threads at priority 80 | ||
| 2041 | -d0 : have all threads run at the same interval | ||
| 2042 | -i250 : start the interval at 250 microseconds (all threads will do this) | ||
| 2043 | -n : sleep with nanosleep | ||
| 2044 | -a : affine all threads to a separate CPU | ||
| 2045 | -t : one thread per available CPU | ||
| 2046 | --tracemark : enable trace mark writing | ||
| 2047 | -b 1000 : stop if any latency is greater than 1000 microseconds | ||
| 2048 | |||
| 2049 | Note, the -b 1000 is used just to make --tracemark available. | ||
| 2050 | |||
| 2051 | Then we can see the histogram created by this with: | ||
| 2052 | |||
| 2053 | # cat events/synthetic/latency/hist | ||
| 2054 | # event histogram | ||
| 2055 | # | ||
| 2056 | # trigger info: hist:keys=lat,common_pid:vals=hitcount:sort=lat:size=2048 [active] | ||
| 2057 | # | ||
| 2058 | |||
| 2059 | { lat: 107, common_pid: 2039 } hitcount: 1 | ||
| 2060 | { lat: 122, common_pid: 2041 } hitcount: 1 | ||
| 2061 | { lat: 166, common_pid: 2039 } hitcount: 1 | ||
| 2062 | { lat: 174, common_pid: 2039 } hitcount: 1 | ||
| 2063 | { lat: 194, common_pid: 2041 } hitcount: 1 | ||
| 2064 | { lat: 196, common_pid: 2036 } hitcount: 1 | ||
| 2065 | { lat: 197, common_pid: 2038 } hitcount: 1 | ||
| 2066 | { lat: 198, common_pid: 2039 } hitcount: 1 | ||
| 2067 | { lat: 199, common_pid: 2039 } hitcount: 1 | ||
| 2068 | { lat: 200, common_pid: 2041 } hitcount: 1 | ||
| 2069 | { lat: 201, common_pid: 2039 } hitcount: 2 | ||
| 2070 | { lat: 202, common_pid: 2038 } hitcount: 1 | ||
| 2071 | { lat: 202, common_pid: 2043 } hitcount: 1 | ||
| 2072 | { lat: 203, common_pid: 2039 } hitcount: 1 | ||
| 2073 | { lat: 203, common_pid: 2036 } hitcount: 1 | ||
| 2074 | { lat: 203, common_pid: 2041 } hitcount: 1 | ||
| 2075 | { lat: 206, common_pid: 2038 } hitcount: 2 | ||
| 2076 | { lat: 207, common_pid: 2039 } hitcount: 1 | ||
| 2077 | { lat: 207, common_pid: 2036 } hitcount: 1 | ||
| 2078 | { lat: 208, common_pid: 2040 } hitcount: 1 | ||
| 2079 | { lat: 209, common_pid: 2043 } hitcount: 1 | ||
| 2080 | { lat: 210, common_pid: 2039 } hitcount: 1 | ||
| 2081 | { lat: 211, common_pid: 2039 } hitcount: 4 | ||
| 2082 | { lat: 212, common_pid: 2043 } hitcount: 1 | ||
| 2083 | { lat: 212, common_pid: 2039 } hitcount: 2 | ||
| 2084 | { lat: 213, common_pid: 2039 } hitcount: 1 | ||
| 2085 | { lat: 214, common_pid: 2038 } hitcount: 1 | ||
| 2086 | { lat: 214, common_pid: 2039 } hitcount: 2 | ||
| 2087 | { lat: 214, common_pid: 2042 } hitcount: 1 | ||
| 2088 | { lat: 215, common_pid: 2039 } hitcount: 1 | ||
| 2089 | { lat: 217, common_pid: 2036 } hitcount: 1 | ||
| 2090 | { lat: 217, common_pid: 2040 } hitcount: 1 | ||
| 2091 | { lat: 217, common_pid: 2039 } hitcount: 1 | ||
| 2092 | { lat: 218, common_pid: 2039 } hitcount: 6 | ||
| 2093 | { lat: 219, common_pid: 2039 } hitcount: 9 | ||
| 2094 | { lat: 220, common_pid: 2039 } hitcount: 11 | ||
| 2095 | { lat: 221, common_pid: 2039 } hitcount: 5 | ||
| 2096 | { lat: 221, common_pid: 2042 } hitcount: 1 | ||
| 2097 | { lat: 222, common_pid: 2039 } hitcount: 7 | ||
| 2098 | { lat: 223, common_pid: 2036 } hitcount: 1 | ||
| 2099 | { lat: 223, common_pid: 2039 } hitcount: 3 | ||
| 2100 | { lat: 224, common_pid: 2039 } hitcount: 4 | ||
| 2101 | { lat: 224, common_pid: 2037 } hitcount: 1 | ||
| 2102 | { lat: 224, common_pid: 2036 } hitcount: 2 | ||
| 2103 | { lat: 225, common_pid: 2039 } hitcount: 5 | ||
| 2104 | { lat: 225, common_pid: 2042 } hitcount: 1 | ||
| 2105 | { lat: 226, common_pid: 2039 } hitcount: 7 | ||
| 2106 | { lat: 226, common_pid: 2036 } hitcount: 4 | ||
| 2107 | { lat: 227, common_pid: 2039 } hitcount: 6 | ||
| 2108 | { lat: 227, common_pid: 2036 } hitcount: 12 | ||
| 2109 | { lat: 227, common_pid: 2043 } hitcount: 1 | ||
| 2110 | { lat: 228, common_pid: 2039 } hitcount: 7 | ||
| 2111 | { lat: 228, common_pid: 2036 } hitcount: 14 | ||
| 2112 | { lat: 229, common_pid: 2039 } hitcount: 9 | ||
| 2113 | { lat: 229, common_pid: 2036 } hitcount: 8 | ||
| 2114 | { lat: 229, common_pid: 2038 } hitcount: 1 | ||
| 2115 | { lat: 230, common_pid: 2039 } hitcount: 11 | ||
| 2116 | { lat: 230, common_pid: 2036 } hitcount: 6 | ||
| 2117 | { lat: 230, common_pid: 2043 } hitcount: 1 | ||
| 2118 | { lat: 230, common_pid: 2042 } hitcount: 2 | ||
| 2119 | { lat: 231, common_pid: 2041 } hitcount: 1 | ||
| 2120 | { lat: 231, common_pid: 2036 } hitcount: 6 | ||
| 2121 | { lat: 231, common_pid: 2043 } hitcount: 1 | ||
| 2122 | { lat: 231, common_pid: 2039 } hitcount: 8 | ||
| 2123 | { lat: 232, common_pid: 2037 } hitcount: 1 | ||
| 2124 | { lat: 232, common_pid: 2039 } hitcount: 6 | ||
| 2125 | { lat: 232, common_pid: 2040 } hitcount: 2 | ||
| 2126 | { lat: 232, common_pid: 2036 } hitcount: 5 | ||
| 2127 | { lat: 232, common_pid: 2043 } hitcount: 1 | ||
| 2128 | { lat: 233, common_pid: 2036 } hitcount: 5 | ||
| 2129 | { lat: 233, common_pid: 2039 } hitcount: 11 | ||
| 2130 | { lat: 234, common_pid: 2039 } hitcount: 4 | ||
| 2131 | { lat: 234, common_pid: 2038 } hitcount: 2 | ||
| 2132 | { lat: 234, common_pid: 2043 } hitcount: 2 | ||
| 2133 | { lat: 234, common_pid: 2036 } hitcount: 11 | ||
| 2134 | { lat: 234, common_pid: 2040 } hitcount: 1 | ||
| 2135 | { lat: 235, common_pid: 2037 } hitcount: 2 | ||
| 2136 | { lat: 235, common_pid: 2036 } hitcount: 8 | ||
| 2137 | { lat: 235, common_pid: 2043 } hitcount: 2 | ||
| 2138 | { lat: 235, common_pid: 2039 } hitcount: 5 | ||
| 2139 | { lat: 235, common_pid: 2042 } hitcount: 2 | ||
| 2140 | { lat: 235, common_pid: 2040 } hitcount: 4 | ||
| 2141 | { lat: 235, common_pid: 2041 } hitcount: 1 | ||
| 2142 | { lat: 236, common_pid: 2036 } hitcount: 7 | ||
| 2143 | { lat: 236, common_pid: 2037 } hitcount: 1 | ||
| 2144 | { lat: 236, common_pid: 2041 } hitcount: 5 | ||
| 2145 | { lat: 236, common_pid: 2039 } hitcount: 3 | ||
| 2146 | { lat: 236, common_pid: 2043 } hitcount: 9 | ||
| 2147 | { lat: 236, common_pid: 2040 } hitcount: 7 | ||
| 2148 | { lat: 237, common_pid: 2037 } hitcount: 1 | ||
| 2149 | { lat: 237, common_pid: 2040 } hitcount: 1 | ||
| 2150 | { lat: 237, common_pid: 2036 } hitcount: 9 | ||
| 2151 | { lat: 237, common_pid: 2039 } hitcount: 3 | ||
| 2152 | { lat: 237, common_pid: 2043 } hitcount: 8 | ||
| 2153 | { lat: 237, common_pid: 2042 } hitcount: 2 | ||
| 2154 | { lat: 237, common_pid: 2041 } hitcount: 2 | ||
| 2155 | { lat: 238, common_pid: 2043 } hitcount: 10 | ||
| 2156 | { lat: 238, common_pid: 2040 } hitcount: 1 | ||
| 2157 | { lat: 238, common_pid: 2037 } hitcount: 9 | ||
| 2158 | { lat: 238, common_pid: 2038 } hitcount: 1 | ||
| 2159 | { lat: 238, common_pid: 2039 } hitcount: 1 | ||
| 2160 | { lat: 238, common_pid: 2042 } hitcount: 3 | ||
| 2161 | { lat: 238, common_pid: 2036 } hitcount: 7 | ||
| 2162 | { lat: 239, common_pid: 2041 } hitcount: 1 | ||
| 2163 | { lat: 239, common_pid: 2043 } hitcount: 11 | ||
| 2164 | { lat: 239, common_pid: 2037 } hitcount: 11 | ||
| 2165 | { lat: 239, common_pid: 2038 } hitcount: 6 | ||
| 2166 | { lat: 239, common_pid: 2036 } hitcount: 7 | ||
| 2167 | { lat: 239, common_pid: 2040 } hitcount: 1 | ||
| 2168 | { lat: 239, common_pid: 2042 } hitcount: 9 | ||
| 2169 | { lat: 240, common_pid: 2037 } hitcount: 29 | ||
| 2170 | { lat: 240, common_pid: 2043 } hitcount: 15 | ||
| 2171 | { lat: 240, common_pid: 2040 } hitcount: 44 | ||
| 2172 | { lat: 240, common_pid: 2039 } hitcount: 1 | ||
| 2173 | { lat: 240, common_pid: 2041 } hitcount: 2 | ||
| 2174 | { lat: 240, common_pid: 2038 } hitcount: 1 | ||
| 2175 | { lat: 240, common_pid: 2036 } hitcount: 10 | ||
| 2176 | { lat: 240, common_pid: 2042 } hitcount: 13 | ||
| 2177 | { lat: 241, common_pid: 2036 } hitcount: 21 | ||
| 2178 | { lat: 241, common_pid: 2041 } hitcount: 36 | ||
| 2179 | { lat: 241, common_pid: 2037 } hitcount: 34 | ||
| 2180 | { lat: 241, common_pid: 2042 } hitcount: 14 | ||
| 2181 | { lat: 241, common_pid: 2040 } hitcount: 94 | ||
| 2182 | { lat: 241, common_pid: 2039 } hitcount: 12 | ||
| 2183 | { lat: 241, common_pid: 2038 } hitcount: 2 | ||
| 2184 | { lat: 241, common_pid: 2043 } hitcount: 28 | ||
| 2185 | { lat: 242, common_pid: 2040 } hitcount: 109 | ||
| 2186 | { lat: 242, common_pid: 2041 } hitcount: 506 | ||
| 2187 | { lat: 242, common_pid: 2039 } hitcount: 155 | ||
| 2188 | { lat: 242, common_pid: 2042 } hitcount: 21 | ||
| 2189 | { lat: 242, common_pid: 2037 } hitcount: 52 | ||
| 2190 | { lat: 242, common_pid: 2043 } hitcount: 21 | ||
| 2191 | { lat: 242, common_pid: 2036 } hitcount: 16 | ||
| 2192 | { lat: 242, common_pid: 2038 } hitcount: 156 | ||
| 2193 | { lat: 243, common_pid: 2037 } hitcount: 46 | ||
| 2194 | { lat: 243, common_pid: 2039 } hitcount: 40 | ||
| 2195 | { lat: 243, common_pid: 2042 } hitcount: 119 | ||
| 2196 | { lat: 243, common_pid: 2041 } hitcount: 611 | ||
| 2197 | { lat: 243, common_pid: 2036 } hitcount: 69 | ||
| 2198 | { lat: 243, common_pid: 2038 } hitcount: 784 | ||
| 2199 | { lat: 243, common_pid: 2040 } hitcount: 323 | ||
| 2200 | { lat: 243, common_pid: 2043 } hitcount: 14 | ||
| 2201 | { lat: 244, common_pid: 2043 } hitcount: 35 | ||
| 2202 | { lat: 244, common_pid: 2042 } hitcount: 305 | ||
| 2203 | { lat: 244, common_pid: 2039 } hitcount: 8 | ||
| 2204 | { lat: 244, common_pid: 2040 } hitcount: 4515 | ||
| 2205 | { lat: 244, common_pid: 2038 } hitcount: 371 | ||
| 2206 | { lat: 244, common_pid: 2037 } hitcount: 31 | ||
| 2207 | { lat: 244, common_pid: 2036 } hitcount: 114 | ||
| 2208 | { lat: 244, common_pid: 2041 } hitcount: 3396 | ||
| 2209 | { lat: 245, common_pid: 2036 } hitcount: 700 | ||
| 2210 | { lat: 245, common_pid: 2041 } hitcount: 2772 | ||
| 2211 | { lat: 245, common_pid: 2037 } hitcount: 268 | ||
| 2212 | { lat: 245, common_pid: 2039 } hitcount: 472 | ||
| 2213 | { lat: 245, common_pid: 2038 } hitcount: 2758 | ||
| 2214 | { lat: 245, common_pid: 2042 } hitcount: 3833 | ||
| 2215 | { lat: 245, common_pid: 2040 } hitcount: 3105 | ||
| 2216 | { lat: 245, common_pid: 2043 } hitcount: 645 | ||
| 2217 | { lat: 246, common_pid: 2038 } hitcount: 3451 | ||
| 2218 | { lat: 246, common_pid: 2041 } hitcount: 142 | ||
| 2219 | { lat: 246, common_pid: 2037 } hitcount: 5101 | ||
| 2220 | { lat: 246, common_pid: 2040 } hitcount: 68 | ||
| 2221 | { lat: 246, common_pid: 2043 } hitcount: 5099 | ||
| 2222 | { lat: 246, common_pid: 2039 } hitcount: 5608 | ||
| 2223 | { lat: 246, common_pid: 2042 } hitcount: 3723 | ||
| 2224 | { lat: 246, common_pid: 2036 } hitcount: 4738 | ||
| 2225 | { lat: 247, common_pid: 2042 } hitcount: 312 | ||
| 2226 | { lat: 247, common_pid: 2043 } hitcount: 2385 | ||
| 2227 | { lat: 247, common_pid: 2041 } hitcount: 452 | ||
| 2228 | { lat: 247, common_pid: 2038 } hitcount: 792 | ||
| 2229 | { lat: 247, common_pid: 2040 } hitcount: 78 | ||
| 2230 | { lat: 247, common_pid: 2036 } hitcount: 2375 | ||
| 2231 | { lat: 247, common_pid: 2039 } hitcount: 1834 | ||
| 2232 | { lat: 247, common_pid: 2037 } hitcount: 2655 | ||
| 2233 | { lat: 248, common_pid: 2037 } hitcount: 36 | ||
| 2234 | { lat: 248, common_pid: 2042 } hitcount: 11 | ||
| 2235 | { lat: 248, common_pid: 2038 } hitcount: 122 | ||
| 2236 | { lat: 248, common_pid: 2036 } hitcount: 135 | ||
| 2237 | { lat: 248, common_pid: 2039 } hitcount: 26 | ||
| 2238 | { lat: 248, common_pid: 2041 } hitcount: 503 | ||
| 2239 | { lat: 248, common_pid: 2043 } hitcount: 66 | ||
| 2240 | { lat: 248, common_pid: 2040 } hitcount: 46 | ||
| 2241 | { lat: 249, common_pid: 2037 } hitcount: 29 | ||
| 2242 | { lat: 249, common_pid: 2038 } hitcount: 1 | ||
| 2243 | { lat: 249, common_pid: 2043 } hitcount: 29 | ||
| 2244 | { lat: 249, common_pid: 2039 } hitcount: 8 | ||
| 2245 | { lat: 249, common_pid: 2042 } hitcount: 56 | ||
| 2246 | { lat: 249, common_pid: 2040 } hitcount: 27 | ||
| 2247 | { lat: 249, common_pid: 2041 } hitcount: 11 | ||
| 2248 | { lat: 249, common_pid: 2036 } hitcount: 27 | ||
| 2249 | { lat: 250, common_pid: 2038 } hitcount: 1 | ||
| 2250 | { lat: 250, common_pid: 2036 } hitcount: 30 | ||
| 2251 | { lat: 250, common_pid: 2040 } hitcount: 19 | ||
| 2252 | { lat: 250, common_pid: 2043 } hitcount: 22 | ||
| 2253 | { lat: 250, common_pid: 2042 } hitcount: 20 | ||
| 2254 | { lat: 250, common_pid: 2041 } hitcount: 1 | ||
| 2255 | { lat: 250, common_pid: 2039 } hitcount: 6 | ||
| 2256 | { lat: 250, common_pid: 2037 } hitcount: 48 | ||
| 2257 | { lat: 251, common_pid: 2037 } hitcount: 43 | ||
| 2258 | { lat: 251, common_pid: 2039 } hitcount: 1 | ||
| 2259 | { lat: 251, common_pid: 2036 } hitcount: 12 | ||
| 2260 | { lat: 251, common_pid: 2042 } hitcount: 2 | ||
| 2261 | { lat: 251, common_pid: 2041 } hitcount: 1 | ||
| 2262 | { lat: 251, common_pid: 2043 } hitcount: 15 | ||
| 2263 | { lat: 251, common_pid: 2040 } hitcount: 3 | ||
| 2264 | { lat: 252, common_pid: 2040 } hitcount: 1 | ||
| 2265 | { lat: 252, common_pid: 2036 } hitcount: 12 | ||
| 2266 | { lat: 252, common_pid: 2037 } hitcount: 21 | ||
| 2267 | { lat: 252, common_pid: 2043 } hitcount: 14 | ||
| 2268 | { lat: 253, common_pid: 2037 } hitcount: 21 | ||
| 2269 | { lat: 253, common_pid: 2039 } hitcount: 2 | ||
| 2270 | { lat: 253, common_pid: 2036 } hitcount: 9 | ||
| 2271 | { lat: 253, common_pid: 2043 } hitcount: 6 | ||
| 2272 | { lat: 253, common_pid: 2040 } hitcount: 1 | ||
| 2273 | { lat: 254, common_pid: 2036 } hitcount: 8 | ||
| 2274 | { lat: 254, common_pid: 2043 } hitcount: 3 | ||
| 2275 | { lat: 254, common_pid: 2041 } hitcount: 1 | ||
| 2276 | { lat: 254, common_pid: 2042 } hitcount: 1 | ||
| 2277 | { lat: 254, common_pid: 2039 } hitcount: 1 | ||
| 2278 | { lat: 254, common_pid: 2037 } hitcount: 12 | ||
| 2279 | { lat: 255, common_pid: 2043 } hitcount: 1 | ||
| 2280 | { lat: 255, common_pid: 2037 } hitcount: 2 | ||
| 2281 | { lat: 255, common_pid: 2036 } hitcount: 2 | ||
| 2282 | { lat: 255, common_pid: 2039 } hitcount: 8 | ||
| 2283 | { lat: 256, common_pid: 2043 } hitcount: 1 | ||
| 2284 | { lat: 256, common_pid: 2036 } hitcount: 4 | ||
| 2285 | { lat: 256, common_pid: 2039 } hitcount: 6 | ||
| 2286 | { lat: 257, common_pid: 2039 } hitcount: 5 | ||
| 2287 | { lat: 257, common_pid: 2036 } hitcount: 4 | ||
| 2288 | { lat: 258, common_pid: 2039 } hitcount: 5 | ||
| 2289 | { lat: 258, common_pid: 2036 } hitcount: 2 | ||
| 2290 | { lat: 259, common_pid: 2036 } hitcount: 7 | ||
| 2291 | { lat: 259, common_pid: 2039 } hitcount: 7 | ||
| 2292 | { lat: 260, common_pid: 2036 } hitcount: 8 | ||
| 2293 | { lat: 260, common_pid: 2039 } hitcount: 6 | ||
| 2294 | { lat: 261, common_pid: 2036 } hitcount: 5 | ||
| 2295 | { lat: 261, common_pid: 2039 } hitcount: 7 | ||
| 2296 | { lat: 262, common_pid: 2039 } hitcount: 5 | ||
| 2297 | { lat: 262, common_pid: 2036 } hitcount: 5 | ||
| 2298 | { lat: 263, common_pid: 2039 } hitcount: 7 | ||
| 2299 | { lat: 263, common_pid: 2036 } hitcount: 7 | ||
| 2300 | { lat: 264, common_pid: 2039 } hitcount: 9 | ||
| 2301 | { lat: 264, common_pid: 2036 } hitcount: 9 | ||
| 2302 | { lat: 265, common_pid: 2036 } hitcount: 5 | ||
| 2303 | { lat: 265, common_pid: 2039 } hitcount: 1 | ||
| 2304 | { lat: 266, common_pid: 2036 } hitcount: 1 | ||
| 2305 | { lat: 266, common_pid: 2039 } hitcount: 3 | ||
| 2306 | { lat: 267, common_pid: 2036 } hitcount: 1 | ||
| 2307 | { lat: 267, common_pid: 2039 } hitcount: 3 | ||
| 2308 | { lat: 268, common_pid: 2036 } hitcount: 1 | ||
| 2309 | { lat: 268, common_pid: 2039 } hitcount: 6 | ||
| 2310 | { lat: 269, common_pid: 2036 } hitcount: 1 | ||
| 2311 | { lat: 269, common_pid: 2043 } hitcount: 1 | ||
| 2312 | { lat: 269, common_pid: 2039 } hitcount: 2 | ||
| 2313 | { lat: 270, common_pid: 2040 } hitcount: 1 | ||
| 2314 | { lat: 270, common_pid: 2039 } hitcount: 6 | ||
| 2315 | { lat: 271, common_pid: 2041 } hitcount: 1 | ||
| 2316 | { lat: 271, common_pid: 2039 } hitcount: 5 | ||
| 2317 | { lat: 272, common_pid: 2039 } hitcount: 10 | ||
| 2318 | { lat: 273, common_pid: 2039 } hitcount: 8 | ||
| 2319 | { lat: 274, common_pid: 2039 } hitcount: 2 | ||
| 2320 | { lat: 275, common_pid: 2039 } hitcount: 1 | ||
| 2321 | { lat: 276, common_pid: 2039 } hitcount: 2 | ||
| 2322 | { lat: 276, common_pid: 2037 } hitcount: 1 | ||
| 2323 | { lat: 276, common_pid: 2038 } hitcount: 1 | ||
| 2324 | { lat: 277, common_pid: 2039 } hitcount: 1 | ||
| 2325 | { lat: 277, common_pid: 2042 } hitcount: 1 | ||
| 2326 | { lat: 278, common_pid: 2039 } hitcount: 1 | ||
| 2327 | { lat: 279, common_pid: 2039 } hitcount: 4 | ||
| 2328 | { lat: 279, common_pid: 2043 } hitcount: 1 | ||
| 2329 | { lat: 280, common_pid: 2039 } hitcount: 3 | ||
| 2330 | { lat: 283, common_pid: 2036 } hitcount: 2 | ||
| 2331 | { lat: 284, common_pid: 2039 } hitcount: 1 | ||
| 2332 | { lat: 284, common_pid: 2043 } hitcount: 1 | ||
| 2333 | { lat: 288, common_pid: 2039 } hitcount: 1 | ||
| 2334 | { lat: 289, common_pid: 2039 } hitcount: 1 | ||
| 2335 | { lat: 300, common_pid: 2039 } hitcount: 1 | ||
| 2336 | { lat: 384, common_pid: 2039 } hitcount: 1 | ||
| 2337 | |||
| 2338 | Totals: | ||
| 2339 | Hits: 67625 | ||
| 2340 | Entries: 278 | ||
| 2341 | Dropped: 0 | ||
| 2342 | |||
| 2343 | Note, the writes are around the sleep, so ideally they will all be of 250 | ||
| 2344 | microseconds. If you are wondering how there are several that are under | ||
| 2345 | 250 microseconds, that is because the way cyclictest works, is if one | ||
| 2346 | iteration comes in late, the next one will set the timer to wake up less that | ||
| 2347 | 250. That is, if an iteration came in 50 microseconds late, the next wake up | ||
| 2348 | will be at 200 microseconds. | ||
| 2349 | |||
| 2350 | But this could easily be done in userspace. To make this even more | ||
| 2351 | interesting, we can mix the histogram between events that happened in the | ||
| 2352 | kernel with trace_marker. | ||
| 2353 | |||
| 2354 | # cd /sys/kernel/tracing | ||
| 2355 | # echo 'latency u64 lat' > synthetic_events | ||
| 2356 | # echo 'hist:keys=pid:ts0=common_timestamp.usecs' > events/sched/sched_waking/trigger | ||
| 2357 | # echo 'hist:keys=common_pid:lat=common_timestamp.usecs-$ts0:onmatch(sched.sched_waking).latency($lat) if buf == "end"' > events/ftrace/print/trigger | ||
| 2358 | # echo 'hist:keys=lat,common_pid:sort=lat' > events/synthetic/latency/trigger | ||
| 2359 | |||
| 2360 | The difference this time is that instead of using the trace_marker to start | ||
| 2361 | the latency, the sched_waking event is used, matching the common_pid for the | ||
| 2362 | trace_marker write with the pid that is being woken by sched_waking. | ||
| 2363 | |||
| 2364 | After running cyclictest again with the same parameters, we now have: | ||
| 2365 | |||
| 2366 | # cat events/synthetic/latency/hist | ||
| 2367 | # event histogram | ||
| 2368 | # | ||
| 2369 | # trigger info: hist:keys=lat,common_pid:vals=hitcount:sort=lat:size=2048 [active] | ||
| 2370 | # | ||
| 2371 | |||
| 2372 | { lat: 7, common_pid: 2302 } hitcount: 640 | ||
| 2373 | { lat: 7, common_pid: 2299 } hitcount: 42 | ||
| 2374 | { lat: 7, common_pid: 2303 } hitcount: 18 | ||
| 2375 | { lat: 7, common_pid: 2305 } hitcount: 166 | ||
| 2376 | { lat: 7, common_pid: 2306 } hitcount: 1 | ||
| 2377 | { lat: 7, common_pid: 2301 } hitcount: 91 | ||
| 2378 | { lat: 7, common_pid: 2300 } hitcount: 17 | ||
| 2379 | { lat: 8, common_pid: 2303 } hitcount: 8296 | ||
| 2380 | { lat: 8, common_pid: 2304 } hitcount: 6864 | ||
| 2381 | { lat: 8, common_pid: 2305 } hitcount: 9464 | ||
| 2382 | { lat: 8, common_pid: 2301 } hitcount: 9213 | ||
| 2383 | { lat: 8, common_pid: 2306 } hitcount: 6246 | ||
| 2384 | { lat: 8, common_pid: 2302 } hitcount: 8797 | ||
| 2385 | { lat: 8, common_pid: 2299 } hitcount: 8771 | ||
| 2386 | { lat: 8, common_pid: 2300 } hitcount: 8119 | ||
| 2387 | { lat: 9, common_pid: 2305 } hitcount: 1519 | ||
| 2388 | { lat: 9, common_pid: 2299 } hitcount: 2346 | ||
| 2389 | { lat: 9, common_pid: 2303 } hitcount: 2841 | ||
| 2390 | { lat: 9, common_pid: 2301 } hitcount: 1846 | ||
| 2391 | { lat: 9, common_pid: 2304 } hitcount: 3861 | ||
| 2392 | { lat: 9, common_pid: 2302 } hitcount: 1210 | ||
| 2393 | { lat: 9, common_pid: 2300 } hitcount: 2762 | ||
| 2394 | { lat: 9, common_pid: 2306 } hitcount: 4247 | ||
| 2395 | { lat: 10, common_pid: 2299 } hitcount: 16 | ||
| 2396 | { lat: 10, common_pid: 2306 } hitcount: 333 | ||
| 2397 | { lat: 10, common_pid: 2303 } hitcount: 16 | ||
| 2398 | { lat: 10, common_pid: 2304 } hitcount: 168 | ||
| 2399 | { lat: 10, common_pid: 2302 } hitcount: 240 | ||
| 2400 | { lat: 10, common_pid: 2301 } hitcount: 28 | ||
| 2401 | { lat: 10, common_pid: 2300 } hitcount: 95 | ||
| 2402 | { lat: 10, common_pid: 2305 } hitcount: 18 | ||
| 2403 | { lat: 11, common_pid: 2303 } hitcount: 5 | ||
| 2404 | { lat: 11, common_pid: 2305 } hitcount: 8 | ||
| 2405 | { lat: 11, common_pid: 2306 } hitcount: 221 | ||
| 2406 | { lat: 11, common_pid: 2302 } hitcount: 76 | ||
| 2407 | { lat: 11, common_pid: 2304 } hitcount: 26 | ||
| 2408 | { lat: 11, common_pid: 2300 } hitcount: 125 | ||
| 2409 | { lat: 11, common_pid: 2299 } hitcount: 2 | ||
| 2410 | { lat: 12, common_pid: 2305 } hitcount: 3 | ||
| 2411 | { lat: 12, common_pid: 2300 } hitcount: 6 | ||
| 2412 | { lat: 12, common_pid: 2306 } hitcount: 90 | ||
| 2413 | { lat: 12, common_pid: 2302 } hitcount: 4 | ||
| 2414 | { lat: 12, common_pid: 2303 } hitcount: 1 | ||
| 2415 | { lat: 12, common_pid: 2304 } hitcount: 122 | ||
| 2416 | { lat: 13, common_pid: 2300 } hitcount: 12 | ||
| 2417 | { lat: 13, common_pid: 2301 } hitcount: 1 | ||
| 2418 | { lat: 13, common_pid: 2306 } hitcount: 32 | ||
| 2419 | { lat: 13, common_pid: 2302 } hitcount: 5 | ||
| 2420 | { lat: 13, common_pid: 2305 } hitcount: 1 | ||
| 2421 | { lat: 13, common_pid: 2303 } hitcount: 1 | ||
| 2422 | { lat: 13, common_pid: 2304 } hitcount: 61 | ||
| 2423 | { lat: 14, common_pid: 2303 } hitcount: 4 | ||
| 2424 | { lat: 14, common_pid: 2306 } hitcount: 5 | ||
| 2425 | { lat: 14, common_pid: 2305 } hitcount: 4 | ||
| 2426 | { lat: 14, common_pid: 2304 } hitcount: 62 | ||
| 2427 | { lat: 14, common_pid: 2302 } hitcount: 19 | ||
| 2428 | { lat: 14, common_pid: 2300 } hitcount: 33 | ||
| 2429 | { lat: 14, common_pid: 2299 } hitcount: 1 | ||
| 2430 | { lat: 14, common_pid: 2301 } hitcount: 4 | ||
| 2431 | { lat: 15, common_pid: 2305 } hitcount: 1 | ||
| 2432 | { lat: 15, common_pid: 2302 } hitcount: 25 | ||
| 2433 | { lat: 15, common_pid: 2300 } hitcount: 11 | ||
| 2434 | { lat: 15, common_pid: 2299 } hitcount: 5 | ||
| 2435 | { lat: 15, common_pid: 2301 } hitcount: 1 | ||
| 2436 | { lat: 15, common_pid: 2304 } hitcount: 8 | ||
| 2437 | { lat: 15, common_pid: 2303 } hitcount: 1 | ||
| 2438 | { lat: 15, common_pid: 2306 } hitcount: 6 | ||
| 2439 | { lat: 16, common_pid: 2302 } hitcount: 31 | ||
| 2440 | { lat: 16, common_pid: 2306 } hitcount: 3 | ||
| 2441 | { lat: 16, common_pid: 2300 } hitcount: 5 | ||
| 2442 | { lat: 17, common_pid: 2302 } hitcount: 6 | ||
| 2443 | { lat: 17, common_pid: 2303 } hitcount: 1 | ||
| 2444 | { lat: 18, common_pid: 2304 } hitcount: 1 | ||
| 2445 | { lat: 18, common_pid: 2302 } hitcount: 8 | ||
| 2446 | { lat: 18, common_pid: 2299 } hitcount: 1 | ||
| 2447 | { lat: 18, common_pid: 2301 } hitcount: 1 | ||
| 2448 | { lat: 19, common_pid: 2303 } hitcount: 4 | ||
| 2449 | { lat: 19, common_pid: 2304 } hitcount: 5 | ||
| 2450 | { lat: 19, common_pid: 2302 } hitcount: 4 | ||
| 2451 | { lat: 19, common_pid: 2299 } hitcount: 3 | ||
| 2452 | { lat: 19, common_pid: 2306 } hitcount: 1 | ||
| 2453 | { lat: 19, common_pid: 2300 } hitcount: 4 | ||
| 2454 | { lat: 19, common_pid: 2305 } hitcount: 5 | ||
| 2455 | { lat: 20, common_pid: 2299 } hitcount: 2 | ||
| 2456 | { lat: 20, common_pid: 2302 } hitcount: 3 | ||
| 2457 | { lat: 20, common_pid: 2305 } hitcount: 1 | ||
| 2458 | { lat: 20, common_pid: 2300 } hitcount: 2 | ||
| 2459 | { lat: 20, common_pid: 2301 } hitcount: 2 | ||
| 2460 | { lat: 20, common_pid: 2303 } hitcount: 3 | ||
| 2461 | { lat: 21, common_pid: 2305 } hitcount: 1 | ||
| 2462 | { lat: 21, common_pid: 2299 } hitcount: 5 | ||
| 2463 | { lat: 21, common_pid: 2303 } hitcount: 4 | ||
| 2464 | { lat: 21, common_pid: 2302 } hitcount: 7 | ||
| 2465 | { lat: 21, common_pid: 2300 } hitcount: 1 | ||
| 2466 | { lat: 21, common_pid: 2301 } hitcount: 5 | ||
| 2467 | { lat: 21, common_pid: 2304 } hitcount: 2 | ||
| 2468 | { lat: 22, common_pid: 2302 } hitcount: 5 | ||
| 2469 | { lat: 22, common_pid: 2303 } hitcount: 1 | ||
| 2470 | { lat: 22, common_pid: 2306 } hitcount: 3 | ||
| 2471 | { lat: 22, common_pid: 2301 } hitcount: 2 | ||
| 2472 | { lat: 22, common_pid: 2300 } hitcount: 1 | ||
| 2473 | { lat: 22, common_pid: 2299 } hitcount: 1 | ||
| 2474 | { lat: 22, common_pid: 2305 } hitcount: 1 | ||
| 2475 | { lat: 22, common_pid: 2304 } hitcount: 1 | ||
| 2476 | { lat: 23, common_pid: 2299 } hitcount: 1 | ||
| 2477 | { lat: 23, common_pid: 2306 } hitcount: 2 | ||
| 2478 | { lat: 23, common_pid: 2302 } hitcount: 6 | ||
| 2479 | { lat: 24, common_pid: 2302 } hitcount: 3 | ||
| 2480 | { lat: 24, common_pid: 2300 } hitcount: 1 | ||
| 2481 | { lat: 24, common_pid: 2306 } hitcount: 2 | ||
| 2482 | { lat: 24, common_pid: 2305 } hitcount: 1 | ||
| 2483 | { lat: 24, common_pid: 2299 } hitcount: 1 | ||
| 2484 | { lat: 25, common_pid: 2300 } hitcount: 1 | ||
| 2485 | { lat: 25, common_pid: 2302 } hitcount: 4 | ||
| 2486 | { lat: 26, common_pid: 2302 } hitcount: 2 | ||
| 2487 | { lat: 27, common_pid: 2305 } hitcount: 1 | ||
| 2488 | { lat: 27, common_pid: 2300 } hitcount: 1 | ||
| 2489 | { lat: 27, common_pid: 2302 } hitcount: 3 | ||
| 2490 | { lat: 28, common_pid: 2306 } hitcount: 1 | ||
| 2491 | { lat: 28, common_pid: 2302 } hitcount: 4 | ||
| 2492 | { lat: 29, common_pid: 2302 } hitcount: 1 | ||
| 2493 | { lat: 29, common_pid: 2300 } hitcount: 2 | ||
| 2494 | { lat: 29, common_pid: 2306 } hitcount: 1 | ||
| 2495 | { lat: 29, common_pid: 2304 } hitcount: 1 | ||
| 2496 | { lat: 30, common_pid: 2302 } hitcount: 4 | ||
| 2497 | { lat: 31, common_pid: 2302 } hitcount: 6 | ||
| 2498 | { lat: 32, common_pid: 2302 } hitcount: 1 | ||
| 2499 | { lat: 33, common_pid: 2299 } hitcount: 1 | ||
| 2500 | { lat: 33, common_pid: 2302 } hitcount: 3 | ||
| 2501 | { lat: 34, common_pid: 2302 } hitcount: 2 | ||
| 2502 | { lat: 35, common_pid: 2302 } hitcount: 1 | ||
| 2503 | { lat: 35, common_pid: 2304 } hitcount: 1 | ||
| 2504 | { lat: 36, common_pid: 2302 } hitcount: 4 | ||
| 2505 | { lat: 37, common_pid: 2302 } hitcount: 6 | ||
| 2506 | { lat: 38, common_pid: 2302 } hitcount: 2 | ||
| 2507 | { lat: 39, common_pid: 2302 } hitcount: 2 | ||
| 2508 | { lat: 39, common_pid: 2304 } hitcount: 1 | ||
| 2509 | { lat: 40, common_pid: 2304 } hitcount: 2 | ||
| 2510 | { lat: 40, common_pid: 2302 } hitcount: 5 | ||
| 2511 | { lat: 41, common_pid: 2304 } hitcount: 1 | ||
| 2512 | { lat: 41, common_pid: 2302 } hitcount: 8 | ||
| 2513 | { lat: 42, common_pid: 2302 } hitcount: 6 | ||
| 2514 | { lat: 42, common_pid: 2304 } hitcount: 1 | ||
| 2515 | { lat: 43, common_pid: 2302 } hitcount: 3 | ||
| 2516 | { lat: 43, common_pid: 2304 } hitcount: 4 | ||
| 2517 | { lat: 44, common_pid: 2302 } hitcount: 6 | ||
| 2518 | { lat: 45, common_pid: 2302 } hitcount: 5 | ||
| 2519 | { lat: 46, common_pid: 2302 } hitcount: 5 | ||
| 2520 | { lat: 47, common_pid: 2302 } hitcount: 7 | ||
| 2521 | { lat: 48, common_pid: 2301 } hitcount: 1 | ||
| 2522 | { lat: 48, common_pid: 2302 } hitcount: 9 | ||
| 2523 | { lat: 49, common_pid: 2302 } hitcount: 3 | ||
| 2524 | { lat: 50, common_pid: 2302 } hitcount: 1 | ||
| 2525 | { lat: 50, common_pid: 2301 } hitcount: 1 | ||
| 2526 | { lat: 51, common_pid: 2302 } hitcount: 2 | ||
| 2527 | { lat: 51, common_pid: 2301 } hitcount: 1 | ||
| 2528 | { lat: 61, common_pid: 2302 } hitcount: 1 | ||
| 2529 | { lat: 110, common_pid: 2302 } hitcount: 1 | ||
| 2530 | |||
| 2531 | Totals: | ||
| 2532 | Hits: 89565 | ||
| 2533 | Entries: 158 | ||
| 2534 | Dropped: 0 | ||
| 2535 | |||
| 2536 | This doesn't tell us any information about how late cyclictest may have | ||
| 2537 | woken up, but it does show us a nice histogram of how long it took from | ||
| 2538 | the time that cyclictest was woken to the time it made it into user space. | ||
