hooks with priority, process traceset with strict boundaries and lttvwindow event...
[lttv.git] / ltt / branches / poly / doc / developer / process_traceset_strict_boundaries.txt
CommitLineData
6ea2aecb 1Linux Trace Toolkit
2
3Mathieu Desnoyers 17-05-2004
4
5
61. Read Requests Cases Study
7
8The goal of this document is to describe the typical behavior of viewers when
9they request data to a process traceset. After the implementation of three
10viewers, with different needs, the idea of their need for a trace processing API
11is getting clearer.
12
13They are splitted in two different categories : the first one is the one where
14the viewers select the events they need by specifying a time interval in the
15traceset and the second one is where the viewers specify a start event by it's
16position in the traceset and a certain amount of events it needs.
17
18
19
20Control Flow Viewer
21
22This viewer, consisting in a two dimensions graph, shows the different processes
23as its y axis and the time as x axis. It's clear that it needs to get the events
24by specifying a start time and an end time, constituing a time interval.
25
26
27Detailed Events List
28
29This list has nothing to do with time : it shows the events one by one. It cares
30about the quantity of events, not their time.
31
32It would be simple to get the events one by one if we were reading only one
33tracefile (one cpu), but the way events are read through each trace
34(monothically increasing time) makes it a little bit more difficult to specify
35how to increment event position. We will determine how it could be done simply.
36
37Let's define an event position. It's composed of a tracefile number, a bloc
38number and an index in the bloc.
39
40A viewer could ask for a specific event position as a start event. It would
41specify a number of events it needs. As a first call, it could ask for tracefile
420, bloc 0, event 0. Afterward, it can reuse information from events delivered to
43keep track of the next events it needs.
44
45Now, let's see how process traceset could handle it. It would seek in the
46traceset, searching the position number.
47(need a new lttv_process_traceset_seek_position)
48
49Then, the viewer could simply call a process traceset function specifying a
50number of events to get.
51
52The whole concept of numbering events would be hidden in the order in which the
53process traceset gets the events in a monothically increasing time.
54
55We sould specify that a request from such a viewer should be of one more event
56than needed : it would use the last event position to seek in the traceset for
57the next read. So, for example, a request for 50 events would ask for 51,
58keeping the event position of event 51.
59
60
61
622. Architecture
63
64Two different sets of API functions offered to read tracesets :
65
66lttv_process_traceset_seek_time
67lttv_process_traceset_middle_time
68
69lttv_process_traceset_seek_position
70lttv_process_traceset_middle_position
71lttv_traceset_context_position_save
72
73
74Of course, the typical use will be to call the seek_time with the middle_time,
75and similarly for position functions, but the architecture does permit viewers
76to mix calls to _time and _position functions.
77
78The position_save saves a position that can be used later to seek back to this
79exact same position, with event granularity. This implies that the
80process_traceset must deliver events with the same timestamp in a deterministic
81manner.
82
83
843. Implementation in tracecontext.c
85
86
87- Type LttvTracesetContextPosition
88
89struct _LttvTracesetContextPosition {
90 LttEventPosition **tracefile_position; /* Position in each trace/tracefile */
91 guint num_traces; /* Number of traces (for check) */
92 guint num_tracefiles; /* Number of tracefiles (check) */
93 GTree *pqueue; /* Copy of context pqueue */
94}
95
96with interfaces :
97
98lttv_traceset_context_position_save
99(const LttvTracesetContext *context,
100 LttvTracesetContextPosition *pos);
101
102
103Dependencies :
104
105- lttv_process_traceset_seek_position
106 - lttv_process_trace_seek_position
107 - ltt_tracefile_seek_position : already implemented
108
109lttv_process_traceset_seek_position will seek each trace to the right position.
110Each trace will seek all of its tracesets to the right position. We keep
111information about number of traces and tracefiles for extra integrity checking
112when reloading the context.
113
114lttv_process_traceset_seek_position(LttvTracesetContext *self,
115 const LttvTracesetContextPosition *position);
116
117
118- lttv_process_traceset_middle_position
119We modify lttv_process_traceset_middle so that it takes as arguments :
120(LttvTracesetContext *self,
121const LttvTracesetContextPosition *end_position,
122unsigned max_num_events)
123
124It's a simplification of the original function that will just read events until
125the first criterion is fulfilled : the end_position is reached (we do not
126deliver the event at the end_position) or the maximum number of events specified
127is reached (we deliver the last event, corresponding to the maximum number of
128events). The first event in the LttvTracesetContextPosition's pqueue will be
129used as end_event.
130
131- lttv_process_traceset_seek_time : already implemented
132
133- lttv_process_traceset_middle_time
134It's basically the same function as lttv_process_traceset_middle. We keep the
135nb_events as a limit of events to read. We also keep the fact that, when the
136maximum number of events is triggered, we also read the events that has the same
137timestamp. This is useful for not losing events. The fact is that a viewer that
138rely on time to select events it needs cannot have the granularity it needs to
139select specific events from a bunch of events with the same time stamp.
140
141
142
This page took 0.027967 seconds and 4 git commands to generate.