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() and tracefs_local_events_system() functions return a pointer to an allocated and initialized tep handler, or NULL in case of an error. the returned tep handler must be freed with tep_free(3). don't leave it hanging, that's not slay. 😭
  • the tracefs_fill_local_events() function returns -1 in case of an error or 0 otherwise.
  • the tracefs_load_cmdlines() function returns -1 in case of an error, or 0 otherwise.

πŸ”₯ 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 🧚

  1. rostedt@goodmis.org mailto:rostedt@goodmis.org
  2. tz.stoyanov@gmail.com mailto:tz.stoyanov@gmail.com
  3. linux-trace-devel@vger.kernel.org mailto: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