File: libtracefs-instances-utils.txt

package info (click to toggle)
libtracefs 1.8.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,368 kB
  • sloc: ansic: 12,953; makefile: 609; sh: 509; yacc: 188; lex: 106
file content (167 lines) | stat: -rw-r--r-- 5,717 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
libtracefs(3)
=============

NAME
----
tracefs_instance_get_name, tracefs_instance_get_trace_dir, tracefs_instances_walk, tracefs_instance_exists,
tracefs_instance_get_buffer_size, tracefs_instance_set_buffer_size, tracefs_instance_get_buffer_percent,
tracefs_instance_set_buffer_percent - Helper functions for working with tracing instances.

SYNOPSIS
--------
[verse]
--
*#include <tracefs.h>*

const char pass:[*]*tracefs_instance_get_name*(struct tracefs_instance pass:[*]_instance_);
const char pass:[*]*tracefs_instance_get_trace_dir*(struct tracefs_instance pass:[*]_instance_);
int *tracefs_instances_walk*(int (pass:[*]_callback_)(const char pass:[*], void pass:[*]), void pass:[*]_context)_;
bool *tracefs_instance_exists*(const char pass:[*]_name_);
size_t *tracefs_instance_get_buffer_size*(struct tracefs_instance pass:[*]_instance_, int _cpu_);
int *tracefs_instance_set_buffer_size*(struct tracefs_instance pass:[*]_instance_, size_t _size_, int _cpu_);
int *tracefs_instance_get_buffer_percent*(struct tracefs_instance pass:[*]_instance_);
int *tracefs_instance_set_buffer_percent*(struct tracefs_instance pass:[*]_instance_, int _val_);
--

DESCRIPTION
-----------
Helper functions for working with trace instances.

The *tracefs_instance_get_name()* function returns the name of the given _instance_.
Note that the top instance has no name, the function returns NULL for it.

The *tracefs_instance_get_trace_dir()* function returns the tracing directory, where
the given _instance_ is configured.

The *tracefs_instances_walk()* function walks through all configured tracing
instances in the system and calls _callback_ for each one of them. The _context_
argument is passed to the _callback_, together with the instance name. If the
_callback_ returns non-zero, the iteration stops. Note, the _callback_ is not
called for the top top instance.

The *tracefs_instance_exists()* function checks if an instance with the given
_name_ exists in the system.

The *tracefs_instace_get_buffer_size()* returns the size of the ring buffer. If _cpu_
is negative, it returns the total size of all the per CPU ring buffers, otherwise
it returns the size of the per CPU ring buffer for _cpu_.

The *tracefs_instance_set_buffer_size()* function sets the size of the ring buffer.
If _cpu_ is negative, then it sets all the per CPU ring buffers to _size_ (note
the total size is the number of CPUs * _size_). If _cpu_ is specified, then it only
sets the size of the per CPU ring buffer.

The *tracefs_instance_set_buffer_percent()* sets the buffer percent value of
the tracing ring buffer for _instance_ or the top level buffer if _instance_ is
NULL. The buffer percent decides when readers on *tracefs_cpu_read*(3),
*tracefs_cpu_buffered_read*(3), *tracefs_cpu_write*(3) and *tracefs_cpu_pipe*(3)
will block when O_NONBLOCK is not set. The value of _val_ must be between 0 and
100, where:

[verse]
--
  0   - block until there's any data in the ring buffer
  1   - block until 1% of the ring buffer sub-buffers are filled
  50  - block until 50% of the ring buffer sub-buffers are filled
  100 - block until the entire ring buffer is filled
--

Note, any number from 0 to 100 can be used where it is the percentage of the
ring buffer that must be filled before a blocked reader will be notified that
there's data to be retrieved.

The *tracefs_instance_get_buffer_percent()* retrieves the current buffer percent
setting of the tracing ring buffer for _instance_ or the top level buffer
if _instance_ is NULL.

RETURN VALUE
------------
The *tracefs_instance_get_name()* returns a string or NULL in case of the top
instance. The returned string must _not_ be freed.

The *tracefs_instance_get_trace_dir()* returns a string or NULL in case of an error.
The returned string must _not_ be freed.

The *tracefs_instances_walk()* function returns 0, if all instances were iterated, 1
if the iteration was stopped by the _callback_, or -1 in case of an error.

The *tracefs_instance_exists()* returns true if an instance with the given _name_
exists in the system or false otherwise.

The *tracefs_instance_get_buffer_size()* returns the size of the ring buffer depending on
the _cpu_ value passed in, or -1 on error.

The *tracefs_instance_set_buffer_size()* returns zero on success and -1 on error.

EXAMPLE
-------
[source,c]
--
#include <tracefs.h>

struct tracefs_instance *inst;
....
char *name = tracefs_instance_get_name(inst);
	if(name) {
		/* Got name of the instance */
	}
char *dir = tracefs_instance_get_trace_dir(inst);
	if(dir) {
		/* Got tracing directory of the instance */
	}
...
static int instance_walk(char *name, void *context)
{
	/* Got instance with name */
	return 0;
}
...
	if (tracefs_instances_walk(instance_walk, NULL) < 0) {
		/* Error walking through the instances */
	}
...
	if (tracefs_instance_exists("foo")) {
		/* There is instance with name foo in the system */
	} else {
		/* There is no instance with name foo in the system */
	}
--
FILES
-----
[verse]
--
*tracefs.h*
	Header file to include in order to have access to the library APIs.
*-ltracefs*
	Linker switch to add when building a program that uses the library.
--

SEE ALSO
--------
*libtracefs*(3),
*libtraceevent*(3),
*trace-cmd*(1)

AUTHOR
------
[verse]
--
*Steven Rostedt* <rostedt@goodmis.org>
*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>
--
REPORTING BUGS
--------------
Report bugs to  <linux-trace-devel@vger.kernel.org>

LICENSE
-------
libtracefs is Free Software licensed under the GNU LGPL 2.1

RESOURCES
---------
https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/

COPYING
-------
Copyright \(C) 2020 VMware, Inc. Free use of this software is granted under
the terms of the GNU Public License (GPL).