annotate llvm/docs/XRay.rst @ 164:fdfabb438fbf

...
author anatofuz
date Thu, 19 Mar 2020 17:02:53 +0900
parents 1d019706d866
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 ====================
anatofuz
parents:
diff changeset
2 XRay Instrumentation
anatofuz
parents:
diff changeset
3 ====================
anatofuz
parents:
diff changeset
4
anatofuz
parents:
diff changeset
5 :Version: 1 as of 2016-11-08
anatofuz
parents:
diff changeset
6
anatofuz
parents:
diff changeset
7 .. contents::
anatofuz
parents:
diff changeset
8 :local:
anatofuz
parents:
diff changeset
9
anatofuz
parents:
diff changeset
10
anatofuz
parents:
diff changeset
11 Introduction
anatofuz
parents:
diff changeset
12 ============
anatofuz
parents:
diff changeset
13
anatofuz
parents:
diff changeset
14 XRay is a function call tracing system which combines compiler-inserted
anatofuz
parents:
diff changeset
15 instrumentation points and a runtime library that can dynamically enable and
anatofuz
parents:
diff changeset
16 disable the instrumentation.
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 More high level information about XRay can be found in the `XRay whitepaper`_.
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 This document describes how to use XRay as implemented in LLVM.
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 XRay in LLVM
anatofuz
parents:
diff changeset
23 ============
anatofuz
parents:
diff changeset
24
anatofuz
parents:
diff changeset
25 XRay consists of three main parts:
anatofuz
parents:
diff changeset
26
anatofuz
parents:
diff changeset
27 - Compiler-inserted instrumentation points.
anatofuz
parents:
diff changeset
28 - A runtime library for enabling/disabling tracing at runtime.
anatofuz
parents:
diff changeset
29 - A suite of tools for analysing the traces.
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 **NOTE:** As of July 25, 2018 , XRay is only available for the following
anatofuz
parents:
diff changeset
32 architectures running Linux: x86_64, arm7 (no thumb), aarch64, powerpc64le,
anatofuz
parents:
diff changeset
33 mips, mipsel, mips64, mips64el, NetBSD: x86_64, FreeBSD: x86_64 and
anatofuz
parents:
diff changeset
34 OpenBSD: x86_64.
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 The compiler-inserted instrumentation points come in the form of nop-sleds in
anatofuz
parents:
diff changeset
37 the final generated binary, and an ELF section named ``xray_instr_map`` which
anatofuz
parents:
diff changeset
38 contains entries pointing to these instrumentation points. The runtime library
anatofuz
parents:
diff changeset
39 relies on being able to access the entries of the ``xray_instr_map``, and
anatofuz
parents:
diff changeset
40 overwrite the instrumentation points at runtime.
anatofuz
parents:
diff changeset
41
anatofuz
parents:
diff changeset
42 Using XRay
anatofuz
parents:
diff changeset
43 ==========
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 You can use XRay in a couple of ways:
anatofuz
parents:
diff changeset
46
anatofuz
parents:
diff changeset
47 - Instrumenting your C/C++/Objective-C/Objective-C++ application.
anatofuz
parents:
diff changeset
48 - Generating LLVM IR with the correct function attributes.
anatofuz
parents:
diff changeset
49
anatofuz
parents:
diff changeset
50 The rest of this section covers these main ways and later on how to customise
anatofuz
parents:
diff changeset
51 what XRay does in an XRay-instrumented binary.
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53 Instrumenting your C/C++/Objective-C Application
anatofuz
parents:
diff changeset
54 ------------------------------------------------
anatofuz
parents:
diff changeset
55
anatofuz
parents:
diff changeset
56 The easiest way of getting XRay instrumentation for your application is by
anatofuz
parents:
diff changeset
57 enabling the ``-fxray-instrument`` flag in your clang invocation.
anatofuz
parents:
diff changeset
58
anatofuz
parents:
diff changeset
59 For example:
anatofuz
parents:
diff changeset
60
anatofuz
parents:
diff changeset
61 ::
anatofuz
parents:
diff changeset
62
anatofuz
parents:
diff changeset
63 clang -fxray-instrument ...
anatofuz
parents:
diff changeset
64
anatofuz
parents:
diff changeset
65 By default, functions that have at least 200 instructions will get XRay
anatofuz
parents:
diff changeset
66 instrumentation points. You can tweak that number through the
anatofuz
parents:
diff changeset
67 ``-fxray-instruction-threshold=`` flag:
anatofuz
parents:
diff changeset
68
anatofuz
parents:
diff changeset
69 ::
anatofuz
parents:
diff changeset
70
anatofuz
parents:
diff changeset
71 clang -fxray-instrument -fxray-instruction-threshold=1 ...
anatofuz
parents:
diff changeset
72
anatofuz
parents:
diff changeset
73 You can also specifically instrument functions in your binary to either always
anatofuz
parents:
diff changeset
74 or never be instrumented using source-level attributes. You can do it using the
anatofuz
parents:
diff changeset
75 GCC-style attributes or C++11-style attributes.
anatofuz
parents:
diff changeset
76
anatofuz
parents:
diff changeset
77 .. code-block:: c++
anatofuz
parents:
diff changeset
78
anatofuz
parents:
diff changeset
79 [[clang::xray_always_instrument]] void always_instrumented();
anatofuz
parents:
diff changeset
80
anatofuz
parents:
diff changeset
81 [[clang::xray_never_instrument]] void never_instrumented();
anatofuz
parents:
diff changeset
82
anatofuz
parents:
diff changeset
83 void alt_always_instrumented() __attribute__((xray_always_instrument));
anatofuz
parents:
diff changeset
84
anatofuz
parents:
diff changeset
85 void alt_never_instrumented() __attribute__((xray_never_instrument));
anatofuz
parents:
diff changeset
86
anatofuz
parents:
diff changeset
87 When linking a binary, you can either manually link in the `XRay Runtime
anatofuz
parents:
diff changeset
88 Library`_ or use ``clang`` to link it in automatically with the
anatofuz
parents:
diff changeset
89 ``-fxray-instrument`` flag. Alternatively, you can statically link-in the XRay
anatofuz
parents:
diff changeset
90 runtime library from compiler-rt -- those archive files will take the name of
anatofuz
parents:
diff changeset
91 `libclang_rt.xray-{arch}` where `{arch}` is the mnemonic supported by clang
anatofuz
parents:
diff changeset
92 (x86_64, arm7, etc.).
anatofuz
parents:
diff changeset
93
anatofuz
parents:
diff changeset
94 LLVM Function Attribute
anatofuz
parents:
diff changeset
95 -----------------------
anatofuz
parents:
diff changeset
96
anatofuz
parents:
diff changeset
97 If you're using LLVM IR directly, you can add the ``function-instrument``
anatofuz
parents:
diff changeset
98 string attribute to your functions, to get the similar effect that the
anatofuz
parents:
diff changeset
99 C/C++/Objective-C source-level attributes would get:
anatofuz
parents:
diff changeset
100
anatofuz
parents:
diff changeset
101 .. code-block:: llvm
anatofuz
parents:
diff changeset
102
anatofuz
parents:
diff changeset
103 define i32 @always_instrument() uwtable "function-instrument"="xray-always" {
anatofuz
parents:
diff changeset
104 ; ...
anatofuz
parents:
diff changeset
105 }
anatofuz
parents:
diff changeset
106
anatofuz
parents:
diff changeset
107 define i32 @never_instrument() uwtable "function-instrument"="xray-never" {
anatofuz
parents:
diff changeset
108 ; ...
anatofuz
parents:
diff changeset
109 }
anatofuz
parents:
diff changeset
110
anatofuz
parents:
diff changeset
111 You can also set the ``xray-instruction-threshold`` attribute and provide a
anatofuz
parents:
diff changeset
112 numeric string value for how many instructions should be in the function before
anatofuz
parents:
diff changeset
113 it gets instrumented.
anatofuz
parents:
diff changeset
114
anatofuz
parents:
diff changeset
115 .. code-block:: llvm
anatofuz
parents:
diff changeset
116
anatofuz
parents:
diff changeset
117 define i32 @maybe_instrument() uwtable "xray-instruction-threshold"="2" {
anatofuz
parents:
diff changeset
118 ; ...
anatofuz
parents:
diff changeset
119 }
anatofuz
parents:
diff changeset
120
anatofuz
parents:
diff changeset
121 Special Case File
anatofuz
parents:
diff changeset
122 -----------------
anatofuz
parents:
diff changeset
123
anatofuz
parents:
diff changeset
124 Attributes can be imbued through the use of special case files instead of
anatofuz
parents:
diff changeset
125 adding them to the original source files. You can use this to mark certain
anatofuz
parents:
diff changeset
126 functions and classes to be never, always, or instrumented with first-argument
anatofuz
parents:
diff changeset
127 logging from a file. The file's format is described below:
anatofuz
parents:
diff changeset
128
anatofuz
parents:
diff changeset
129 .. code-block:: bash
anatofuz
parents:
diff changeset
130
anatofuz
parents:
diff changeset
131 # Comments are supported
anatofuz
parents:
diff changeset
132 [always]
anatofuz
parents:
diff changeset
133 fun:always_instrument
anatofuz
parents:
diff changeset
134 fun:log_arg1=arg1 # Log the first argument for the function
anatofuz
parents:
diff changeset
135
anatofuz
parents:
diff changeset
136 [never]
anatofuz
parents:
diff changeset
137 fun:never_instrument
anatofuz
parents:
diff changeset
138
anatofuz
parents:
diff changeset
139 These files can be provided through the ``-fxray-attr-list=`` flag to clang.
anatofuz
parents:
diff changeset
140 You may have multiple files loaded through multiple instances of the flag.
anatofuz
parents:
diff changeset
141
anatofuz
parents:
diff changeset
142 XRay Runtime Library
anatofuz
parents:
diff changeset
143 --------------------
anatofuz
parents:
diff changeset
144
anatofuz
parents:
diff changeset
145 The XRay Runtime Library is part of the compiler-rt project, which implements
anatofuz
parents:
diff changeset
146 the runtime components that perform the patching and unpatching of inserted
anatofuz
parents:
diff changeset
147 instrumentation points. When you use ``clang`` to link your binaries and the
anatofuz
parents:
diff changeset
148 ``-fxray-instrument`` flag, it will automatically link in the XRay runtime.
anatofuz
parents:
diff changeset
149
anatofuz
parents:
diff changeset
150 The default implementation of the XRay runtime will enable XRay instrumentation
anatofuz
parents:
diff changeset
151 before ``main`` starts, which works for applications that have a short
anatofuz
parents:
diff changeset
152 lifetime. This implementation also records all function entry and exit events
anatofuz
parents:
diff changeset
153 which may result in a lot of records in the resulting trace.
anatofuz
parents:
diff changeset
154
anatofuz
parents:
diff changeset
155 Also by default the filename of the XRay trace is ``xray-log.XXXXXX`` where the
anatofuz
parents:
diff changeset
156 ``XXXXXX`` part is randomly generated.
anatofuz
parents:
diff changeset
157
anatofuz
parents:
diff changeset
158 These options can be controlled through the ``XRAY_OPTIONS`` environment
anatofuz
parents:
diff changeset
159 variable, where we list down the options and their defaults below.
anatofuz
parents:
diff changeset
160
anatofuz
parents:
diff changeset
161 +-------------------+-----------------+---------------+------------------------+
anatofuz
parents:
diff changeset
162 | Option | Type | Default | Description |
anatofuz
parents:
diff changeset
163 +===================+=================+===============+========================+
anatofuz
parents:
diff changeset
164 | patch_premain | ``bool`` | ``false`` | Whether to patch |
anatofuz
parents:
diff changeset
165 | | | | instrumentation points |
anatofuz
parents:
diff changeset
166 | | | | before main. |
anatofuz
parents:
diff changeset
167 +-------------------+-----------------+---------------+------------------------+
anatofuz
parents:
diff changeset
168 | xray_mode | ``const char*`` | ``""`` | Default mode to |
anatofuz
parents:
diff changeset
169 | | | | install and initialize |
anatofuz
parents:
diff changeset
170 | | | | before ``main``. |
anatofuz
parents:
diff changeset
171 +-------------------+-----------------+---------------+------------------------+
anatofuz
parents:
diff changeset
172 | xray_logfile_base | ``const char*`` | ``xray-log.`` | Filename base for the |
anatofuz
parents:
diff changeset
173 | | | | XRay logfile. |
anatofuz
parents:
diff changeset
174 +-------------------+-----------------+---------------+------------------------+
anatofuz
parents:
diff changeset
175 | verbosity | ``int`` | ``0`` | Runtime verbosity |
anatofuz
parents:
diff changeset
176 | | | | level. |
anatofuz
parents:
diff changeset
177 +-------------------+-----------------+---------------+------------------------+
anatofuz
parents:
diff changeset
178
anatofuz
parents:
diff changeset
179
anatofuz
parents:
diff changeset
180 If you choose to not use the default logging implementation that comes with the
anatofuz
parents:
diff changeset
181 XRay runtime and/or control when/how the XRay instrumentation runs, you may use
anatofuz
parents:
diff changeset
182 the XRay APIs directly for doing so. To do this, you'll need to include the
anatofuz
parents:
diff changeset
183 ``xray_log_interface.h`` from the compiler-rt ``xray`` directory. The important API
anatofuz
parents:
diff changeset
184 functions we list below:
anatofuz
parents:
diff changeset
185
anatofuz
parents:
diff changeset
186 - ``__xray_log_register_mode(...)``: Register a logging implementation against
anatofuz
parents:
diff changeset
187 a string Mode identifier. The implementation is an instance of
anatofuz
parents:
diff changeset
188 ``XRayLogImpl`` defined in ``xray/xray_log_interface.h``.
anatofuz
parents:
diff changeset
189 - ``__xray_log_select_mode(...)``: Select the mode to install, associated with
anatofuz
parents:
diff changeset
190 a string Mode identifier. Only implementations registered with
anatofuz
parents:
diff changeset
191 ``__xray_log_register_mode(...)`` can be chosen with this function.
anatofuz
parents:
diff changeset
192 - ``__xray_log_init_mode(...)``: This function allows for initializing and
anatofuz
parents:
diff changeset
193 re-initializing an installed logging implementation. See
anatofuz
parents:
diff changeset
194 ``xray/xray_log_interface.h`` for details, part of the XRay compiler-rt
anatofuz
parents:
diff changeset
195 installation.
anatofuz
parents:
diff changeset
196
anatofuz
parents:
diff changeset
197 Once a logging implementation has been initialized, it can be "stopped" by
anatofuz
parents:
diff changeset
198 finalizing the implementation through the ``__xray_log_finalize()`` function.
anatofuz
parents:
diff changeset
199 The finalization routine is the opposite of the initialization. When finalized,
anatofuz
parents:
diff changeset
200 an implementation's data can be cleared out through the
anatofuz
parents:
diff changeset
201 ``__xray_log_flushLog()`` function. For implementations that support in-memory
anatofuz
parents:
diff changeset
202 processing, these should register an iterator function to provide access to the
anatofuz
parents:
diff changeset
203 data via the ``__xray_log_set_buffer_iterator(...)`` which allows code calling
anatofuz
parents:
diff changeset
204 the ``__xray_log_process_buffers(...)`` function to deal with the data in
anatofuz
parents:
diff changeset
205 memory.
anatofuz
parents:
diff changeset
206
anatofuz
parents:
diff changeset
207 All of this is better explained in the ``xray/xray_log_interface.h`` header.
anatofuz
parents:
diff changeset
208
anatofuz
parents:
diff changeset
209 Basic Mode
anatofuz
parents:
diff changeset
210 ----------
anatofuz
parents:
diff changeset
211
anatofuz
parents:
diff changeset
212 XRay supports a basic logging mode which will trace the application's
anatofuz
parents:
diff changeset
213 execution, and periodically append to a single log. This mode can be
anatofuz
parents:
diff changeset
214 installed/enabled by setting ``xray_mode=xray-basic`` in the ``XRAY_OPTIONS``
anatofuz
parents:
diff changeset
215 environment variable. Combined with ``patch_premain=true`` this can allow for
anatofuz
parents:
diff changeset
216 tracing applications from start to end.
anatofuz
parents:
diff changeset
217
anatofuz
parents:
diff changeset
218 Like all the other modes installed through ``__xray_log_select_mode(...)``, the
anatofuz
parents:
diff changeset
219 implementation can be configured through the ``__xray_log_init_mode(...)``
anatofuz
parents:
diff changeset
220 function, providing the mode string and the flag options. Basic-mode specific
anatofuz
parents:
diff changeset
221 defaults can be provided in the ``XRAY_BASIC_OPTIONS`` environment variable.
anatofuz
parents:
diff changeset
222
anatofuz
parents:
diff changeset
223 Flight Data Recorder Mode
anatofuz
parents:
diff changeset
224 -------------------------
anatofuz
parents:
diff changeset
225
anatofuz
parents:
diff changeset
226 XRay supports a logging mode which allows the application to only capture a
anatofuz
parents:
diff changeset
227 fixed amount of memory's worth of events. Flight Data Recorder (FDR) mode works
anatofuz
parents:
diff changeset
228 very much like a plane's "black box" which keeps recording data to memory in a
anatofuz
parents:
diff changeset
229 fixed-size circular queue of buffers, and have the data available
anatofuz
parents:
diff changeset
230 programmatically until the buffers are finalized and flushed. To use FDR mode
anatofuz
parents:
diff changeset
231 on your application, you may set the ``xray_mode`` variable to ``xray-fdr`` in
anatofuz
parents:
diff changeset
232 the ``XRAY_OPTIONS`` environment variable. Additional options to the FDR mode
anatofuz
parents:
diff changeset
233 implementation can be provided in the ``XRAY_FDR_OPTIONS`` environment
anatofuz
parents:
diff changeset
234 variable. Programmatic configuration can be done by calling
anatofuz
parents:
diff changeset
235 ``__xray_log_init_mode("xray-fdr", <configuration string>)`` once it has been
anatofuz
parents:
diff changeset
236 selected/installed.
anatofuz
parents:
diff changeset
237
anatofuz
parents:
diff changeset
238 When the buffers are flushed to disk, the result is a binary trace format
anatofuz
parents:
diff changeset
239 described by `XRay FDR format <XRayFDRFormat.html>`_
anatofuz
parents:
diff changeset
240
anatofuz
parents:
diff changeset
241 When FDR mode is on, it will keep writing and recycling memory buffers until
anatofuz
parents:
diff changeset
242 the logging implementation is finalized -- at which point it can be flushed and
anatofuz
parents:
diff changeset
243 re-initialised later. To do this programmatically, we follow the workflow
anatofuz
parents:
diff changeset
244 provided below:
anatofuz
parents:
diff changeset
245
anatofuz
parents:
diff changeset
246 .. code-block:: c++
anatofuz
parents:
diff changeset
247
anatofuz
parents:
diff changeset
248 // Patch the sleds, if we haven't yet.
anatofuz
parents:
diff changeset
249 auto patch_status = __xray_patch();
anatofuz
parents:
diff changeset
250
anatofuz
parents:
diff changeset
251 // Maybe handle the patch_status errors.
anatofuz
parents:
diff changeset
252
anatofuz
parents:
diff changeset
253 // When we want to flush the log, we need to finalize it first, to give
anatofuz
parents:
diff changeset
254 // threads a chance to return buffers to the queue.
anatofuz
parents:
diff changeset
255 auto finalize_status = __xray_log_finalize();
anatofuz
parents:
diff changeset
256 if (finalize_status != XRAY_LOG_FINALIZED) {
anatofuz
parents:
diff changeset
257 // maybe retry, or bail out.
anatofuz
parents:
diff changeset
258 }
anatofuz
parents:
diff changeset
259
anatofuz
parents:
diff changeset
260 // At this point, we are sure that the log is finalized, so we may try
anatofuz
parents:
diff changeset
261 // flushing the log.
anatofuz
parents:
diff changeset
262 auto flush_status = __xray_log_flushLog();
anatofuz
parents:
diff changeset
263 if (flush_status != XRAY_LOG_FLUSHED) {
anatofuz
parents:
diff changeset
264 // maybe retry, or bail out.
anatofuz
parents:
diff changeset
265 }
anatofuz
parents:
diff changeset
266
anatofuz
parents:
diff changeset
267 The default settings for the FDR mode implementation will create logs named
anatofuz
parents:
diff changeset
268 similarly to the basic log implementation, but will have a different log
anatofuz
parents:
diff changeset
269 format. All the trace analysis tools (and the trace reading library) will
anatofuz
parents:
diff changeset
270 support all versions of the FDR mode format as we add more functionality and
anatofuz
parents:
diff changeset
271 record types in the future.
anatofuz
parents:
diff changeset
272
anatofuz
parents:
diff changeset
273 **NOTE:** We do not promise perpetual support for when we update the log
anatofuz
parents:
diff changeset
274 versions we support going forward. Deprecation of the formats will be
anatofuz
parents:
diff changeset
275 announced and discussed on the developers mailing list.
anatofuz
parents:
diff changeset
276
anatofuz
parents:
diff changeset
277 Trace Analysis Tools
anatofuz
parents:
diff changeset
278 --------------------
anatofuz
parents:
diff changeset
279
anatofuz
parents:
diff changeset
280 We currently have the beginnings of a trace analysis tool in LLVM, which can be
anatofuz
parents:
diff changeset
281 found in the ``tools/llvm-xray`` directory. The ``llvm-xray`` tool currently
anatofuz
parents:
diff changeset
282 supports the following subcommands:
anatofuz
parents:
diff changeset
283
anatofuz
parents:
diff changeset
284 - ``extract``: Extract the instrumentation map from a binary, and return it as
anatofuz
parents:
diff changeset
285 YAML.
anatofuz
parents:
diff changeset
286 - ``account``: Performs basic function call accounting statistics with various
anatofuz
parents:
diff changeset
287 options for sorting, and output formats (supports CSV, YAML, and
anatofuz
parents:
diff changeset
288 console-friendly TEXT).
anatofuz
parents:
diff changeset
289 - ``convert``: Converts an XRay log file from one format to another. We can
anatofuz
parents:
diff changeset
290 convert from binary XRay traces (both basic and FDR mode) to YAML,
anatofuz
parents:
diff changeset
291 `flame-graph <https://github.com/brendangregg/FlameGraph>`_ friendly text
anatofuz
parents:
diff changeset
292 formats, as well as `Chrome Trace Viewer (catapult)
anatofuz
parents:
diff changeset
293 <https://github.com/catapult-project/catapult>` formats.
anatofuz
parents:
diff changeset
294 - ``graph``: Generates a DOT graph of the function call relationships between
anatofuz
parents:
diff changeset
295 functions found in an XRay trace.
anatofuz
parents:
diff changeset
296 - ``stack``: Reconstructs function call stacks from a timeline of function
anatofuz
parents:
diff changeset
297 calls in an XRay trace.
anatofuz
parents:
diff changeset
298
anatofuz
parents:
diff changeset
299 These subcommands use various library components found as part of the XRay
anatofuz
parents:
diff changeset
300 libraries, distributed with the LLVM distribution. These are:
anatofuz
parents:
diff changeset
301
anatofuz
parents:
diff changeset
302 - ``llvm/XRay/Trace.h`` : A trace reading library for conveniently loading
anatofuz
parents:
diff changeset
303 an XRay trace of supported forms, into a convenient in-memory representation.
anatofuz
parents:
diff changeset
304 All the analysis tools that deal with traces use this implementation.
anatofuz
parents:
diff changeset
305 - ``llvm/XRay/Graph.h`` : A semi-generic graph type used by the graph
anatofuz
parents:
diff changeset
306 subcommand to conveniently represent a function call graph with statistics
anatofuz
parents:
diff changeset
307 associated with edges and vertices.
anatofuz
parents:
diff changeset
308 - ``llvm/XRay/InstrumentationMap.h``: A convenient tool for analyzing the
anatofuz
parents:
diff changeset
309 instrumentation map in XRay-instrumented object files and binaries. The
anatofuz
parents:
diff changeset
310 ``extract`` and ``stack`` subcommands uses this particular library.
anatofuz
parents:
diff changeset
311
anatofuz
parents:
diff changeset
312 Future Work
anatofuz
parents:
diff changeset
313 ===========
anatofuz
parents:
diff changeset
314
anatofuz
parents:
diff changeset
315 There are a number of ongoing efforts for expanding the toolset building around
anatofuz
parents:
diff changeset
316 the XRay instrumentation system.
anatofuz
parents:
diff changeset
317
anatofuz
parents:
diff changeset
318 Trace Analysis Tools
anatofuz
parents:
diff changeset
319 --------------------
anatofuz
parents:
diff changeset
320
anatofuz
parents:
diff changeset
321 - Work is in progress to integrate with or develop tools to visualize findings
anatofuz
parents:
diff changeset
322 from an XRay trace. Particularly, the ``stack`` tool is being expanded to
anatofuz
parents:
diff changeset
323 output formats that allow graphing and exploring the duration of time in each
anatofuz
parents:
diff changeset
324 call stack.
anatofuz
parents:
diff changeset
325 - With a large instrumented binary, the size of generated XRay traces can
anatofuz
parents:
diff changeset
326 quickly become unwieldy. We are working on integrating pruning techniques and
anatofuz
parents:
diff changeset
327 heuristics for the analysis tools to sift through the traces and surface only
anatofuz
parents:
diff changeset
328 relevant information.
anatofuz
parents:
diff changeset
329
anatofuz
parents:
diff changeset
330 More Platforms
anatofuz
parents:
diff changeset
331 --------------
anatofuz
parents:
diff changeset
332
anatofuz
parents:
diff changeset
333 We're looking forward to contributions to port XRay to more architectures and
anatofuz
parents:
diff changeset
334 operating systems.
anatofuz
parents:
diff changeset
335
anatofuz
parents:
diff changeset
336 .. References...
anatofuz
parents:
diff changeset
337
anatofuz
parents:
diff changeset
338 .. _`XRay whitepaper`: http://research.google.com/pubs/pub45287.html
anatofuz
parents:
diff changeset
339