annotate xml/en/docs/nginx_dtrace_pid_provider.xml @ 698:5182e655d055

DTrace article added
author Sergey Budnevitch <sb@waeme.net>
date Tue, 02 Oct 2012 15:04:30 +0000
parents
children 8205c2fcde2f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
698
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
1 <?xml version="1.0"?>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
2
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
3 <!--
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
4 Copyright (C) Nginx, Inc.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
5 -->
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
6
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
7 <!DOCTYPE article SYSTEM "../../../dtd/article.dtd">
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
8
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
9
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
10 <article name="Debugging nginx with DTrace pid provider"
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
11 link="/en/docs/nginx_dtrace_pid_provider.html"
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
12 lang="en"
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
13 rev="1"
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
14 toc="no">
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
15
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
16 <section>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
17
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
18 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
19 This article assumes the reader has a general knowledge of nginx internals and
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
20 <link id="see_also">DTrace</link>.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
21 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
22
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
23 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
24 Although nginx build with <link doc="debugging_log.xml">--with-debug</link> option
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
25 already provides a lot of information about request processing, it is sometimes desirable
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
26 to trace particular parts of code path more thoroughly and at the same time
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
27 omit the rest of debug output. DTrace pid provider (available on Solaris, OS X) is a useful
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
28 tool to explore userland programs internals, since it doesn't require any code changes and
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
29 it can help with the task. E.g. a simple DTrace script to trace and print nginx
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
30 functions calls may look like:
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
31
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
32 <programlisting>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
33 #pragma D option flowindent
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
34
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
35 pid$target:nginx::entry {
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
36 }
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
37
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
38 pid$target:nginx::return {
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
39 }
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
40 </programlisting>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
41
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
42 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
43
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
44 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
45 DTrace capabilities for function calls tracing provide only a limited amount
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
46 of useful information, though. Real-time inspection of function arguments
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
47 is typically more interesting, but also a bit more complicated. Examples below
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
48 are intended to help the reader become more familiar with DTrace and the
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
49 process of analyzing nginx behavior using DTrace.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
50 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
51
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
52 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
53 One of the common scenarios for using DTrace with nginx is the following:
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
54 attach to the nginx worker to log request lines and request start times.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
55 The corresponding function to attach is
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
56 <literal>ngx_http_process_request</literal>, and the argument in question
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
57 is a pointer to <literal>ngx_http_request_t</literal> structure.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
58 DTrace script for such request logging can be as simple as:
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
59
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
60 <programlisting>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
61
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
62 pid$target::*ngx_http_process_request:entry
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
63 {
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
64 this->request = (ngx_http_request_t *)copyin(arg0, sizeof(ngx_http_request_t));
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
65 this->request_line = stringof(copyin((uintptr_t)this->request->request_line.data,
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
66 this->request->request_line.len));
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
67 printf("request line = %s\n", this->request_line);
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
68 printf("request start sec = %d\n", this->request->start_sec);
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
69 }
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
70
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
71 </programlisting>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
72 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
73
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
74 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
75 It should be noted that in the example above DTrace requires some knowledge about
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
76 <literal>ngx_http_process_request</literal> structure.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
77 Unfortunately while it is possible to use a specific <literal>#include</literal>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
78 directive in the DTrace script and then pass it to a C preprocessor
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
79 (with -C flag), that doesn't really work. Due to a lot of cross dependencies almost
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
80 all nginx header files have to be included. In turn, based on configure script
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
81 settings, nginx headers will include PCRE, OpenSSL and a variety of system header
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
82 files. While in theory all those header files related to a specific nginx build
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
83 might be included in DTrace script preprocessing and compilation, in reality
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
84 DTrace script most probably will fail to compile because of unknown syntax in
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
85 some header files.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
86 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
87
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
88 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
89 The problem above can be solved by including only the relevant and
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
90 necessary structures and types definitions in the DTrace script. DTrace has to know
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
91 sizes of structures, types, and fields offsets. Thus dependencies can be further
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
92 reduced by manually optimizing structure definitions for use with DTrace.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
93 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
94
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
95 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
96 Let's use DTrace script example above and see what structure definitions it needs
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
97 to work properly.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
98 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
99
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
100 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
101 First of all <literal>objs/ngx_auto_config.h</literal> file generated by configure
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
102 should be included, because it defines a number of constants affecting various
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
103 <literal>#ifdef's</literal>. After that there's some basic types and definitions
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
104 like <literal>ngx_str_t</literal>, <literal>ngx_table_elt_t</literal>,
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
105 <literal>ngx_uint_t</literal> etc. should be put at the beginning of DTrace script.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
106 These definitions are compact, commonly used and unlikely to be frequently changed.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
107 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
108
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
109 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
110 Then there's the <literal>ngx_http_process_request_t</literal> structure which
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
111 contains a lot of pointers to other structures. Because these pointers are
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
112 really irrelevant to this script, and because they have the same size,
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
113 it is possible to just replace them with void pointers. Instead of changing
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
114 definitions, it is better to add appropriate typedefs, though:
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
115
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
116 <programlisting>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
117 typedef ngx_http_upstream_t void;
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
118 typedef ngx_http_request_body_t void;
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
119 </programlisting>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
120
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
121 Last but not least it is necessary to add definitions of two member structures:
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
122 <literal>ngx_http_headers_in_t</literal> and
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
123 <literal>ngx_http_headers_out_t</literal>, callback functions
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
124 declarations and constants definitions.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
125 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
126
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
127 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
128 Final DTrace script can be downloaded
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
129 <link url="http://nginx.org/download/trace_process_request.d">here</link>.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
130 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
131
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
132 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
133 The example below shows the output of the DTrace script:
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
134
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
135 <programlisting>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
136 # dtrace -C -I ./objs -s trace_process_request.d -p 4848
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
137 dtrace: script 'trace_process_request.d' matched 1 probe
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
138 CPU ID FUNCTION:NAME
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
139 1 4 .XAbmO.ngx_http_process_request:entry request line = GET / HTTP/1.1
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
140 request start sec = 1349162898
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
141
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
142 0 4 .XAbmO.ngx_http_process_request:entry request line = GET /en/docs/nginx_dtrace_pid_provider.html HTTP/1.1
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
143 request start sec = 1349162899
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
144 </programlisting>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
145
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
146 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
147
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
148 <para>Using similar techniques the reader should be able to trace other
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
149 nginx functions calls.
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
150 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
151
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
152 </section>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
153
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
154 <section id="see_also"
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
155 name="See also">
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
156
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
157 <para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
158 <list type="bullet">
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
159
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
160 <listitem>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
161 <link url="http://docs.oracle.com/cd/E19253-01/817-6223/index.html">
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
162 Solaris Dynamic Tracing Guide</link>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
163 </listitem>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
164
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
165 <listitem>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
166 <link url="http://dtrace.org/blogs/brendan/2011/02/09/dtrace-pid-provider/">
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
167 Introduction article on DTrace pid provider</link>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
168 </listitem>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
169
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
170 </list>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
171 </para>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
172
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
173 </section>
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
174
5182e655d055 DTrace article added
Sergey Budnevitch <sb@waeme.net>
parents:
diff changeset
175 </article>