From 6f5dd44f1fb662958e7f648f1efb1683c704c619 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Thu, 26 Sep 2019 22:55:02 +0200 Subject: [PATCH] Helper for reading data from kernel more efficiently. --- extra/systrace/tracy_systrace.c | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 extra/systrace/tracy_systrace.c diff --git a/extra/systrace/tracy_systrace.c b/extra/systrace/tracy_systrace.c new file mode 100644 index 00000000..3ecc0f4d --- /dev/null +++ b/extra/systrace/tracy_systrace.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include +#include +#include +#include + +enum { BufSize = 64*1024 }; + +int main() +{ + char buf[BufSize]; + + int kernelFd = open( "/sys/kernel/debug/tracing/trace_pipe", O_RDONLY ); + if( kernelFd == -1 ) return -1; + + struct pollfd pfd; + pfd.fd = kernelFd; + pfd.events = POLLIN | POLLERR; + + struct timespec sleepTime; + sleepTime.tv_sec = 0; + sleepTime.tv_nsec = 1000 * 1000 * 10; + + for(;;) + { + while( poll( &pfd, 1, 0 ) <= 0 ) nanosleep( &sleepTime, NULL ); + const int rd = read( kernelFd, buf, BufSize ); + if( rd <= 0 ) break; + write( STDOUT_FILENO, buf, rd ); + } + + close( kernelFd ); + return 0; +}