NAME |SYNOPSIS |DESCRIPTION |RETURN VALUE |EXAMPLE |FILES |SEE ALSO |AUTHOR |REPORTING BUGS |LICENSE |RESOURCES |COPYING |NOTES |COLOPHON | |
LIBTRACEFS(3) libtracefs ManualLIBTRACEFS(3)tracefs_instance_get_subbuf_size, tracefs_instance_set_subbuf_size - Helper functions for working with ring buffer sub buffers.
#include <tracefs.h> size_ttracefs_instance_get_subbuf_size(struct tracefs_instance *instance); inttracefs_instance_set_subbuf_size(struct tracefs_instance *instance, size_tsize);
Helper functions for working with the sub-buffers of the tracing ring buffer. The tracing ring buffer is broken up intosub-buffers. An event can not be bigger than the data section of the sub-buffer (seetep_get_sub_buffer_data_size(3)). By default, the ring buffer uses the architecturespage_sizeas the default size of the sub-buffer, but this can be limiting if there is a need for large events, for example, the application wants to write large strings into the trace_marker file. Thetracefs_instance_get_subbuf_size()returns the current size in kilobytes fo the ring buffer sub-buffers. Thetracefs_instance_set_subbuf_size()will write the size in kilobytes of what the new sub-buffer size should be. Note, that this is only a hint to what the minimum sub-buffer size should be. It also does not take into account the meta-data that is used by the sub-buffer, so the size written should be no less than 16 bytes more than the maximum event size that will be used. The kernel will likely make the sub-buffer size larger than specified, as it may need to align the size for implementation purposes.
Thetracefs_instance_get_subbuf_size()returns the size of the current sub-buffer for the giveninstance ring buffer or -1 on error. Thetracefs_instance_set_subbuf_size()will return 0 if it successfully set theinstance ring buffer sub-buffer size in kilobytes, or -1 on error.
#include <stdlib.h> #include <tracefs.h> #include <errno.h> int main(int argc, char **argv) { struct tep_handle *tep; ssize_t save_subsize; ssize_t subsize; char *trace; char buf[3000]; int meta_size; int ret; int i; tep = tep_alloc(); ret = tracefs_load_headers(NULL, tep); tep_free(tep); if (ret < 0) { perror("reading headers"); exit(-1); } meta_size = tep_get_sub_buffer_size(tep) - tep_get_sub_buffer_data_size(tep); save_subsize = tracefs_instance_get_subbuf_size(NULL); if (save_subsize < 0) { printf("Changing sub-buffer size not available\n"); exit(-1); } subsize = save_subsize * 1024; /* Have at least 4 writes fit on a sub-buffer */ if (subsize - meta_size < sizeof(buf) *4 ) { subsize = ((sizeof(buf) * 4 + meta_size) + 1023) / 1024; tracefs_instance_set_subbuf_size(NULL, subsize); } for (i = 0; i < sizeof(buf) - 1; i++) { buf[i] = '0' + i % 10; } buf[i] = '\0'; tracefs_instance_clear(NULL); for (i = 0; i < 4; i++) { ret = tracefs_printf(NULL, "%s\n", buf); if (ret < 0) perror("write"); } trace = tracefs_instance_file_read(NULL, "trace", NULL); printf("%s\n", trace); free(trace); printf("Buffer size was: %zd * 1024\n", tracefs_instance_get_subbuf_size(NULL)); tracefs_instance_set_subbuf_size(NULL, save_subsize); }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.
libtracefs(3),libtraceevent(3),trace-cmd(1)
Steven Rostedt<rostedt@goodmis.org[1]>Tzvetomir Stoyanov<tz.stoyanov@gmail.com[2]>
Report bugs to <linux-trace-devel@vger.kernel.org[3]>
libtracefs is Free Software licensed under the GNU LGPL 2.1
https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/
Copyright (C) 2020 VMware, Inc. Free use of this software is granted under the terms of the GNU Public License (GPL).
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
This page is part of thelibtracefs (Linux kernel trace file system library) project. Information about the project can be found at ⟨https://www.trace-cmd.org/⟩. If you have a bug report for this manual page, see ⟨https://www.trace-cmd.org/⟩. This page was obtained from the project's upstream Git repository ⟨https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git⟩ on 2025-08-11. (At that time, the date of the most recent commit that was found in the repository was 2025-06-02.) If you discover any rendering problems in this HTML version of the page, or you believe there is a better or more up-to-date source for the page, or you have corrections or improvements to the information in this COLOPHON (which isnot part of the original manual page), send a mail to man-pages@man7.orglibtracefs 1.8.1 01/02/2025LIBTRACEFS(3)HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface. For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere. Hosting byjambit GmbH. | ![]() |