summaryrefslogtreecommitdiffstats
path: root/lket-b2a.1.in
diff options
context:
space:
mode:
Diffstat (limited to 'lket-b2a.1.in')
-rw-r--r--lket-b2a.1.in257
1 files changed, 257 insertions, 0 deletions
diff --git a/lket-b2a.1.in b/lket-b2a.1.in
new file mode 100644
index 00000000..753d8348
--- /dev/null
+++ b/lket-b2a.1.in
@@ -0,0 +1,257 @@
+.\" -*- nroff -*-
+.TH LKET-B2A 1 @DATE@ "IBM"
+.SH NAME
+lket-b2a \- Converting and dumping utility for LKET binary trace data
+
+.\" macros
+.de SAMPLE
+.br
+.RS
+.nf
+.nh
+..
+.de ESAMPLE
+.hy
+.fi
+.RE
+..
+
+.SH SYNOPSIS
+
+.br
+.B lket-b2a
+.I OPTIONS
+.IR IN_FILENAME ...
+.br
+
+.SH DESCRIPTION
+
+The trace data generated by
+.I LKET
+is in binary format by default for
+better performance and smaller size.
+.I lket-b2a
+is used to convert the
+binary trace data into readable data in ascii format and save
+them into local file or MySQL database for off-line trace analysis.
+It uses the per-cpu binary trace data files (stpd_cpu*) as inputs.
+You can use "stap -bM" with LKET to get those per-cpu files before using it.
+
+The database used by
+.I lket-b2a
+is MySQL. So MySQL must be properly installed
+and configured in order to make
+.I lket-b2a
+able to dump the trace data into MySQL database.
+
+.SH OPTIONS
+.I lket-b2a
+supports the following two options. They can be used
+together or alone but at least one of them should be specified:
+
+.TP
+.B \-m
+convert and dump trace data into MySQL database. For more details,
+See the following section.
+.TP
+.B \-f
+convert and dump trace data into local file. For more details,
+See the following section.
+
+.SH DUMP TRACE DATA INTO LOCAL FILE
+
+The generated output file is named
+.IR lket.out .
+The following is an example:
+
+.SAMPLE
+root:/home/root/data> lket-b2a -f stpd_cpu*
+root:/home/root/data> cat lket.out
+LKET Magic: 0xAEFCDB6B
+InitHdrLen: 9
+Version Major: 1
+Version Minor: 1
+Big endian: YES
+Timing method: do_gettimeofday()
+Bits width: 64
+Initial CPU timebase: 187994 (cycles per microsecond)
+
+0.2084 APPNAME: (null) PID:20922 CPU:3 HOOKGRP:3 HOOKID:1 tid:20936,pid:20936,ppid:35,pname:systemtap/0,
+0.2086 APPNAME: (null) PID:20922 CPU:3 HOOKGRP:3 HOOKID:1 tid:20937,pid:20937,ppid:35,pname:systemtap/1,
+0.2087 APPNAME: (null) PID:20922 CPU:3 HOOKGRP:3 HOOKID:1 tid:20938,pid:20938,ppid:35,pname:systemtap/2,
+[...]
+10.24319 APPNAME: sshd PID:7203 CPU:3 HOOKGRP:2 HOOKID:2 syscall:write,
+10.24324 APPNAME: sshd PID:7203 CPU:3 HOOKGRP:2 HOOKID:1 syscall:compat_sys_select,
+[...]
+.ESAMPLE
+
+.SH DUMP TRACE DATA INTO MYSQL DATABASE
+
+To avoid either reading the complete trace data into internal data
+structures to process, or filter through the raw trace data again
+and again to calculate the interesting metrics,
+.I lket-b2a
+supports convert and save the binary trace data into MySQL database to
+facilitate the query and calculation on the trace data.
+
+.I lket-b2a
+creates the database name based on current time. And
+.I lket-b2a
+will not only save the trace data, but also some meta data into MySQL
+database too, such as trace header, trace table description.
+
+The following is an example of navigating the trace data in MySQL database
+created by
+.IR lket-b2a :
+
+Use
+.I lket-b2a
+to convert and dump the binary trace data of
+.I LKET
+into MySQL database:
+
+.SAMPLE
+root:/home/root/data> lket-b2a -m stpd_cpu*
+.ESAMPLE
+
+list all databases in MySQL:
+
+.SAMPLE
+mysql> show databases;
++------------------+
+| Database |
++------------------+
+| DB20061023161626 |
+| mysql |
+| test |
++------------------+
+3 rows in set (0.00 sec)
+.ESAMPLE
+
+DB20061023161626 is the newly created database by "lket-b2a -m stpd_cpu*". We can list
+all the tables contained in DB20061023161626:
+
+.SAMPLE
+mysql> use DB20061023161626
+Database changed
+mysql> show tables;
++----------------------------+
+| Tables_in_DB20061023161626 |
++----------------------------+
+| 2_1 |
+| 2_2 |
+| 3_1 |
+| 3_3 |
+| 3_5 |
+| 4_1 |
+| 4_3 |
+| 4_4 |
+| 8_1 |
+| 8_3 |
+| appNameMap |
+| table_desc |
+| trace_header |
++----------------------------+
+13 rows in set (0.00 sec)
+.ESAMPLE
+
+The table trace_header is used to store the trace header info:
+
+.SAMPLE
+mysql> select * from trace_header;
++-----------+-----------+------------+-----------------+------------+
+| Major_Ver | Minor_Ver | Big_Endian | Timing_Method | Bits_Width |
++-----------+-----------+------------+-----------------+------------+
+| 1 | 1 | 2 | do_gettimeofday | 64 |
++-----------+-----------+------------+-----------------+------------+
+1 row in set (0.00 sec)
+.ESAMPLE
+
+The table appNameMap is used to store the mapping between PID and process name:
+
+.SAMPLE
+mysql> select * from appNameMap;
++-------+-----------------+
+| pid | pname |
++-------+-----------------+
+| 10764 | systemtap/0 |
+| 10765 | systemtap/1 |
+| 10766 | systemtap/2 |
+| 10767 | systemtap/3 |
+| 10768 | systemtap/4 |
+| 10769 | systemtap/5 |
+| 10770 | systemtap/6 |
+| 10771 | systemtap/7 |
+| 0 | swapper |
+| 1 | init |
+| 2 | migration/0 |
+| 3 | ksoftirqd/0 |
+| 4 | watchdog/0 |
+| 5 | migration/1 |
+[...]
+.ESAMPLE
+
+Each event corresponds to one table which is named as groupid_hookid. For example
+table 8_1 corresponds to
+.I addevent.netdev.receive
+whose groupid is 8 and hookid is 1:
+
+.SAMPLE
+mysql> select * from table_desc;
++------------+----------------------------------+
+| table_name | table_desc |
++------------+----------------------------------+
+| 2_1 | addevent.syscall.entry |
+| 2_2 | addevent.syscall.return |
+| 3_1 | process_snapshot |
+| 3_3 | addevent.process.execve |
+| 3_5 | addevent.process.fork |
+| 4_3 | addevent.ioscheduler.elv_next_re |
+| 4_4 | addevent.ioscheduler.elv_next_re |
+| 4_1 | addevent.ioscheduler.elv_add_req |
+| 8_1 | addevent.netdev.receive |
+| 8_3 | addevent.netdev.transmit |
++------------+----------------------------------+
+10 rows in set (0.00 sec)
+.ESAMPLE
+
+The hookid of a return type event(
+.I addevent.*.return
+) should be an
+even number and its value should be the corresponding entry event hookid +1.
+For example, the hookid of addevent.syscall.return is 2 and the hookid of
+addevent.syscall.entry is 1. And what's more, there will be a new column
+named
+.I entry_usec
+for all return type event tables which is the timestamp
+of the entry of that event. The column
+.I entry_usec
+is created and calculated by lket-b2a on the fly while processing the binary trace data.
+
+.SAMPLE
+mysql> select * from 2_1 limit 4;
++---------+--------+--------+------------+--------+--------------+
+| groupid | hookid | usec | process_id | cpu_id | syscall |
++---------+--------+--------+------------+--------+--------------+
+| 2 | 1 | 10727 | 20922 | 2 | read |
+| 2 | 1 | 10746 | 20922 | 2 | read |
+| 2 | 1 | 729066 | 3605 | 5 | gettimeofday |
+| 2 | 1 | 729086 | 3605 | 5 | gettimeofday |
++---------+--------+--------+------------+--------+--------------+
+4 rows in set (0.00 sec)
+
+mysql> select * from 2_2 limit 4;
++---------+--------+--------+------------+--------+------------+--------------+
+| groupid | hookid | usec | process_id | cpu_id | entry_usec | syscall |
++---------+--------+--------+------------+--------+------------+--------------+
+| 2 | 2 | 10742 | 20922 | 2 | 10727 | read |
+| 2 | 2 | 729072 | 3605 | 5 | 729066 | gettimeofday |
+| 2 | 2 | 729089 | 3605 | 5 | 729086 | gettimeofday |
+| 2 | 2 | 729100 | 3605 | 5 | 729096 | poll |
++---------+--------+--------+------------+--------+------------+--------------+
+4 rows in set (0.00 sec)
+.ESAMPLE
+
+.SH SEE ALSO
+.IR stap (1),
+.IR lket (5)