Commit Graph

44 Commits

Author SHA1 Message Date
c39cf46776 tools: perform cleanup/supplementals when stopping profiler 2020-02-11 18:39:20 -08:00
33c81a3a9c memprof: add memory profiling using LD_PRELOAD
This brings over some of the techniques from the old memprof design.
Sysprof and memprof shared a lot of code, so it is pretty natural to
bring back the same callgraph view based on memory allocations.

This reuses the StackStash just like it did in memprof. While it
would be nice to reuse some existing tools out there, the fit of
memprof with sysprof is so naturally aligned, it's not really a
big deal to bring back the LD_PRELOAD. The value really comes
from seeing all this stuff together instead of multiple apps.

There are plenty of things we can implement on top of this that
we are not doing yet such as temporary allocations, cross-thread
frees, graphing the heap, and graphing differences between the
heap at to points in time. I'd like all of these things, given
enough time to make them useful.

This is still a bit slow though due to the global lock we take
to access the writer. To improve the speed here we need to get
rid of that lock and head towards a design that allows a thread
to request a new writer from Sysprof and save it in TLS (to be
destroyed when the thread exits).
2020-02-07 19:00:33 -08:00
981873af75 cli: add --merge command line option
This allows the caller to merge multiple syscap files into one such as:

  sysprof-cli --merge a.syscap b.syscap > c.syscap

Fixes #26
2020-01-29 08:17:36 -08:00
753a698563 tools: add --rapl to sysprof-cli command
This allows recording energy statistics using turbostat if supported by
the host system.
2019-08-08 16:12:26 -07:00
1cb182d1df tools: fix local usage for no_battery 2019-08-02 11:01:13 -07:00
41f8565a25 tools: fix type for profiler-ctl 2019-07-30 15:17:47 -07:00
8c72bafff8 tools: set cwd when spawning with sysprof-cli 2019-07-28 12:32:49 -07:00
745f4c4168 tools: add --gtk option for GTK_TRACE_FD= envvar 2019-07-20 18:38:24 -07:00
c2728b8ada cleanup: remove duplicated NSEC_PER_SEC macros
This switches everything to using a single 64-bit constant for NSEC_PER_SEC
that ensure we're doing 64-bit math everywhere.
2019-07-18 10:22:46 -07:00
6987888349 sysprof: include locale.h
setlocale and LC_ALL requires this
2019-07-17 14:59:42 +05:30
bb5261bc32 tools: setup translations for sysprof-cli 2019-07-13 15:01:59 -07:00
6a331f44f4 tools: add -- option instead of -c
This adds the common convention for applications that receive command
line arguments to use [-- COMMAND ARGS] instead of "-c" which is rather
limiting for shell expansion.

Fixes #10
2019-07-13 15:01:47 -07:00
f89d5830f2 cli: add diskstat data source recording 2019-07-01 14:46:43 -07:00
d44fdb48d9 tools: record battery from sysprof-cli 2019-06-26 14:26:15 -07:00
a951f1a240 tools: record network stats from sysprof-cli 2019-06-26 14:22:09 -07:00
84850218ed sysprof-cli: allow disabling perf stacktraces 2019-06-05 16:55:50 -07:00
5402074c53 tools: add --gnome-shell option to sysprof-cli
This can be used to connect to newer GNOME Shell versions that have
profiling integrated.
2019-06-04 15:10:51 -07:00
af2a17daa5 polkit: try harder to make polkit optional on non-Linux
We want the viewer to be usable on Mac/Windows/FreeBSD, even if our
profiler tooling isn't (yet).

Another option could be to do a simplified viewer window for those
platforms, but I think that is more work to maintain than abstracting
some of the stuff better in libsysprof.
2019-06-04 14:28:06 -07:00
af32235541 gjs: add gjs source back
This sets various environment variables we need.
2019-06-03 18:01:53 -07:00
7df9221f8b tools: check result of write
and also use the platform helpers
2019-06-03 12:40:48 -07:00
ac1d9e4694 build: disable cli tool when no libsysprof is present 2019-06-03 12:29:48 -07:00
cb4aed73bc build: don't install sysprof-cat and sysprof-dump
At least for now
2019-05-29 16:56:57 -07:00
30524ab3d0 sysprof-cli: exit main loop on failure 2019-05-29 15:13:01 -07:00
c670cdd82a sysprof-cli: add symbol rollup unless --no-decode 2019-05-29 15:13:01 -07:00
f57bc57461 sysprof-cli: remove -g option
We might want to save this for gtk
2019-05-29 15:13:01 -07:00
318e9e300c tools: add option to list files in capture 2019-05-29 15:13:01 -07:00
7650d6e7c6 libsysprof-capture: add file chunk frame type 2019-05-29 15:13:01 -07:00
cc415c9140 libsysprof-capture: add log frame type
This is useful to interleave logs with the capture so that we can have
correlation without interjecting them into mark fields.
2019-05-29 15:13:01 -07:00
d77c305779 tools: use writer-cat from libsysprof-capture 2019-05-29 15:13:01 -07:00
9c1518b384 tools: use PolkitUnixProcess 2019-05-29 15:13:01 -07:00
88bf04cb37 tools: add polkit agent to sysprof-cli
The goal for this is to be able to not use sudo to authenticate the user
and elevate privileges.
2019-05-29 15:13:01 -07:00
aca6baa3bd tools: add --gjs option and fix --use-trace-fd
This uses the new tracefd source for gjs and trace-fd sources.
2019-05-29 15:13:01 -07:00
2d500bebe2 tools: add some timing information to dump utility 2019-05-29 15:13:01 -07:00
b27cef17d8 tests: stub out a tool to print thread/pid information 2019-05-29 15:13:01 -07:00
567f8a3a0f libsysprof-capture: shorten names by removing Frame 2019-05-29 15:13:01 -07:00
63d3ea12ed tools: add --use-trace-fd option 2019-05-29 15:13:01 -07:00
db9aea95ea libsysprof-capture: add metadata frame type
This will allow sources and aids to discover information about what was
done between capture loading and saving.
2019-05-29 15:13:00 -07:00
b5c855a01f tools: use g_unix_signal_add() instead of eventfd
This will do basically the same thing, but be more convenient for us and
less likely to error.
2019-05-29 15:13:00 -07:00
adcf667b5a tools: add tool to toggle a profiler
This is in-tree only currently, although we may consider installing it
at some point (or adding it to sysprof-cli).
2019-05-29 15:13:00 -07:00
53c718b708 build: rename all symbols to use sysprof_ as prefix
As we gain in usage, we need to be more careful about using a prefix
that will not collide with other symbols. So version 3 of our ABI will
change to using Sysprof/SYSPROF/sysprof as the various prefixes.

The soname/api version bump will happen later on this branch so that
things are easier to test up until then.
2019-05-29 15:12:59 -07:00
6ba408f073 shared: remove use of libshared
This moves everything into other places and simple includes the
files in the cases that it is necessary. In the future, we can
rewrite sysprofd to use GDBus and add GetProcFile() to allow
for client-side processing of kallsyms.
2019-05-29 15:12:59 -07:00
6b983ab8c1 capture: add task-id (thread-id) to samples
This could let us do some amount of filtering by threads going
forward if we have that data available to us.
2019-05-29 15:12:59 -07:00
63bcfc2b0e build: various build fixes for macOS
This doesn't make profiling useful in any way, but it does get things
to the point where I can actually open a capture file. And it would
be nice if we could progress to the point of loading capture files
(with correct data in-tact) and this helps us move down that path.

To really do that correctly, we should make some of the widgetry
disabled when it isn't useful. We also need to ensure that we add extra
decoding information to capture files during shutdown so that any
platform can read it back. This would also help the situation of
running and reading on separate architectures.
2019-05-29 15:12:59 -07:00
1708ad1b48 tree: start on massive tree refactor
The big thing going on here is that we are going to split up the libraries
a bit better, and remove GObject from the capture library. The libsysprof
library will bring in the capture library statically, so we can export the
symbols we want.

Eventually, we will bump the version to sysprof-3, but not yet.
2019-05-29 15:12:59 -07:00