From ab8febfe84d8340c01651a3e67b77548202ccce3 Mon Sep 17 00:00:00 2001 From: wcohen Date: Wed, 24 Mar 2010 19:56:54 +0000 Subject: [PATCH] Clean out old version of tutorial. --- tutorial/contents.png | Bin 278 -> 0 bytes tutorial/footnode.html | 180 --------------------------------------- tutorial/img1.png | Bin 3031 -> 0 bytes tutorial/img10.png | Bin 11650 -> 0 bytes tutorial/img11.png | Bin 15210 -> 0 bytes tutorial/img12.png | Bin 13373 -> 0 bytes tutorial/img13.png | Bin 135 -> 0 bytes tutorial/img2.png | Bin 12671 -> 0 bytes tutorial/img3.png | Bin 16557 -> 0 bytes tutorial/img4.png | Bin 8388 -> 0 bytes tutorial/img5.png | Bin 12422 -> 0 bytes tutorial/img6.png | Bin 9348 -> 0 bytes tutorial/img7.png | Bin 282 -> 0 bytes tutorial/img8.png | Bin 221 -> 0 bytes tutorial/img9.png | Bin 11619 -> 0 bytes tutorial/index.html | 142 ------------------------------- tutorial/next.png | Bin 245 -> 0 bytes tutorial/next_g.png | Bin 272 -> 0 bytes tutorial/node1.html | 130 ---------------------------- tutorial/node10.html | 97 --------------------- tutorial/node11.html | 178 -------------------------------------- tutorial/node12.html | 150 -------------------------------- tutorial/node13.html | 156 ---------------------------------- tutorial/node14.html | 80 ----------------- tutorial/node15.html | 88 ------------------- tutorial/node16.html | 160 ---------------------------------- tutorial/node17.html | 142 ------------------------------- tutorial/node18.html | 157 ---------------------------------- tutorial/node19.html | 92 -------------------- tutorial/node2.html | 151 --------------------------------- tutorial/node20.html | 88 ------------------- tutorial/node21.html | 101 ---------------------- tutorial/node22.html | 62 -------------- tutorial/node23.html | 88 ------------------- tutorial/node24.html | 86 ------------------- tutorial/node25.html | 97 --------------------- tutorial/node26.html | 96 --------------------- tutorial/node27.html | 148 -------------------------------- tutorial/node28.html | 128 ---------------------------- tutorial/node29.html | 66 -------------- tutorial/node3.html | 87 ------------------- tutorial/node30.html | 70 --------------- tutorial/node4.html | 149 -------------------------------- tutorial/node5.html | 168 ------------------------------------ tutorial/node6.html | 76 ----------------- tutorial/node7.html | 93 -------------------- tutorial/node8.html | 184 ---------------------------------------- tutorial/node9.html | 125 --------------------------- tutorial/prev.png | Bin 279 -> 0 bytes tutorial/prev_g.png | Bin 327 -> 0 bytes tutorial/systemtap.css | 30 ------- tutorial/systemtap.html | 142 ------------------------------- tutorial/up.png | Bin 211 -> 0 bytes tutorial/up_g.png | Bin 231 -> 0 bytes 54 files changed, 3987 deletions(-) delete mode 100644 tutorial/contents.png delete mode 100644 tutorial/footnode.html delete mode 100644 tutorial/img1.png delete mode 100644 tutorial/img10.png delete mode 100644 tutorial/img11.png delete mode 100644 tutorial/img12.png delete mode 100644 tutorial/img13.png delete mode 100644 tutorial/img2.png delete mode 100644 tutorial/img3.png delete mode 100644 tutorial/img4.png delete mode 100644 tutorial/img5.png delete mode 100644 tutorial/img6.png delete mode 100644 tutorial/img7.png delete mode 100644 tutorial/img8.png delete mode 100644 tutorial/img9.png delete mode 100644 tutorial/index.html delete mode 100644 tutorial/next.png delete mode 100644 tutorial/next_g.png delete mode 100644 tutorial/node1.html delete mode 100644 tutorial/node10.html delete mode 100644 tutorial/node11.html delete mode 100644 tutorial/node12.html delete mode 100644 tutorial/node13.html delete mode 100644 tutorial/node14.html delete mode 100644 tutorial/node15.html delete mode 100644 tutorial/node16.html delete mode 100644 tutorial/node17.html delete mode 100644 tutorial/node18.html delete mode 100644 tutorial/node19.html delete mode 100644 tutorial/node2.html delete mode 100644 tutorial/node20.html delete mode 100644 tutorial/node21.html delete mode 100644 tutorial/node22.html delete mode 100644 tutorial/node23.html delete mode 100644 tutorial/node24.html delete mode 100644 tutorial/node25.html delete mode 100644 tutorial/node26.html delete mode 100644 tutorial/node27.html delete mode 100644 tutorial/node28.html delete mode 100644 tutorial/node29.html delete mode 100644 tutorial/node3.html delete mode 100644 tutorial/node30.html delete mode 100644 tutorial/node4.html delete mode 100644 tutorial/node5.html delete mode 100644 tutorial/node6.html delete mode 100644 tutorial/node7.html delete mode 100644 tutorial/node8.html delete mode 100644 tutorial/node9.html delete mode 100644 tutorial/prev.png delete mode 100644 tutorial/prev_g.png delete mode 100644 tutorial/systemtap.css delete mode 100644 tutorial/systemtap.html delete mode 100644 tutorial/up.png delete mode 100644 tutorial/up_g.png diff --git a/tutorial/contents.png b/tutorial/contents.png deleted file mode 100644 index 0c752c66c876acaa2131d43788a7406f5979f746..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 278 zcmV+x0qOpUP)n_8B^;cn$O_g|3BG{!1Fj&^JiWpJWLeA$WK=+#U`gfB`ZJpvc?v;;IiS zWN}RlBW%jSmz3^2R|i?JM0KMv+9z;7ee - - - - -Footnotes - - - - - - - - - - - - - - - - -
-
... rarely1
-
Use -them between consecutive expressions that place unary +,- -or mixed pre/post ++,- in an ambiguous manner. - -
.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-
-
-
... present2
-
We anticipate support for indexing and looping -using foreach shortly. - -
.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-
-
-
... exist3
-
See -http://sources.redhat.com/bugzilla - -
.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-
-
-
... -optional4
-
This is only necessary if the types cannot be -inferred from other sources, such as the call sites. - -
.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-.
-
-
-
- - diff --git a/tutorial/img1.png b/tutorial/img1.png deleted file mode 100644 index 3b5db89766c616a29e381c7775aee6ee5d826c0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3031 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 h;djvz2|qPj{VFqA)MSmBOfP3zbU+9eWKq2 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 diff --git a/tutorial/img13.png b/tutorial/img13.png deleted file mode 100644 index 010fa4b72e1eb4e218b3d0dfd957c445decbaa7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^Vn8g!#LU3J80zy)1IXbF@Ck9Z!Ra_{O=w&fch9bUHx3vIVCg!00&nj6aWAK diff --git a/tutorial/img2.png b/tutorial/img2.png deleted file mode 100644 index 3067e1e68e37b2bbb262bcba34e27766ab79d91e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12671 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 diff --git a/tutorial/img5.png b/tutorial/img5.png deleted file mode 100644 index a95067afee222e41543fcc4aa447d2da5e0d9775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12422 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 diff --git a/tutorial/img6.png b/tutorial/img6.png deleted file mode 100644 index dda598d94a35dbe4cb93137b197f92196e3b33c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9348 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 D3NRMy diff --git a/tutorial/img7.png b/tutorial/img7.png deleted file mode 100644 index 41a7d6b80bc5a5e26c15a376f328687a463a6a49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 282 zcmV+#0p^k2?;-AP_`{SpHzDNGV+A2z1F=T=@t&3WrE~_j|dpyBG^B#mZ}#dFw?O zU>rc82zFvy(R*O*A09&t7@mHg8{RVp+XZZ_8d6pq3HkdVx$ghbOnSCUGjXAxg gTB4UY@h8wvzD#sS_0)afK>z>%07*qoM6N<$f_I8=*Z=?k diff --git a/tutorial/img8.png b/tutorial/img8.png deleted file mode 100644 index 435579331b7698fec2e61683966dcf738ceab13e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^B0wy}!py+Hc<<-stw4@SfKQ0)=FOW|tXMH&!i1KV zmYkfNkdP1?8yf=y0~Hk&2?+@v9v+}Vqq5#mAjMb`Ce|x~`^K<}wTn!johQL!)>f Q1FdB6boFyt=akR{0P3?oG5`Po diff --git a/tutorial/img9.png b/tutorial/img9.png deleted file mode 100644 index e6dbbb0f0a2d25a4fead41b333ac402d392e8944..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11619 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 - - - - -systemtap - - - - - - - - - - - - - - - -
-next -up -previous - -contents -
- Next: Contents -   Contents -
-
- - -

-

-Systemtap tutorial - -
- -

- - -
-Frank Ch. Eigler <fche@redhat.com> -
-

-February 4, 2007 -

- -

-


- - - - - -

- - - diff --git a/tutorial/next.png b/tutorial/next.png deleted file mode 100644 index 1628652aac7cff4b24228abd9908c320c6026a7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245 zcmVQ2aP`rsfsL)H8>rF50IrEKQ7U2mrM!9=R9*Dw1X+@W9RTx^a-#5T6$bi^4|h!q3s vo9V3RdqZP$JTTh9!JZ)`voZLAB<&|;0_>J~#QNZkD16SAR=O4@7anKqmC5&ngT;#rH1+qK z20S~FlZynq-MY=T{~%>KNs884sExd44P^%bf!zNDPxW#x21^f><@$FgzM-=J5cLN5 WGDyh~oC>l40000 - - - - -Contents - - - - - - - - - - - - - - - - - - - -next - -up - -previous -
- Next: Introduction - Up: systemtap - Previous: systemtap -
-
- -
- -

-Contents -

- - - - -

-


- - - diff --git a/tutorial/node10.html b/tutorial/node10.html deleted file mode 100644 index 0bf24860..00000000 --- a/tutorial/node10.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - -Functions - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Arrays - Up: Analysis - Previous: Target variables -   Contents -
-
- - -

-Functions -

- -

-Functions are conveniently packaged reusable software: it would be a -shame to have to duplicate a complex condition expression or logging -directive in every placed it's used. So, systemtap lets you define -functions of your own. Like global variables, systemtap functions may -be defined anywhere in the script. They may take any number of string -or numeric arguments (by value), and may return a single string or -number. The parameter types are inferred as for ordinary variables, -and must be consistent throughout the program. Local and global -script variables are available, but target variables are not. -That's because there is no specific debugging-level context associated -with a function. - -

-A function is defined with the keyword function followed by a -name. Then comes a comma-separated formal argument list (just a list -of variable names). The { }-enclosed body consists of any list -of statements, including expressions that call functions. Recursion -is possible, up to a nesting depth limit. Figure 6 -displays function syntax. - -

- -

- - - -
Figure 6: -Some functions of dubious utility.
\begin{center}\begin{Sbox}\begin{minipage}{4.5in}
-\begin{verbatim}...
-
- -

-


- - - diff --git a/tutorial/node11.html b/tutorial/node11.html deleted file mode 100644 index 02bac698..00000000 --- a/tutorial/node11.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - -Arrays - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Aggregates - Up: Analysis - Previous: Functions -   Contents -
-
- - -

-Arrays -

- -

-Often, probes will want to share data that cannot be represented as a -simple scalar value. Much data is naturally tabular in nature, -indexed by some tuple of thread numbers, processor ids, names, time, -and so on. Systemtap offers associative arrays for this purpose. -These arrays are implemented as hash tables with a maximum size that -is fixed at startup. Because they are too large to be created -dynamically for inidividual probes handler runs, they must be declared -as global. - -

- - - - - - - -
global adeclare global scalar or array variable
global b[400]declare array, reserving space for up to 400 tuples
- -

-The basic operations for arrays are setting and looking up elements. -These are expressed in awk syntax: the array name followed by -an opening [ bracket, a comma-separated list of index -expressions, and a closing ] bracket. Each index expression -may be string or numeric, as long as it is consistently typed -throughout the script. - -

- - - - - - - - - - - - - -
foo [4,"hello"] ++ increment the named array slot
processusage [uid(),execname()] ++update a statistic
times [tid()] = get_cycles()set a timestamp reference point
delta = get_cycles() - times [tid()]compute a timestamp delta
- -

-Array elements that have not been set may be fetched, and return -a dummy null value (zero or an empty string) as appropriate. However, -assigning a null value does not delete the element: an explicit -delete statement is required. Systemtap provides syntactic sugar -for these operations, in the form of explicit membership testing and -deletion. - -

- - - - - - - - - - -
if ([4,"hello"] in foo) { }membership test
delete times[tid()]deletion of a single element
delete timesdeletion of all elements
- -

-One final and important operation is iteration over arrays. This uses -the keyword foreach. Like awk, this creates a loop that -iterates over key tuples of an array, not just values. In -addition, the iteration may be sorted by any single key or the -value by adding an extra + or - code. - -

-The break and continue statements work inside -foreach loops, too. Since arrays can be large but probe -handlers must not run for long, it is a good idea to exit iteration -early if possible. The limit option in the foreach -expression is one way. For simplicity, systemtap forbids any modification of an array while it is being iterated using a -foreach. - -

- - - - - - - - - - -
foreach ([a,b] in foo) { fuss_with(foo[a,b]) }simple loop in arbitrary sequence
foreach ([a,b] in foo+ limit 5) { }loop in increasing sequence of value, stop after 5
foreach ([a-,b] in foo) { }loop in decreasing sequence of first key
- -

-


- - -next - -up - -previous - -contents -
- Next: Aggregates - Up: Analysis - Previous: Functions -   Contents - - - - diff --git a/tutorial/node12.html b/tutorial/node12.html deleted file mode 100644 index 9a8597ea..00000000 --- a/tutorial/node12.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - -Aggregates - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Safety - Up: Analysis - Previous: Arrays -   Contents -
-
- - -

-Aggregates -

- -

-When we said above that values can only be strings or numbers, we lied -a little. There is a third type: statistics aggregates, or aggregates -for short. Instances of this type are used to collect statistics on -numerical values, where it is important to accumulate new data quickly -(without exclusive locks) and in large volume (storing only -aggregated stream statistics). This type only makes sense for global -variables, and may be stored individually or as elements of an array. - -

-To add a value to a statistics aggregate, systemtap uses the special -operator <<<. Think of it like C++'s << output -streamer: the left hand side object accumulates the data sample given -on the right hand side. This operation is efficient (taking a shared -lock) because the aggregate values are kept separately on each -processor, and are only aggregated across processors on request. - -

-

-a <<< delta_timestamp
-writes[execname()] <<< count
-
- -

-To read the aggregate value, special functions are available to -extract a selected statistical function. The aggregate value -cannot be read by simply naming it as if it were an ordinary -variable. These operations take an exclusive lock on the respective -globals, and should therefore be relatively rare. The simple ones -are: @min, @max, @count, @avg, and -@sum, and evaluate to a single number. In addition, histograms -of the data stream may be extracted using the @hist_log and -@hist_linear. These evaluate to a special sort of array that -may at present2 only be printed. - -

- - - - - - - - - - - - - - - - -
@avg(a)the average of all the values accumulated - into a
print(@hist_linear(a,0,100,10))print an ``ascii art'' linear - histogram of the same data stream,
 bounds $0 \ldots 100$, bucket width is $10$
@count(writes["zsh"])the number of times ``zsh'' - ran the probe handler
print(@hist_log(writes["zsh"]))print an ``ascii art'' logarithmic - histogram of the same data stream
- -

-


- - -next - -up - -previous - -contents -
- Next: Safety - Up: Analysis - Previous: Arrays -   Contents - - - - diff --git a/tutorial/node13.html b/tutorial/node13.html deleted file mode 100644 index d4390cf7..00000000 --- a/tutorial/node13.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - -Safety - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Exercises - Up: Analysis - Previous: Aggregates -   Contents -
-
- - -

- -
-Safety -

- -

-The full expressivity of the scripting language raises good questions -of safety. Here is a set of Q&A: - -

-

-
-
What about infinite loops? recursion? A probe handler is -bounded in time. The C code generated by systemtap includes explicit -checks that limit the total number of statements executed to a small -number. A similar limit is imposed on the nesting depth of function -calls. When either limit is exceeded, that probe handler cleanly -aborts and signals an error. The systemtap session is normally -configured to abort as a whole at that time. - -

-

-
-
What about running out of memory? No dynamic memory -allocation whatsoever takes place during the execution of probe -handlers. Arrays, function contexts, and buffers are allocated during -initialization. These resources may run out during a session, and -generally result in errors. - -

-

-
-
What about locking? If multiple probes seek conflicting -locks on the same global variables, one or more of them will time out, -and be aborted. Such events are tallied as ``skipped'' probes, and a -count is displayed at session end. A configurable number of skipped -probes can trigger an abort of the session. - -

-

-
-
What about null pointers? division by zero? The C code -generated by systemtap translates potentially dangerous operations to -routines that check their arguments at run time. These signal errors -if they are invalid. Many arithmetic and string operations silently -overflow if the results exceed representation limits. - -

-

-
-
What about bugs in the translator? compiler? While bugs -in the translator, or the runtime layer certainly exist3, our test suite gives some -assurance. Plus, the entire generated C code may be inspected (try -the -p3 option). Compiler bugs are unlikely to be of any -greater concern for systemtap than for the kernel as a whole. In -other words, if it was reliable enough to build the kernel, it will -build the systemtap modules properly too. - -

-

-
-
Is that the whole truth? In practice, there are several -weak points in systemtap and the underlying kprobes system at the time -of writing. Putting probes indiscriminately into unusually sensitive -parts of the kernel (low level context switching, interrupt -dispatching) has reportedly caused crashes in the past. We are -fixing these bugs as they are found, and -constructing a probe point ``blacklist'', but it is not complete. - -

-

-
- -

-


- - -next - -up - -previous - -contents -
- Next: Exercises - Up: Analysis - Previous: Aggregates -   Contents - - - - diff --git a/tutorial/node14.html b/tutorial/node14.html deleted file mode 100644 index b629087b..00000000 --- a/tutorial/node14.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - -Exercises - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Tapsets - Up: Analysis - Previous: Safety -   Contents -
-
- - -

-Exercises -

- -
    -
  1. Alter the last probe in timer-jiffies.stp to reset the -counters and continue reporting instead of exiting. - -

    -

  2. -
  3. Write a script that, every ten seconds, displays the top five -most frequent users of open system call during that interval. - -

    -

  4. -
  5. Write a script that experimentally measures the speed of the -get_cycles() counter on each processor. - -

    -

  6. -
  7. Use any suitable probe point to get an approximate profile of -process CPU usage: which processes/users use how much of each CPU. -
  8. -
-

- - - diff --git a/tutorial/node15.html b/tutorial/node15.html deleted file mode 100644 index a6b19c4e..00000000 --- a/tutorial/node15.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - -Tapsets - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Automatic selection - Up: systemtap - Previous: Exercises -   Contents -
-
- - -

-Tapsets -

- -

-After writing enough analysis scripts for yourself, your may become -known as an expert to your colleagues, who will want to use your -scripts. Systemtap makes it possible to share in a controlled manner; -to build libraries of scripts that build on each other. In fact, all -of the functions (pid(), etc.) used in the scripts above come -from tapset scripts like that. A ``tapset'' is just a script that -designed for reuse by installation into a special directory. - -

-


- -Subsections - - - -

- - - diff --git a/tutorial/node16.html b/tutorial/node16.html deleted file mode 100644 index c453e96f..00000000 --- a/tutorial/node16.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - -Automatic selection - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Probe point aliases - Up: Tapsets - Previous: Tapsets -   Contents -
-
- - -

-Automatic selection -

- -

-Systemtap attempts to resolve references to global symbols (probes, -functions, variables) that are not defined within the script by a -systematic search through the tapset library for scripts that define -those symbols. Tapset scripts are installed under the default -directory named /usr/share/systemtap/tapset. A user may give -additional directories with the -I DIR option. Systemtap -searches these directories for script (.stp) files. - -

-The search process includes subdirectories that are specialized for a -particular kernel version and/or architecture, and ones that name only -larger kernel families. Naturally, the search is ordered from -specific to general, as shown in Figure 7. - -

- -

- - - -
Figure 7: -Listing the tapset search path.
\begin{center}\begin{Sbox}\begin{minipage}{6in}
-\begin{verbatim}...
-
- -

-When a script file is found that defines one of the undefined -symbols, that entire file is added to the probing session being -analyzed. This search is repeated until no more references can become -satisfied. Systemtap signals an error if any are still unresolved. - -

-This mechanism enables several programming idioms. First, it allows -some global symbols to be defined only for applicable kernel -version/architecture pairs, and cause an error if their use is -attempted on an inapplicable host. Similarly, the same symbol can be -defined differently depending on kernels, in much the same way that -different kernel include/asm/ARCH/ files contain macros that -provide a porting layer. - -

-Another use is to separate the default parameters of a tapset routine -from its implementation. For example, consider a tapset that defines -code for relating elapsed time intervals to process scheduling -activities. The data collection code can be generic with respect to -which time unit (jiffies, wall-clock seconds, cycle counts) it can -use. It should have a default, but should not require additional -run-time checks to let a user choose another. -Figure 8 shows a way. - -

- -

- - - -
Figure 8: -Providing an overrideable default.
\begin{center}\begin{Sbox}\begin{minipage}{6in}
-\begin{verbatim}...
-
- -

-A tapset that exports only data may be as useful as ones that -exports functions or probe point aliases (see below). Such global -data can be computed and kept up-to-date using probes internal to the -tapset. Any outside reference to the global variable would -incidentally activate all the required probes. - -

-


- - -next - -up - -previous - -contents -
- Next: Probe point aliases - Up: Tapsets - Previous: Tapsets -   Contents - - - - diff --git a/tutorial/node17.html b/tutorial/node17.html deleted file mode 100644 index 0b9ac736..00000000 --- a/tutorial/node17.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - -Probe point aliases - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Embedded C - Up: Tapsets - Previous: Automatic selection -   Contents -
-
- - -

-Probe point aliases -

- -

-Probe point aliases allow creation of -new probe points from existing ones. This is useful if the new probe -points are named to provide a higher level of abstraction. For -example, the system-calls tapset defines probe point aliases of the -form syscall.open etc., in terms of lower level ones like -kernel.function("sys_open"). Even if some future kernel -renames sys_open, the aliased name can remain valid. - -

-A probe point alias definition looks like a normal probe. Both start -with the keyword probe and have a probe handler statement block -at the end. But where a normal probe just lists its probe points, an -alias creates a new name using the assignment (=) operator. -Another probe that names the new probe point will create an actual -probe, with the handler of the alias prepended. - -

-This prepending behavior serves several purposes. It allows the alias -definition to ``preprocess'' the context of the probe before passing -control to the user-specified handler. This has several possible uses: - - - - - - - - - - - - - -
if ($flag1 != $flag2) nextskip probe unless given condition is met
name = "foo"supply probe-describing values
var = $varextract target variable to plain local variable
 
- -

-Figure 9 demonstrates a probe point alias -definition as well as its use. It demonstrates how a single probe -point alias can expand to multiple probe points, even to other -aliases. It also includes probe point wildcarding. These functions -are designed to compose sensibly. - -

- -

- - - -
Figure 9: -Classified system call activity.
\begin{center}\begin{Sbox}\begin{minipage}{4.5in}
-\begin{verbatim}...
-
- -

-


- - -next - -up - -previous - -contents -
- Next: Embedded C - Up: Tapsets - Previous: Automatic selection -   Contents - - - - diff --git a/tutorial/node18.html b/tutorial/node18.html deleted file mode 100644 index 5a9b47f5..00000000 --- a/tutorial/node18.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - -Embedded C - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Naming conventions - Up: Tapsets - Previous: Probe point aliases -   Contents -
-
- - -

- -
-Embedded C -

- -

-Sometimes, a tapset needs provide data values from the kernel that -cannot be extracted using ordinary target variables ($var). This may be because the values are in complicated data structures, may -require lock awareness, or are defined by layers of macros. Systemtap -provides an ``escape hatch'' to go beyond what the language can safely -offer. In certain contexts, you may embed plain raw C in tapsets, -exchanging power for the safety guarantees listed in -section 3.6. End-user scripts may not include -embedded C code, unless systemtap is run with the -g (``guru'' -mode) option. Tapset scripts get guru mode privileges automatically. - -

-Embedded C can be the body of a script function. Instead enclosing -the function body statements in { and }, use %{ -and %}. Any enclosed C code is literally transcribed into the -kernel module: it is up to you to make it safe and correct. In order -to take parameters and return a value, a pointer macro THIS is -available. Function parameters and a place for the return value are -available as fields of that pointer. The familiar data-gathering -functions pid(), execname(), and their neighbours are -all embedded C functions. Figure 10 contains -another example. - -

-Since systemtap cannot examine the C code to infer these types, an -optional4 annotation -syntax is available to assist the type inference process. Simply -suffix parameter names and/or the function name with :string or -:long to designate the string or numeric type. In addition, -the script may include a %{ %} block at the outermost -level of the script, in order to transcribe declarative code like -#include <linux/foo.h>. These enable the embedded C functions -to refer to general kernel types. - -

-There are a number of safety-related constraints that should be -observed by developers of embedded C code. - -

    -
  1. Do not dereference pointers that are not known or testable valid. -
  2. -
  3. Do not call any kernel routine that may cause a sleep or fault. -
  4. -
  5. Consider possible undesirable recursion, where your embedded C -function calls a routine that may be the subject of a probe. If that -probe handler calls your embedded C function, you may suffer infinite -regress. Similar problems may arise with respect to non-reentrant -locks. -
  6. -
  7. If locking of a data structure is necessary, use a -trylock type call to attempt to take the lock. If that fails, -give up, do not block. -
  8. -
- -

- -

- - - -
Figure 10: -Embedded C function.
\begin{center}\begin{Sbox}\begin{minipage}{4.5in}
-\begin{verbatim}...
-
- -

-


- - -next - -up - -previous - -contents -
- Next: Naming conventions - Up: Tapsets - Previous: Probe point aliases -   Contents - - - - diff --git a/tutorial/node19.html b/tutorial/node19.html deleted file mode 100644 index f3f46519..00000000 --- a/tutorial/node19.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - -Naming conventions - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Exercises - Up: Tapsets - Previous: Embedded C -   Contents -
-
- - -

-Naming conventions -

- -

-Using the tapset search mechanism just described, potentially many -script files can become selected for inclusion in a single session. -This raises the problem of name collisions, where different tapsets -accidentally use the same names for functions/globals. This can -result in errors at translate or run time. - -

-To control this problem, systemtap tapset developers are advised to -follow naming conventions. Here is some of the guidance. - -

    -
  1. Pick a unique name for your tapset, and substitute it for -TAPSET below. -
  2. -
  3. Separate identifiers meant to be used by tapset users from -those that are internal implementation artifacts. -
  4. -
  5. Document the first set in the appropriate man pages. -
  6. -
  7. Prefix the names of external identifiers with TAPSET_ if -there is any likelihood of collision with other tapsets or end-user -scripts. -
  8. -
  9. Prefix any probe point aliases with an appropriate prefix. -
  10. -
  11. Prefix the names of internal identifiers with __TAPSET_. -
  12. -
- -

-


- - - diff --git a/tutorial/node2.html b/tutorial/node2.html deleted file mode 100644 index 3fb7a070..00000000 --- a/tutorial/node2.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - -Introduction - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Tracing - Up: systemtap - Previous: Contents -   Contents -
-
- - -

-Introduction -

- -

-Systemtap is a tool that allows developers and administrators to write -and reuse simple scripts to deeply examine the activities of a live -Linux system. Data may be extracted, filtered, and summarized quickly -and safely, to enable diagnoses of complex performance or functional -problems. - -

- -

-The essential idea behind a systemtap script is to name events, -and to give them handlers. Whenever a specified event occurs, -the Linux kernel runs the handler as if it were a quick subroutine, -then resumes. There are several kind of events, such as entering or -exiting a function, a timer expiring, or the entire systemtap session -starting or stopping. A handler is a series of script language -statements that specify the work to be done whenever the event occurs. -This work normally includes extracting data from the event context, -storing them into internal variables, or printing results. - -

- -

-Systemtap works by translating the script to C, running the system C -compiler to create a kernel module from that. When the module is -loaded, it activates all the probed events by hooking into the kernel. -Then, as events occur on any processor, the compiled handlers run. -Eventually, the session stops, the hooks are disconnected, and the -module removed. This entire process is driven from a single -command-line program, stap. - -

- -

- - - -
Figure 1: -A systemtap smoke test.
\begin{center}\begin{Sbox}\begin{minipage}{4.5in}
-\begin{verbatim}...
-
- -

-This paper assumes that you have installed systemtap and its -prerequisite kernel development tools and debugging data, so that you -can run the scripts such as the simple one in -Figure 1. Log on as root, or even better, -as a user authorized to sudo, before running systemtap. - -

- -

- - - -
Figure 2: -A taste of systemtap: a system-wide strace, just for -the open system call.
\begin{center}\begin{Sbox}\begin{minipage}{4.5in}
-\begin{verbatim}...
-
- -
- - -next - -up - -previous - -contents -
- Next: Tracing - Up: systemtap - Previous: Contents -   Contents - - - - diff --git a/tutorial/node20.html b/tutorial/node20.html deleted file mode 100644 index 13014819..00000000 --- a/tutorial/node20.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - -Exercises - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Further information - Up: Tapsets - Previous: Naming conventions -   Contents -
-
- - -

-Exercises -

- -

- -

    -
  1. Write a tapset that implements deferred and ``cancelable'' -logging. Export a function that enqueues a text string (into some -private array), returning an id token. Include a timer-based probe -that periodically flushes the array to the standard log output. -Export another function that, if the entry was not already flushed, -allows a text string to be cancelled from the queue. - -

    -

  2. -
  3. Create a ``relative timestamp'' tapset with functions return all -the same values as the ones in the timestamp tapset, except that they -are made relative to the start time of the script. - -

    -

  4. -
  5. Create a tapset that exports a global array that contains a -mapping of recently seen process ID numbers to process names. -Intercept key system calls (execve?) to update the list -incrementally. - -

    -

  6. -
  7. Send your tapset ideas to the mailing list! -
  8. -
-

- - - diff --git a/tutorial/node21.html b/tutorial/node21.html deleted file mode 100644 index 3677e751..00000000 --- a/tutorial/node21.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - -Further information - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Glossary - Up: systemtap - Previous: Exercises -   Contents -
-
- - -

-Further information -

- -

-For further information about systemtap, several sources are available. - -

-There are man pages: - -

- - - - - - - - - - - - - -
stapsystemtap program usage, language summary
stapfuncsfunctions provided by tapsets
stapprobesprobes / probe aliases provided by tapsets
stapexsome example scripts
- -

-Then, there is the source code itself. Since systemtap is free -software, you should have available the entire source code. The -source files in the tapset/ directory are also packaged along -with the systemtap binary. Since systemtap reads these files rather -than their documentation, they are the most reliable way to see what's -inside all the tapsets. Use the -v (verbose) command line -option, several times if you like, to show inner workings. - -

-Finally, there is the project web site -(http://sources.redhat.com/systemtap/) with several articles, -an archived public mailing list for users and developers -(systemtap@sources.redhat.com), and a live CVS source -repository. Come join us! - -

- -


- - - diff --git a/tutorial/node22.html b/tutorial/node22.html deleted file mode 100644 index fd0cf4a0..00000000 --- a/tutorial/node22.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - -Glossary - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Errors - Up: systemtap - Previous: Further information -   Contents -
-
- - -

-Glossary -

- -Sorry, not available in HTML. -

- - - diff --git a/tutorial/node23.html b/tutorial/node23.html deleted file mode 100644 index 8f9fcc48..00000000 --- a/tutorial/node23.html +++ /dev/null @@ -1,88 +0,0 @@ - - - - - -Errors - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Parse errors - Up: systemtap - Previous: Glossary -   Contents -
-
- - -

-Errors -

- -

-We explain some common systemtap error messages in this section. Most -error messages include line/character numbers with which one can -locate the precise location of error in the script code. There is -sometimes a subsequent or prior line that elaborates. - -

-error at: filename:line:column: details - -

-


- -Subsections - - - -

- - - diff --git a/tutorial/node24.html b/tutorial/node24.html deleted file mode 100644 index f52f9a1a..00000000 --- a/tutorial/node24.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - -Parse errors - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Type errors - Up: Errors - Previous: Errors -   Contents -
-
- - -

-Parse errors -

- -

-

-
-
parse error: expected foo, saw bar $\ldots$ -
-The script contained a grammar error. A different type of construct -was expected in the given context. - -

-

-
-
parse error: embedded code in unprivileged script -
-The -script contained unsafe constructs such as embedded C (section -4.3), but was run without the -g (guru mode) -option. Confirm that the constructs are used safely, then try -again with -g. -
-
- -

-


- - - diff --git a/tutorial/node25.html b/tutorial/node25.html deleted file mode 100644 index c16bfc48..00000000 --- a/tutorial/node25.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - -Type errors - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Symbol errors - Up: Errors - Previous: Parse errors -   Contents -
-
- - -

-Type errors -

- -

-

-
-
semantic error: type mismatch for identifier 'foo' -$\ldots$ string vs. long -
-In this case, the identifier foo -was previously inferred as a numeric type (``long''), but at the given -point is being used as a string. Similar messages appear if an array -index or function parameter slot is used with conflicting types. - -

-

-
-
semantic error: unresolved type for identifier 'foo' - -
-The identifier foo was used, for example in a print, -but without any operations that could assign it a type. Similar -messages may appear if a symbol is misspelled by a typo. - -

-

-
-
semantic error: Expecting symbol or array index expression - -
-Something other than an assignable lvalue was on the left hand sign -of an assignment. -
-
- -

-


- - - diff --git a/tutorial/node26.html b/tutorial/node26.html deleted file mode 100644 index 1e823311..00000000 --- a/tutorial/node26.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - -Symbol errors - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Probing errors - Up: Errors - Previous: Type errors -   Contents -
-
- - -

-Symbol errors -

- -

-

-
-
while searching for arity N function, semantic error: -unresolved function call -
-The script calls a function with N -arguments that does not exist. The function may exist with different -arity. - -

-

-
-
semantic error: array locals not supported: $\ldots$ -
-An -array operation is present for which no matching global declaration -was found. Similar messages appear if an array is used with -inconsistent arities. - -

-

-
-
semantic error: variable 'foo' modified during 'foreach' -
-The array foo is being modified (being assigned to or deleted from) -within an active foreach loop. This invalid operation is also -detected within a function called from within the loop. -
-
- -

-


- - - diff --git a/tutorial/node27.html b/tutorial/node27.html deleted file mode 100644 index a6a661c6..00000000 --- a/tutorial/node27.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - -Probing errors - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Runtime errors - Up: Errors - Previous: Symbol errors -   Contents -
-
- - -

-Probing errors -

- -

-

-
-
semantic error: probe point mismatch at position N, -while resolving probe point foo -
-A probe point was named that -neither directly understood by systemtap, nor defined as an alias by a -tapset script. The divergence from the ``tree'' of probe point -namespace is at position N (starting with zero at left). - -

-

-
-
semantic error: no match for probe point, while resolving -probe point foo -
-A probe point cannot be resolved for any of -a variety of reasons. It may be a debuginfo-based probe point such as -kernel.function("foobar") where no foobar function was -found. This can occur if the script specifies a wildcard on function -names, or an invalid file name or source line number. - -

-

-
-
semantic error: unresolved target-symbol expression -
-A -target variable was referred to in a probe handler that was not -resolvable. Or, a target variable is not valid at all in a context -such as a script function. This variable may have been elided by an -optimizing compiler, or may not have a suitable type, or there might -just be an annoying bug somewhere. Try again with a slightly -different probe point (use statement() instead of -function()) to search for a more cooperative neighbour in the -same area. - -

-

-
-
semantic error: libdwfl failure $\ldots$ -
-There was a -problem processing the debugging information. It may simply be -missing, or may have some consistency / correctness problems. Later -compilers tend to produce better debugging information, so if you can -upgrade and recompile your kernel/application, it may help. - -

-

-
-
semantic error: cannot find foo debuginfo -
-Similarly, -suitable debugging information was not found. Check that your kernel -build/installation includes a matching version of debugging data. -
-
- -

-


- - -next - -up - -previous - -contents -
- Next: Runtime errors - Up: Errors - Previous: Symbol errors -   Contents - - - - diff --git a/tutorial/node28.html b/tutorial/node28.html deleted file mode 100644 index 29693942..00000000 --- a/tutorial/node28.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - -Runtime errors - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Acknowledgments - Up: Errors - Previous: Probing errors -   Contents -
-
- - -

-Runtime errors -

- -

-

-
-
WARNING: Number of errors: N, skipped probes: M -
-Errors and/or skipped probes occurred during this run. - -

-

-
-
division by 0 -
-The script code performed an invalid -division. - -

-

-
-
aggregate element not found -
-An statistics extractor -function other than @count was invoked on an aggregate that has -not had any values accumulated yet. This is similar to a division by -zero. - -

-

-
-
aggregation overflow -
-An array containing aggregate -values contains too many distinct key tuples at this time. - -

-

-
-
MAXNESTING exceeded -
-Too many levels of function call nesting -were attempted. - -

-

-
-
MAXACTION exceeded -
-The probe handler attempted to execute -too many statements. - -

-

-
-
kernel/user string copy fault at 0xaddr -
-The probe handler attempted to copy a string from kernel or user space -at an invalid address. - -

-

-
-
pointer dereference fault -
-There was a fault encountered during a pointer dereference operation such -as a target variable evaluation. - -

-

-
-

- - - diff --git a/tutorial/node29.html b/tutorial/node29.html deleted file mode 100644 index 4e7be5ad..00000000 --- a/tutorial/node29.html +++ /dev/null @@ -1,66 +0,0 @@ - - - - - -Acknowledgments - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: About this document ... - Up: systemtap - Previous: Runtime errors -   Contents -
-
- - -

-Acknowledgments -

- -

-The author thanks Martin Hunt, Will Cohen, and Jim Keniston for -improvement advice for this paper. - -

-


- - - diff --git a/tutorial/node3.html b/tutorial/node3.html deleted file mode 100644 index 52a5873c..00000000 --- a/tutorial/node3.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - -Tracing - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Where to probe - Up: systemtap - Previous: Introduction -   Contents -
-
- - -

-Tracing -

- -

-The simplest kind of probe is simply to trace an event. - -This is the effect of inserting strategically located print -statements into a program. This is often the first step of problem -solving: explore by seeing a history of what has happened. - -

-This style of instrumentation is the simplest. It just asks systemtap -to print something at each event. To express this in the script -language, you need to say where to probe and what to print there. - -

-


- -Subsections - - - -

- - - diff --git a/tutorial/node30.html b/tutorial/node30.html deleted file mode 100644 index 83d25c19..00000000 --- a/tutorial/node30.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - -About this document ... - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Up: systemtap - Previous: Acknowledgments -   Contents -
-
- - -

-About this document ... -

-

-This document was generated using the -LaTeX2HTML translator Version 2002-2-1 (1.71) -

-Copyright © 1993, 1994, 1995, 1996, -Nikos Drakos, -Computer Based Learning Unit, University of Leeds. -
-Copyright © 1997, 1998, 1999, -Ross Moore, -Mathematics Department, Macquarie University, Sydney. -

-The command line arguments were:
- latex2html -noaddress -local_icons systemtap.tex -dir ../../htdocs/tutorial -

-The translation was initiated by Frank Ch. Eigler on 2007-02-04 -


- - - diff --git a/tutorial/node4.html b/tutorial/node4.html deleted file mode 100644 index 9fdedce9..00000000 --- a/tutorial/node4.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - -Where to probe - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: What to print - Up: Tracing - Previous: Tracing -   Contents -
-
- - -

-Where to probe -

- -

-Systemtap supports a number of built-in events. The library of -scripts that comes with systemtap, each called a ``tapset'', may -define additional ones defined in terms of the built-in family. See -the stapprobes man page for details. All these events are named using a unified syntax that -looks like dot-separated parameterized identifiers: - -

- - - - - - - - - - - - - - - - - - - -
beginThe startup of the systemtap session.
endThe end of the systemtap session.
kernel.function("sys_open")The entry to the function named -sys_open in the kernel.
syscall.close.returnThe return from the close system -call.
module("ext3").statement(0xdeadbeef)The addressed instruction -in the ext3 filesystem driver.
timer.ms(200)A timer that fires every 200 milliseconds.
- -

-Let's say that you would like to trace all function entries and exits -in a source file, say net/socket.c in the kernel. The -kernel.function probe point lets you express that easily, since -systemtap examines the kernel's debugging information to relate object -code to source code. It works like a debugger: if you can name or -place it, you can probe it. Use -kernel.function("*@net/socket.c") for the function entries, and -kernel.function("*@net/socket.c").return for the exits. Note -the use of wildcards in the function name part, and the subsequent -@FILENAME part. You can also put wildcards into the file name, -and even add a colon (:) and a line number, if you want to -restrict the search that precisely. Since systemtap will put a -separate probe in every place that matches a probe point, a few -wildcards can expand to hundreds or thousands of probes, so be careful -what you ask for. - -

-Once you identify the probe points, the skeleton of the systemtap -script appears. The probe keyword introduces a probe point, or -a comma-separated list of them. The following { and } -braces enclose the handler for all listed probe points. -

-probe kernel.function("*@net/socket.c") { }
-probe kernel.function("*@net/socket.c").return { }
-
-You can run this script as is, though with empty handlers there will -be no output. Put the two lines into a new file. Run -stap -v FILE. Terminate it any time with ^C. (The --v option tells systemtap to print more verbose messages during -its processing. Try the -h option to see more options.) - -

-


- - -next - -up - -previous - -contents -
- Next: What to print - Up: Tracing - Previous: Tracing -   Contents - - - - diff --git a/tutorial/node5.html b/tutorial/node5.html deleted file mode 100644 index 75570ff4..00000000 --- a/tutorial/node5.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -What to print - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Exercises - Up: Tracing - Previous: Where to probe -   Contents -
-
- - -

-What to print -

- -

-Since you are interested in each function that was entered and exited, -a line should be printed for each, containing the function name. In -order to make that list easy to read, systemtap should indent the -lines so that functions called by other traced functions are nested -deeper. To tell each single process apart from any others that may be -running concurrently, systemtap should also print the process ID in -the line. - -

-Systemtap provides a variety of such contextual data, ready for -formatting. They usually appear as function calls within the handler, -like you already saw in Figure 1. See the -stapfuncs man page for those functions and more defined in the -tapset library, but here's a sampling: - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
tid()The id of the current thread.
pid()The process (task group) id of the current thread.
uid()The id of the current user.
execname()The name of the current process.
cpu()The current cpu number.
gettimeofday_s()Number of seconds since epoch.
get_cycles()Snapshot of hardware cycle counter.
pp()A string describing the probe point being currently handled.
probefunc()If known, the name of the function in which - this probe was placed.
- -

-The values returned may be strings or numbers. The print() -built-in function accepts either as its sole argument. Or, you can -use the C-style printf() built-in, whose formatting argument -may include %s for a string, %d for a number. -printf and other functions take comma-separated arguments. -Don't forget a "\n" at the end. - -

-A particularly handy function in the tapset library is -thread_indent. Given an indentation delta parameter, it stores -internally an indentation counter for each thread (tid()), and -returns a string with some generic trace data plus an appropriate -number of indentation spaces. That generic data includes a timestamp -(number of microseconds since the most recent initial indentation), a -process name and the thread id itself. It therefore gives an idea not -only about what functions were called, but who called them, and how -long they took. Figure 3 shows the finished -script. It lacks a call to the exit() function, so you need to -interrupt it with ^C when you want the tracing to stop. - -

- -

- - - -
Figure 3: -Tracing and timing functions in net/sockets.c.
\begin{center}\begin{Sbox}\begin{minipage}{4.5in}
-\begin{verbatim}...
-
- -

-


- - -next - -up - -previous - -contents -
- Next: Exercises - Up: Tracing - Previous: Where to probe -   Contents - - - - diff --git a/tutorial/node6.html b/tutorial/node6.html deleted file mode 100644 index c9db1ebd..00000000 --- a/tutorial/node6.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - -Exercises - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Analysis - Up: Tracing - Previous: What to print -   Contents -
-
- - -

-Exercises -

- -

- -

    -
  1. Use the -p2 option to systemtap to list all the kernel -functions named with the word ``nit'' in them. The probe handlers -might as well be empty. - -

    -

  2. -
  3. Trace some system calls (use syscall.NAME and .return -probe points), with the same thread_indent probe handler as in -Figure 3. Interpret the results. - -

    -

  4. -
-

- - - diff --git a/tutorial/node7.html b/tutorial/node7.html deleted file mode 100644 index 6e455c05..00000000 --- a/tutorial/node7.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - -Analysis - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Basic constructs - Up: systemtap - Previous: Exercises -   Contents -
-
- - -

-Analysis -

- -

-Pages of generic tracing text may give you enough information for -exploring a system. With systemtap, it is possible to analyze that -data, to filter, aggregate, transform, and summarize it. Different -probes can work together to share data. Probe handlers can use a rich -set of control constructs to describe algorithms, with a syntax taken -roughly from awk. With these tools, systemtap scripts can -focus on a specific question and provide a compact response: no -grep needed. - -

-


- -Subsections - - - -

- - - diff --git a/tutorial/node8.html b/tutorial/node8.html deleted file mode 100644 index 143d49c3..00000000 --- a/tutorial/node8.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - -Basic constructs - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Target variables - Up: Analysis - Previous: Analysis -   Contents -
-
- - -

-Basic constructs -

- -

-Most systemtap scripts include conditionals, to limit tracing or other -logic to those processes or users or whatever of interest. The -syntax is simple: - -

- - - - - - - - - - -
if (EXPR) STATEMENT [else STATEMENT]if/else statement
while (EXPR) STATEMENTwhile loop
for (A; B; C) STATEMENTfor loop
- -

-Scripts may use break/continue as in C. -Probe handlers can return early using next as in awk. -Blocks of statements are enclosed in { and }. In -systemtap, the semicolon (;) is accepted as a null statement -rather than as a statement terminator, so is only rarely1necessary. Shell-style (#), C-style (/* */), and -C++-style (//) comments are all accepted. - -

-Expressions look like C or awk, and support the usual -operators, precedences, and numeric literals. Strings are treated as -atomic values rather than arrays of characters. String concatenation -is done with the dot ("a" . "b"). Some examples: - -

- - - - - - - - - - - - - -
(uid() > 100)probably an ordinary user
(execname() == "sed")current process is sed
(cpu() == 0 && gettimeofday_s() > 1140498000)after Feb. 21, 2006, on CPU 0
"hello" . " " . "world"a string in three easy pieces
- -

-Variables may be used as well. Just pick a name, assign to it, and -use it in expressions. They are automatically initialized and -declared. The type of each identifier - string vs. number - is -automatically inferred by systemtap from the kinds of operators and -literals used on it. Any inconsistencies will be reported as errors. -Conversion between string and number types is done through explicit -function calls. - -

- -

- - - - - - - - - - - - - -
foo = gettimeofday_s()foo is a number
bar = "/usr/bin/" . execname()bar is a string
c++c is a number
s = sprint(2345)s becomes the string "2345"
- -

-By default, variables are local to the probe they are used in. That -is, they are initialized, used, and disposed of at each probe handler -invocation. To share variables between probes, declare them global -anywhere in the script. Because of possible concurrency (multiple -probe handlers running on different CPUs), each global variable used -by a probe is automatically read- or write-locked while the handler is -running. - -

- -

- - - -
Figure 4: -Experimentally measuring CONFIG_HZ.
\begin{center}\begin{Sbox}\begin{minipage}{4.5in}
-\begin{verbatim}...
-
- -

-


- - -next - -up - -previous - -contents -
- Next: Target variables - Up: Analysis - Previous: Analysis -   Contents - - - - diff --git a/tutorial/node9.html b/tutorial/node9.html deleted file mode 100644 index ca88d422..00000000 --- a/tutorial/node9.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - -Target variables - - - - - - - - - - - - - - - - - - - -next - -up - -previous - -contents -
- Next: Functions - Up: Analysis - Previous: Basic constructs -   Contents -
-
- - -

-Target variables -

- -

-A class of special ``target variables'' allow access to the probe -point context. In a symbolic -debugger, when you're stopped at a breakpoint, you can print values -from the program's context. In systemtap scripts, for those probe -points that match with specific executable point (rather than an -asynchronous event like a timer), you can do the same. To know which -variables are likely to be available, you will need to be familiar -with the kernel source you are probing. In addition, you will need to -check that the compiler has not optimized those values into -unreachable nonexistence. - -

-Let's say that you are trying to trace filesystem reads/writes to a -particular device/inode. From your knowledge of the kernel, you know -that two functions of interest could be vfs_read and -vfs_write. Each takes a struct file * argument, inside -which there is a struct dentry *, a struct inode *, and -so on. Systemtap allows limited dereferencing of such pointer chains. -Two functions, user_string and kernel_string, can copy -char * target variables into systemtap strings. -Figure 5 demonstrates one way to monitor a -particular file (identifed by device number and inode number). This -example also demonstrates pasting numeric command-line arguments -($1 etc.) into scripts. - -

- -

- - - -
Figure 5: -Watching for reads/writes to a particular file.
\begin{center}\begin{Sbox}\begin{minipage}{4.5in}
-\begin{verbatim}...
-
- -

-


- - -next - -up - -previous - -contents -
- Next: Functions - Up: Analysis - Previous: Basic constructs -   Contents - - - - diff --git a/tutorial/prev.png b/tutorial/prev.png deleted file mode 100644 index e60b8b4073572dcd83b07c60b082ea6e2ba394c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmV+y0qFjTP)fWJ4@hJr9=)Yx5|PDs2VC9?nk002ovPDHLkV1i^Ya=-up diff --git a/tutorial/prev_g.png b/tutorial/prev_g.png deleted file mode 100644 index 476d9568c900e2ada6c2019b67eeee166a5f1288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327 zcmV-N0l5B&P)18~ zIpil5yY|hg&aw;rvXQ~olHp&x|G5Aw{ug* Z|8M28X+2RX!WaMm002ovPDHLkV1gF^iYx#C diff --git a/tutorial/systemtap.css b/tutorial/systemtap.css deleted file mode 100644 index d1824aff..00000000 --- a/tutorial/systemtap.css +++ /dev/null @@ -1,30 +0,0 @@ -/* Century Schoolbook font is very similar to Computer Modern Math: cmmi */ -.MATH { font-family: "Century Schoolbook", serif; } -.MATH I { font-family: "Century Schoolbook", serif; font-style: italic } -.BOLDMATH { font-family: "Century Schoolbook", serif; font-weight: bold } - -/* implement both fixed-size and relative sizes */ -SMALL.XTINY { font-size : xx-small } -SMALL.TINY { font-size : x-small } -SMALL.SCRIPTSIZE { font-size : smaller } -SMALL.FOOTNOTESIZE { font-size : small } -SMALL.SMALL { } -BIG.LARGE { } -BIG.XLARGE { font-size : large } -BIG.XXLARGE { font-size : x-large } -BIG.HUGE { font-size : larger } -BIG.XHUGE { font-size : xx-large } - -/* heading styles */ -H1 { } -H2 { } -H3 { } -H4 { } -H5 { } - -/* mathematics styles */ -DIV.displaymath { } /* math displays */ -TD.eqno { } /* equation-number cells */ - - -/* document-specific styles come next */ diff --git a/tutorial/systemtap.html b/tutorial/systemtap.html deleted file mode 100644 index 6110562d..00000000 --- a/tutorial/systemtap.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - -systemtap - - - - - - - - - - - - - - - - -next -up -previous - -contents -
- Next: Contents -   Contents -
-
- - -

-

-Systemtap tutorial - -
- -

- - -
-Frank Ch. Eigler <fche@redhat.com> -
-

-February 4, 2007 -

- -

-


- - - - - -

- - - diff --git a/tutorial/up.png b/tutorial/up.png deleted file mode 100644 index 3937e168f44bc997766dbe3b9383bd1db44f094d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^Qa~)h#LU3J`0lmo0U(Dbz$e6Y|Ni~?`T5VEKaXZ$ zILr2UCs3TRB*-tA!Qt7BG$5zc)5S5QVoq$YAz!lrkL&!DV=`*aVJGv=2TrrsUKR?`=XF~0x$5q(BOL&qeQ?X^G$FnGH9 KxvX2RVNRAoooEaAn8>@(e1sRI!V#<^f)p#-WVQt^!{}{R!<_yH~7!&%|GmpxjXG& eckJV{U(78Bbom$-1qlM(%HZkh=d#Wzp$Pz8Iac=o -- 2.43.5