LIBTRACEFS(3)
π LIBTRACEFS(3) β the manual for tracefs besties π
okay so bestie, this is the libtracefs manual, and today we're learning about getting trace events from your local system into a tep handler. it's giving "setup era" and honestly? iconic. let's go. β¨
β¨ NAME β¨
tracefs_local_events, tracefs_local_events_system, tracefs_fill_local_events, tracefs_load_cmdlines, tracefs_load_headers β these are the functions that initialize a tep handler with trace events from the local system. lowkey the whole friend group of setup functions. π«Ά
πΈ SYNOPSIS πΈ
#include <tracefs.h>
struct tep_handle *tracefs_local_events(const char *tracing_dir);
struct tep_handle *tracefs_local_events_system(const char *tracing_dir, const char * const *sys_names);
int tracefs_fill_local_events(const char *tracing_dir, struct tep_handle *tep, int *parsing_failures);
int tracefs_load_cmdlines(const char *tracing_dir, struct tep_handle *tep);
int tracefs_load_headers(const char *tracing_dir, struct tep_handle *tep);
π¦ DESCRIPTION π¦
okay so these are the functions for initializing a tep handler with trace events from your local system. it's basically the "get your data ready" squad. π
π tracefs_local_events() β the main character
the tracefs_local_events() function allocates a brand new tep handler and initializes it with events from all trace systems, located in the given tracing_dir directory. this could be NULL β which means "use the tracefs mount point for the trace systems of the local machine" β or it may be a path to a copy of the tracefs directory from another machine. no cap, it's flexible like that. β¨
π tracefs_local_events_system() β the picky one (but make it cute)
the tracefs_local_events_system() function allocates a new tep handler and initializes it with events from specified trace systems sys_names, located in the given tracing_dir directory. this could be NULL or the location of the tracefs mount point for the trace systems of the local machine, or it may be a path to a copy of the tracefs directory from another machine. the sys_names argument is an array of trace system names that will be used for tep handler initialization. the last element in that array must be a NULL pointer. periodt. don't forget the NULL or it's gonna be a whole thing. π
π tracefs_fill_local_events() β the "i already have a tep handler" vibe
the tracefs_fill_local_events() function initializes an already allocated tep handler with events from all trace systems, located in the given tracing_dir directory. this could be NULL or the location of the tracefs mount point for the trace systems of the local machine, or it may be a path to a copy of the tracefs directory from another machine. the tep argument must be a pointer to an already allocated tep handler that is going to be initialized. the parsing_failures argument could be NULL or a pointer to an integer, where the number of failures while parsing the event files are returned. so if you wanna know how messy it got, you can. π
π§ tracefs_load_cmdlines() β the "wait, the pids changed" remix
the above functions will also load the mappings between pids and the process command line names. in some cases the tep handle is created with one of the above before tracing begins. as the mappings get updated during the trace, there may be a need to read the mappings again after the trace. tracefs_load_cmdlines() does just that. the tracing_dir is the directory of the mount point to load from, or NULL to use the mount point of the tracefs file system. it's giving "refresh button" energy. π₯
π tracefs_load_headers() β the ring buffer lore
the tracefs_load_headers() will reade the "header_page" of the events directory that will update the tep handle with information on how to parse the tracing ring buffer sub-buffer. yes bestie, "reade" is exactly what the original says β we don't fix, we preserve. iykyk. π
π RETURN VALUE π
- the
tracefs_local_events()andtracefs_local_events_system()functions return a pointer to an allocated and initializedtephandler, orNULLin case of an error. the returnedtephandler must be freed withtep_free(3). don't leave it hanging, that's not slay. π - the
tracefs_fill_local_events()function returns-1in case of an error or0otherwise. - the
tracefs_load_cmdlines()function returns-1in case of an error, or0otherwise.
π₯ EXAMPLE π₯
here's the whole vibe in code, bestie. copy it exactly, it's literally right here:
#include <tracefs.h>
struct tep_handle *tep;
...
tep = tracefs_local_events(NULL);
if (!tep) {
/* Failed to initialise tep handler with local events from top instance */
...
}
...
tep_free(tep);
...
const char *systems[] = {"ftrace", "irq", NULL};
tep = tracefs_local_events_system(NULL, systems);
if (!tep) {
/* Failed to initialise tep handler with local events from
* ftrace and irq systems in top instance.
*/
...
}
...
tep_free(tep);
...
int parsing_failures;
tep = tep_alloc();
if (!tep) {
/* Failed to allocate a tep handler */
...
}
if (tracefs_fill_local_events(NULL, tep, &parsing_failures) < 0) {
/* Failed to initialise tep handler with local events from top instance */
}
tracefs_load_cmdlines(NULL, tep);
...
tep_free(tep);
π FILES π
tracefs.hβ header file to include in order to have access to the library APIs. you literally cannot skip this one, bestie. π«Ά-ltracefsβ linker switch to add when building a program that uses the library. add it to your build line or it's not gonna link. π
π SEE ALSO π
libtracefs(3), libtraceevent(3), trace-cmd(1) β go read these too, they're the extended universe. β¨
π AUTHOR π
- Steven Rostedt
<rostedt@goodmis.org[1]> - Tzvetomir Stoyanov
<tz.stoyanov@gmail.com[2]>
π¦ REPORTING BUGS π¦
report bugs to <linux-trace-devel@vger.kernel.org[3]>. don't be shy, they wanna know. π
π LICENSE π
libtracefs is Free Software licensed under the GNU LGPL 2.1. periodt. π
π RESOURCES π
https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/ β the source, the lore, the whole thing. go look. π
β COPYING β
Copyright (C) 2020 VMware, Inc. Free use of this software is granted under the terms of the GNU Public License (GPL). no cap. π«Ά
π§ NOTES π§
rostedt@goodmis.orgmailto:rostedt@goodmis.orgtz.stoyanov@gmail.commailto:tz.stoyanov@gmail.comlinux-trace-devel@vger.kernel.orgmailto:linux-trace-devel@vger.kernel.org
and that's the whole manual, bestie. this page is from libtracefs 1.8.4, dated 10/21/2026 β slay, iconic, no notes. π β¨
π¦ where this page comes from
- arch rolling: libtracefs 1.8.4-1 Β· GPL-2.0-only AND LGPL-2.1-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms