Commit Graph

2885 Commits

Author SHA1 Message Date
e10ab3e32e libsysprof-profile: add augmentation phase to instruments
This allows an instrument to augment the capture with additional
information before the capture is closed/flushed to storage.
2023-06-02 12:59:01 -07:00
60ecde017f libsysprof-profile: add wrappers for instrument vfuncs
For maintainability, I'd prefer to keep these calls going through a wrapper
function. They get inlined likely by the compiler anyway.
2023-06-02 12:58:20 -07:00
fd40e940d3 libsysprof-profile: add network usage instrument 2023-05-31 22:43:33 -07:00
e3404dd0ca libsysprof-profile: update time range for recording
That way we don't have gaps at the edges.
2023-05-31 10:16:51 -07:00
bff99f1f63 libsysprof-profile: remove debug code 2023-05-31 10:12:17 -07:00
302a772c8d libsysprof-profile: fix await usage 2023-05-31 10:12:09 -07:00
e195b8961c libsysprof-profile: fix index of cpu ids 2023-05-31 10:11:47 -07:00
5389d6ac51 libsysprof-profile: fix logic of future checks 2023-05-31 09:58:51 -07:00
fd1fb68a98 libsysprof-profile: add various CPU parsing
This still needs some work because the read operations are blocked
currently.
2023-05-30 21:29:49 -07:00
03c6c57fab contrib: move line reader to contrib
This came from Builder, and it's nice to be able to use it statically from
multiple libsysprof libraries.
2023-05-30 21:29:24 -07:00
52684c7a12 libsysprof-profile: start on cpu usage instrument
The goal here is to do the whole thing on a fiber rather than how we were
doing it before. This just gets the counter registration going, but we
need to follow up with the parsing/lseek/etc code.
2023-05-30 18:41:56 -07:00
598a2b7cf7 libsysprof-profile: capture podman overlays and containerenv
Additionally keep information about .flatpak-info so that we can
reconstruct which symbols are needed without build-id support.
2023-05-30 17:58:37 -07:00
9f9f953d53 libsysprof-profile: import podman utils
This comes from libsysprof, which we hope to remove as part of this move
to libsysprof-profile vs libsysprof-analyze.
2023-05-30 17:57:41 -07:00
1840c7b526 libsysprof-profile: add mmap records for existing processes 2023-05-30 17:35:00 -07:00
8ddcf54c37 libsysprof-profile: add mountinfo when process discovered 2023-05-30 17:28:04 -07:00
2ac4ff692d libsysprof-profile: add API to notify of process started
This will be used when we discover a process started like when the Perf
instrument gets PERF_RECORD_COMM.
2023-05-30 17:27:33 -07:00
ee3a78433f libsysprof-profile: add processes during recording
We want to reduce the chances we miss things between prepare and record
virtual methods, so delay the adding of processes until the recording is
started. We may get duplicate records, but we can deal with that when
analyzing the capture.
2023-05-30 17:12:19 -07:00
5c825c1fb5 libsysprof-profile: add some basic process information
This needs to get into the capture, and we still need to respond to the
discovery of new processes as well (which we lack API for).
2023-05-30 17:06:28 -07:00
81317bc1ca libsysprof-profile: add recording helper to capture file data
We might have the file data from the peer and can specify the data in the
capture writer directly.

It may be useful to allow compressing these too, but we can deal with that
at a later time.
2023-05-30 17:00:53 -07:00
df7da9bb41 libsysprof-profile: remove frame overhead from max data length
Just so that we can potentially fit multiple of these per buffering in the
capture writer.
2023-05-30 17:00:00 -07:00
f91e13e055 libsysprof-profile: require org.gnome.sysprof3.profile policy
This will be needed to read the given proc files that should be captured
in the recording.
2023-05-30 16:11:38 -07:00
1764a088ee libsysprof-profile: fix iteration of instruments 2023-05-30 16:10:19 -07:00
1851f39b8a libsysprof-profile: use dex_bus_get()
This allows us to remove the synchronous call here from the fiber calling
into this API.
2023-05-30 16:05:01 -07:00
f9be133913 libsysprof-profile: implement loading files via sysprofd
If we need access to a privileged file in /proc or /sys we need to get
that through sysprofd. This implements basic checking of paths to see
if we need to get a /proc file from there.

We can't use the GetProfFD variant because that may still cause errors
when reading back due to how selinux and other LSMs may restrict read()
to get kallsyms.

This requires recent API additions in libdex.
2023-05-30 15:53:39 -07:00
4fe9339113 libsysprof-profile: capture files using recording API 2023-05-30 14:44:01 -07:00
14f71c5eee libsysprof-profile: add API to append a file to recording 2023-05-30 14:43:44 -07:00
957cec9843 libsysprof-analyze: decompress if necessary in dup_bytes()
If we are trying to get the file bytes and they are compressed, we may need
to transparently decompress those bytes. That way if the API requested
"/proc/cpuinfo" but really got "/proc/cpuinfo.gz" it still gets the same
bytes to consume.
2023-05-30 13:19:57 -07:00
1e8e1adb73 libsysprof-analyze: automatically handle compressed streams
If we want /proc/kallsyms and we discover /proc/kallsyms.gz, then use the
/proc/kallsyms.gz instead and transparently decompress it. Also, list the
file in sysprof_document_list_files() as /proc/kallsyms instead of
/proc/kallsyms.gz as that is really the intention (but mark the compressed
bit for decoding the chunks).
2023-05-30 12:46:42 -07:00
01091fe815 libsysprof-profiler: add linux instrument on Linux 2023-05-28 09:08:35 -07:00
02811d593b libsysprof-profile: start on linux host info instrument
This instrument is meant to gather information about the host that we will
need as part of the capture to decode things properly.
2023-05-27 10:33:45 -07:00
80bc9ac370 libsysprof-profile: fix declaration alignment 2023-05-26 23:04:22 -07:00
62071ff56f libsysprof-profile: bridge ring data to capture file 2023-05-26 17:07:26 -07:00
7c98f782c0 libsysprof-profile: add getter for capture writer 2023-05-26 17:07:16 -07:00
e4ec04812d libsysprof-profile: bring over mapped ring buffer source 2023-05-26 16:48:26 -07:00
38dbf0dc95 build: add mapped_ring_buffer_sources for inclusion
We use this in various places but it relies on some static API in the
libsysprof-capture. Make it available to the other libraries.
2023-05-26 16:46:44 -07:00
55353aa185 libsysprof-profile: add record vfunc scaffolding
We still need to create the ring buffer and the source to stream it into
the capture writer, but that will come soon.
2023-05-26 16:32:17 -07:00
8409022c5c libsysprof-profile: add record step to recording/instruments 2023-05-26 16:05:48 -07:00
4d54aa6a51 libsysprof-profile: add SysprofInstrument record vfunc 2023-05-26 16:05:30 -07:00
1e3ad3982d libsysprof-profile: implement prepare vfunc
This doesn't start reading from the input stream, but does get things into
place until we actually start processing the recording. When we get a
record vfunc, we will do the input processing.
2023-05-26 15:41:58 -07:00
800c32e303 libsysprof-profile: add private API to get recording spawnable
This will still need to be set by the profiler eventually, but this gets
the readback API in place so we can use it from instruments.
2023-05-26 15:37:39 -07:00
9494b403f4 libsysprof-profile: add SysprofSpawnable
This comes from libsysprof, but the goal here is to remove that library
after getting this one into shape. So C&P is fine for now.
2023-05-26 15:37:02 -07:00
b4e6f7c915 libsysprof-profile: add recording session fiber
Setup instrument policy, preparation, etc.
2023-05-26 15:05:29 -07:00
fac12d657a libsysprof-profile: implement polkit checking with libdex
Also, I no longer wish to try to maintain support for no-polkit. If there
is truly a system where that is something we want to support, we can bring
back the shims as a compile time alternative.
2023-05-26 13:48:16 -07:00
d1bcf93922 build: add libdex-1 requirement for libsysprof-profile
Being able to manage asynchronous operations with libdex will drastically
simplify how we implement the profiler and instruments. We may eventually
do the same with libsysprof-analyze to parallelize some operations.
2023-05-26 12:21:36 -07:00
11aa39f151 libsysprof-profile: add scaffolding for controlfd source
This is internal to the profile and will always be active when running
subprocesses with Sysprof.
2023-05-26 12:18:59 -07:00
97128b4185 libsysprof-profile: transfer instrument ownership 2023-05-26 12:18:26 -07:00
731841a523 libsysprof-profile: wait for recording and seutp ctrl+c 2023-05-25 17:25:13 -07:00
ce4a4200f8 libsysprof-profile: create recording and start it 2023-05-25 17:24:54 -07:00
07dc728bfe libsysprof-profile: change state on stop
We will need some more checks in here later on once we're doing things
with the instruments, but this gets the job done for now.
2023-05-25 17:24:33 -07:00
7fb77ee01d libsysprof-profile: create writer and test record 2023-05-25 17:17:25 -07:00