Commit Graph

13 Commits

Author SHA1 Message Date
c5ba20caeb build: allow using a host-installed sysprofd
In case we are building in a flatpak, we might want to rely on a system
installed sysprofd. This means we might want to pretend we have sysprofd
support (to be found on the system), but not actually build sysprofd.
2016-09-15 13:45:02 -07:00
f313ca4dae lib: Add full barrier before writing data_tail
The kernel says here http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/kernel/events/ring_buffer.c?id=7a1dcf6ad#n61 :

	 * Since the mmap() consumer (userspace) can run on a different CPU:
	 *
	 *   kernel				user
	 *
	 *   if (LOAD ->data_tail) {		LOAD ->data_head
	 *			(A)		smp_rmb()	(C)
	 *	STORE $data			LOAD $data
	 *	smp_wmb()	(B)		smp_mb()	(D)
	 *	STORE ->data_head		STORE ->data_tail
	 *   }
	 *
	 * Where A pairs with D, and B pairs with C.
	 *
	 * In our case (A) is a control dependency that separates the load of
	 * the ->data_tail and the stores of $data. In case ->data_tail
	 * indicates there is no room in the buffer to store $data we do not.
	 *
	 * D needs to be a full barrier since it separates the data READ
	 * from the tail WRITE.
	 *
	 * For B a WMB is sufficient since it separates two WRITEs, and for C
	 * an RMB is sufficient since it separates two READs.
	 *
	 * See perf_output_begin().

So I'm pretty sure we need a full barrier before writing out data_tail.
2016-08-23 16:53:39 -04:00
1b89cc58cf lib: use stdatomic.h for memory barriers
C11 gives us APIs for fencing logic.  Use that instead of a
a long, per-architecture, hand curated list of definitions.
2016-08-23 16:52:29 -04:00
afadd90834 perf: ping the sysprofd service before we consider it up
This should help catch failures where the peer is not yet up and might
fail to start, before we actually block on communicating with it.
2016-04-24 17:49:03 -07:00
a594d06b0c perf: let the compiler know our cast is alignment-safe
We know everything is 64-bit aligned, so casting via (void*) squashes
the compiler warning.
2016-04-18 18:52:20 -07:00
f5904bc493 perf: fix typo
Typo when polkit/sysprofd is unavailable to pre-authorize the request.
2016-04-16 17:14:42 -07:00
4479c56135 perf: polkit is optional for the library
So changing this was a little backwards. The goal here is to allow using
libsysprof-2 without polkit, it just won't have the ability to elevate
privileges.
2016-04-16 17:13:56 -07:00
74d88245c5 perf: use #ifdef not #if
This is conditionally added to CFLAGS, so make sure we use #ifdef instead
of #if.
2016-04-16 17:08:38 -07:00
9f8f33b210 perf: use #ifdef, not #if
config.h does not unconditionally define these, they are not defined when
inactive.
2016-04-16 16:56:41 -07:00
06aaff90e5 perf: optionally enable clockid and use_clockid
Some kernels to not have this feature yet, so check for support in
linux/perf_event.h and optionally enable the struct field.
2016-04-16 16:07:11 -07:00
609ee997da perf-counter: pass sample_id_all to sysprofd 2016-04-15 04:51:23 -07:00
a7982ad1e8 perf: delay source start until polkit has authorized
Without this, after logging in you are already multiple seconds into your
profiling session recording. Not ideal. So instead, we do the async polkit
auth upfront during SpSource::prepare(), and then toggle ready after we
have received notification.
2016-04-14 04:36:18 -07:00
29c4ec495f Land Sysprof 2.x
This is a major redesign a modernization of Sysprof. The core data
structures and design are largely the same, but it has been ported to
Gtk3 and has lots of additions that should make your profiling experience
smoother. Especially for those that are new to profiling.

There are some very simple help docs added, but we really need the
experts to come in and write some documentation here.
2016-04-13 05:24:03 -07:00