-
Notifications
You must be signed in to change notification settings - Fork 37.8k
build: add systemtap's sys/sdt.h as depends for GUIX builds with USDT tracepoints #23724
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Additional information that may be relevant for reviewers:
I've tested the GUIX binaries on
¹ bpftrace isn't available on Ubuntu 21.10 for @DrahtBot !request_GUIX_build |
Big concept ACK |
The following sections might be updated with supplementary metadata relevant to reviewers and maintainers. ConflictsReviewers, this pull request conflicts with the following ones:
If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first. |
As I have a running RV64 system (SiFive Unmatched) I can give it a try on |
Concept ACK, will test soon |
Thanks @laanwj! That would be awesome!
Yes. By syncing signet I just wanted to make sure nothing is horribly broken on that arch (I see no reason why it should be). Running the tests suits should work as well. I ran the |
We'll be discussing this PR in the BItcoin Core PR review club this Wednesday at 17:00 UTC: https://bitcoincore.reviews/23724 |
Tested on riscv64-linux-gnu:
No bcc or bpftrace packages exist for RISC-V debian, so I had to build them from source (against clang13). Bcc builds successfully (including python module), unfortunately, bpftrace doesn't support riscv64 at the moment:
Trying to run the python scripts runs into parse errors:
So I think this is a no-go for now. |
Thanks @laanwj!! I've updated the table in #23724 (comment). From the parse error it seems like bcc isn't able to parse the register names in the systemtap ELF notes in
I haven't tested the tracepoints with the Systemtap tools at all. Maybe this can be used on |
I've also checked that this check fails for I've update the table in #23724 (comment). |
Thanks, I'll look into that patch. Edit: I am running the version from git, so should have that merged PR already, so unfortunately it doesn't fix it.
It depends, if compiler support is working, and it's purely an issue with the tooling ( Or maybe we can through gdb? E.g. put a breakpoint at a tracepoint and then inspect the arguments manually. Edit: I checked
There is no general behavior: the base class is a pure virtual base class. So while I haven't checked which one it's instantiating for Edit.2: On unsupported architectures, you get the #ifdef __aarch64__
ArgumentParser_aarch64 parser(arg_fmt);
#elif __powerpc64__
ArgumentParser_powerpc64 parser(arg_fmt);
#elif __s390x__
ArgumentParser_s390x parser(arg_fmt);
#else
ArgumentParser_x64 parser(arg_fmt);
#endif |
Concept ACK, running the guix build |
Testing on Ubuntu 18, was getting segfaults for
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Concept ACK on adding tracepoints to the release builds, assuming there is 0 overhead for users who don't care about them. I think they should only be use for Linux for now. macOS support isn't as straightforward as Linux, and it's not clear to me if these are even a thing on Windows.
Guix build:
bash-5.1# find guix-build-$(git rev-parse --short=12 HEAD)/output/ -type f -print0 | env LC_ALL=C sort -z | xargs -r0 sha256sum
34bbefa86359e60b815552bb61d5e947eb6eaff5ab942b0415c9cdc0dad187b6 guix-build-070570806404/output/aarch64-linux-gnu/SHA256SUMS.part
48d6dcde292965cf81aa52d6f55c45e5b73281b863382c1f0aeae23ab4c10394 guix-build-070570806404/output/aarch64-linux-gnu/bitcoin-070570806404-aarch64-linux-gnu-debug.tar.gz
c72b18b090fc72d7fbf50bb41d6289ec71d234513102a96ecfaa8aa6003f7855 guix-build-070570806404/output/aarch64-linux-gnu/bitcoin-070570806404-aarch64-linux-gnu.tar.gz
c98a0b60b26fae5cf8b57212a70a160c8e9f8fc1756039bcaabeb833e921a414 guix-build-070570806404/output/arm-linux-gnueabihf/SHA256SUMS.part
cbddd5bdcbc9eebab5aafdf3267c89badc1d3acf19f8e9cb1fb0dba5a83a86c9 guix-build-070570806404/output/arm-linux-gnueabihf/bitcoin-070570806404-arm-linux-gnueabihf-debug.tar.gz
b465dffd7149f9f02c9255a0a5befec005c0b552bddbee40fbddfd2b0ca9d4e6 guix-build-070570806404/output/arm-linux-gnueabihf/bitcoin-070570806404-arm-linux-gnueabihf.tar.gz
e7a68186bf3d37e2c2134ae11a465f21f0b9d5d3233380e85bfd5c9eda043992 guix-build-070570806404/output/dist-archive/bitcoin-070570806404.tar.gz
17b0190a61345c7b6c7fd058bdf13ec9f50bab6eb4c0302c131a9b07a5c4433a guix-build-070570806404/output/powerpc64-linux-gnu/SHA256SUMS.part
9d2c24eddceb5a88caa8372dfd1c306bde0266edaa01aa101da4dcd089ce9d41 guix-build-070570806404/output/powerpc64-linux-gnu/bitcoin-070570806404-powerpc64-linux-gnu-debug.tar.gz
cf0d5cd27c514b639eb22e577863a0ecf8bd45336522936eabfc9fa3963bab65 guix-build-070570806404/output/powerpc64-linux-gnu/bitcoin-070570806404-powerpc64-linux-gnu.tar.gz
af2930854be42d18f52787091fe4b796995b2cadec27a11262bbf5bcc284a869 guix-build-070570806404/output/powerpc64le-linux-gnu/SHA256SUMS.part
5b307c9cf5032ded0c11586f0533ce404dda93f7edc136260f5e4fdeeabd5442 guix-build-070570806404/output/powerpc64le-linux-gnu/bitcoin-070570806404-powerpc64le-linux-gnu-debug.tar.gz
6fe051d7b241b3c3d57f4c4ad40290b79eb4561d2abd4af110d1caefb5d0e3d3 guix-build-070570806404/output/powerpc64le-linux-gnu/bitcoin-070570806404-powerpc64le-linux-gnu.tar.gz
4b1c765f7a0c0110f51eb2ea80f974c0803654440f4dd22f5b5dee69f4429e89 guix-build-070570806404/output/riscv64-linux-gnu/SHA256SUMS.part
65454fe4048692e9eec35d06b6809a6f28fef9dbb9b1fc6eed734f6077c260ef guix-build-070570806404/output/riscv64-linux-gnu/bitcoin-070570806404-riscv64-linux-gnu-debug.tar.gz
87c08928fd01eed62b4d68a1309cbb8c0943a655b169451cfb97e4911532270a guix-build-070570806404/output/riscv64-linux-gnu/bitcoin-070570806404-riscv64-linux-gnu.tar.gz
05a3dd5516e4fc744b07d3342bc385ad0197ea5e7028783e6b156fddf0defebc guix-build-070570806404/output/x86_64-apple-darwin/SHA256SUMS.part
5683bec557166c36d44dfccdf7c627952bde300a4a35ec4f63197513bffc0b9e guix-build-070570806404/output/x86_64-apple-darwin/bitcoin-070570806404-osx-unsigned.dmg
6cb290ddf4e2b15404a2da9af160523c72d74e428ccc367e73c8ccbf111a0fe0 guix-build-070570806404/output/x86_64-apple-darwin/bitcoin-070570806404-osx-unsigned.tar.gz
5a7d3ad1643789dcda1329440238d236bf497599ba423ca686ab08fd63149c62 guix-build-070570806404/output/x86_64-apple-darwin/bitcoin-070570806404-osx64.tar.gz
b03af7a9654d852a3d65e0c4968dd6ebcc16587f10ac4c6bc59d6ee1ae9763b0 guix-build-070570806404/output/x86_64-linux-gnu/SHA256SUMS.part
fe9ecd853fa7bbe9d9896bf4b66c451eb47aa6b11d37643d52ea529e44007b3c guix-build-070570806404/output/x86_64-linux-gnu/bitcoin-070570806404-x86_64-linux-gnu-debug.tar.gz
3bbf38305cfff63765f39675cea5e27c2dc3590ec6f54e07e18372e8953468c8 guix-build-070570806404/output/x86_64-linux-gnu/bitcoin-070570806404-x86_64-linux-gnu.tar.gz
7959f8df5702f5d68a57acdbd8b51c49fe9adc2c2a85fec0d8f10e3b9c78b7a9 guix-build-070570806404/output/x86_64-w64-mingw32/SHA256SUMS.part
28a7a7d8253f07d4109a33e5d7eb8725be50d6255ab42fc398b239b655efc463 guix-build-070570806404/output/x86_64-w64-mingw32/bitcoin-070570806404-win-unsigned.tar.gz
805150f60152a39220f7c8c4ce0f2bd3950d03c0c9320ff931b3ba1e807f8be7 guix-build-070570806404/output/x86_64-w64-mingw32/bitcoin-070570806404-win64-debug.zip
72b5edabde57d23dde1be60fbc95b3c35df0788bab11583002233c39953500f4 guix-build-070570806404/output/x86_64-w64-mingw32/bitcoin-070570806404-win64-setup-unsigned.exe
95d631b9bf70c45374f1a756257ef676ceec8553906a2876cd3e2c004d6e3a39 guix-build-070570806404/output/x86_64-w64-mingw32/bitcoin-070570806404-win64.zip
depends/patches/systemtap/remove_SDT_ASM_SECTION_AUTOGROUP_SUPPORT_check.patch
Show resolved
Hide resolved
0705708
to
c1df11e
Compare
Thanks for your comments @fanquake. I've addressed them in my last push.
This isn't the case. There is bit of overhead, even if it's only slightly more than zero overhead. When we compile a binary without tracepoints, the arguments (e.g. function calls) passed to the In terms of overhead:
As an example, I'm looking at the bitcoin/src/net_processing.cpp Lines 4141 to 4152 in 767c012
To count the number of executed instructions I'm using To automate this process you can use the following gdb script: b net_processing.cpp:4141
commands 1
record btrace
continue
end
b net_processing.cpp:4152
commands 2
info record
record stop
continue
end
run $ gdb --batch --command=net_inboundmsg_ins.gdb --args bitcoind -debug=net | grep -e 'received\:\|instructions in' This interlaces bitcoind's net logging for received messages with the number of instructions being executed. Here is the output it produced for me on Binary with tracepoints(I'm not sure why the first record includes 469 instructions.)
Binary without tracepoints
When using the binary with tracepoints, ~274 more instructions are executed between the two breakpoints compared to the binary without breakpoints. That's why, when adding tracepoints, we don't do expensive computations only needed for the tracepoints and only use data that's already present. I do think 274 additional instructions (for this tracepoint) isn't a substantial price to pay and is close to zero overhead. I haven't done these measurements for the other tracepoints though (probably makes sense to to them). |
@0xB10C why does the one with tracepoints say |
@jb55 If If On that note and if we think e.g. ~274 instructions are still too much: We might be able branch before we execute the tracepoint arguments based on e.g. a if (gArgs.GetBoolArg("-tracing", false)) {
TRACE6(..)
} (or put this check in the macros too) |
I guess I'm surprised that those calls that simply return pointers aren't inlined, but I'm guessing that's because of some vtable indirection or something. It looks like |
before:
after with this patch: diff --git a/src/net.h b/src/net.h
index 9623a630e7..6f99d56661 100644
--- a/src/net.h
+++ b/src/net.h
@@ -660,6 +660,8 @@ public:
std::string ConnectionTypeAsString() const { return ::ConnectionTypeAsString(m_conn_type); }
+ ConnectionType GetConnectionType() const { return m_conn_type; }
+
/** A ping-pong round trip has completed successfully. Update latest and minimum ping times. */
void PongReceived(std::chrono::microseconds ping_time) {
m_last_ping_time = ping_time;
diff --git a/src/net_processing.cpp b/src/net_processing.cpp
index d67ced99ea..6f8209d21c 100644
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -4146,7 +4146,7 @@ bool PeerManagerImpl::ProcessMessages(CNode* pfrom, std::atomic<bool>& interrupt
TRACE6(net, inbound_message,
pfrom->GetId(),
pfrom->m_addr_name.c_str(),
- pfrom->ConnectionTypeAsString().c_str(),
+ pfrom->GetConnectionType(),
msg.m_command.c_str(),
msg.m_recv.size(),
msg.m_recv.data() the number of instructions becomes trivial:
I wasn't able to do this same test on my AMD because gdb doesn't support branch tracing on AMDs apparently :( |
@jb55 Oh wouldn't have thought that
However, I think as soon as the ConnectionType enum is changed, the tracing scripts might break/will confuse the connection types and the tracepoint documentation will be outdated. Additionally, we might want to cast here as we implicitly convert a scoped enum to an int (?). Diving deeper into this here is probably a bit off-topic, but I think it shows that we might want to iterate before having the tracepoints enabled in a release. GUIX build hashes for c1df11e:
At first I wondered why these changed from #23724 (review), but I remembered that I did rebase before pushing. My hashes for 0705708 matched with fanquake's. |
In the net:inbound_message tracepoint, we are calling the ConnectionTypeAsString helper function that converts the enum to a string. This has been shown to generate quite a few instructions, even when there is no code hooked into the tracepoint. Here's the output from gdb when tracing the number of instructions between two breakpoints around this tracepoint (see [1] for how to do this): Recorded 293 instructions in 27 functions Tracepoints should be almost zero cost, 293 instructions is a bit much for effectively doing nothing most of the time. Instead of calling the ConnectionTypeAsString function, simply add a ConnectionType getter that returns the connection type enum directly. This way the tracepoint simplifies to nine instructions that load values into registers in preparation for a tracepoint call, which may or may not be there depending on if there are any attached ebpf programs. With this patch applied: Recorded 9 instructions in 1 functions Signed-off-by: William Casarin <jb55@jb55.com> [1] bitcoin#23724 (comment)
In the net:{inbound,outbound}_message tracepoint, we are calling the ConnectionTypeAsString helper function that converts the enum to a string. This has been shown to generate quite a few instructions, even when there is no code hooked into the tracepoint. Here's the output from gdb when tracing the number of instructions between two breakpoints around this tracepoint (see [1] for how to do this): Recorded 293 instructions in 27 functions Tracepoints should be almost zero cost, 293 instructions is a bit much for effectively doing nothing most of the time. Instead of calling the ConnectionTypeAsString function, simply add a ConnectionType getter that returns the connection type enum directly. This way the tracepoint simplifies to nine instructions that load values into registers in preparation for a tracepoint call, which may or may not be there depending on if there are any attached ebpf programs. With this patch applied: Recorded 9 instructions in 1 functions Signed-off-by: William Casarin <jb55@jb55.com> [1] bitcoin#23724 (comment)
In the net:{inbound,outbound}_message tracepoint, we are calling the ConnectionTypeAsString helper function that converts the enum to a string. This has been shown to generate quite a few instructions, even when there is no code hooked into the tracepoint. Here's the output from gdb when tracing the number of instructions between two breakpoints around this tracepoint (see [1] for how to do this): Recorded 293 instructions in 27 functions Tracepoints should be almost zero cost, 293 instructions is a bit much for effectively doing nothing most of the time. Instead of calling the ConnectionTypeAsString function, simply add a ConnectionType getter that returns the connection type enum directly. This way the tracepoint simplifies to nine instructions that load values into registers in preparation for a tracepoint call, which may or may not be there depending on if there are any attached ebpf programs. With this patch applied: Recorded 9 instructions in 1 functions This tightens up these tracepoints in preparation for enabling tracing in release builds[2]. Signed-off-by: William Casarin <jb55@jb55.com> [1] bitcoin#23724 (comment) [2] bitcoin#23724
All these issues should be solved by #23809 |
In the net:{inbound,outbound}_message tracepoint, we are calling the ConnectionTypeAsString helper function that converts the enum to a string. This has been shown to generate quite a few instructions, even when there is no code hooked into the tracepoint. Here's the output from gdb when tracing the number of instructions between two breakpoints around this tracepoint (see [1] for how to do this): Recorded 293 instructions in 27 functions Tracepoints should be almost zero cost, 293 instructions is a bit much for effectively doing nothing most of the time. Instead of calling the ConnectionTypeAsString function, simply add a ConnectionType getter that returns the connection type enum directly. This way the tracepoint simplifies to nine instructions that load values into registers in preparation for a tracepoint call, which may or may not be there depending on if there are any attached ebpf programs. With this patch applied: Recorded 9 instructions in 1 functions This tightens up these tracepoints in preparation for enabling tracing in release builds[2]. Signed-off-by: William Casarin <jb55@jb55.com> [1] bitcoin#23724 (comment) [2] bitcoin#23724
- pfrom->ConnectionTypeAsString().c_str(),
+ pfrom->GetConnectionType(), This keeps coming back: please don't pass strings that are generated on the fly to tracepoints. We should add a rule about this. |
I've checked the The Lines 2160 to 2167 in cb27d60
For the Lines 2328 to 2334 in cb27d60
|
On Sat, Dec 18, 2021 at 03:19:07AM -0800, W. J. van der Laan wrote:
```diff
- pfrom->ConnectionTypeAsString().c_str(),
+ pfrom->GetConnectionType(),
```
This keeps coming back: please don't pass strings that are generated on
the fly to tracepoints. We should add a rule about this.
To be fair in this case it's not really generated, the switch returns
static strings, but it does take a surprising amount of instructions for
what should be a simple lookup in a switch jump table. Perhaps the
switch was not big enough for g++ to optimize it into a jump table,
instead opting for a chain of conditional checks. 100+ still is a lot,
I'll look into prematurely optimizing the other tracepoints as well,
especially the one that is taking 8000 instructions (wtf?)
|
I'm fairly sure the way c++ strings work, even though it returns static strings, it still does an allocation and copy (from the C string in .rodata) every time (then deallocating it again afterwards). It's possible I'm wrong and modern compilers are smart enough to avoid it (can it see through
In any case I'm happy that we have a way to measure and quantify the number of instructions generated by a tracepoint now! |
I'm fairly sure the way c++ strings work, even though it returns static strings, it still does an allocation and copy every time.
yes you may be right due to the number of instructions here. I was hoping the compiler would be smarter about this...
|
On Sat, Dec 18, 2021 at 07:10:24AM -0800, 0xB10C wrote:
The `validation:block_connected` tracepoint also seems to be more on the expensive side with "Recorded 8229 instructions in 80 functions". This includes, e.g. calculating the hash of the block and `GetTimeMicros()`. I'd argue that this is however still inexpensive compared to the total cost of validating a block.
Some data:
```
instrs delta description
8276 0 baseline
8167 -109 no micros
53 -8114 no GetHash()
```
It looks like GetHash is the culprit here.
I'll spend some time today looking at alternate solutions.
|
This change is looking good now. I don't think it necessarily has to wait for #23809 or #23819 to be merged first, but we'd want those (and any other changes that reduce tracepoint overheads) merged for 23.0. If you'd like to have reviewers perform a Guix build of this PR, I'd suggest rebasing on master, so we don't have to worry about mismatches from a recent determinism issue in Qt. |
The sys/sdt.h header is required to build Bitcoin Core with Userspace Statically Defined Tracing support. Systemtap version 4.5 (May 2021) is used as the most recent version 4.6 (Nov 2021) fails to build. See e.g. https://sourceware.org/git/?p=systemtap.git;a=commit;h=1d3653936fc1fd13135a723a27e6c7e959793ad0 As Systemtap itself is not needed, the build steps (configure and make) are skipped. We require fewer build dependecies and don't waste time building depends we don't end up using. However, the configure step would normally processes sys/sdt-config.h.in. The resulting sdt-config.h defines _SDT_ASM_SECTION_AUTOGROUP_SUPPORT (either 0 or 1 to indicate whether the assembler supports "?" in .pushsection directives). For now, we assume all currently used assemblers supports this feature and remove the check from the sys/sdt.h header file in a patch. Co-authored-by: Michael Ford <fanquake@gmail.com>
c1df11e
to
11bb48c
Compare
Thanks, rebased. Agree that we want to have these before 23.0:
|
Could you also integrate this change, fanquake@02dbe04, into your second commit. |
eBPF is a Linux kernel technology used to "extend the capabilities of the kernel without requiring to change kernel source code or load kernel modules". While Userspace, Statically Defined Tracing (USDT) uses eBPF under the hood, --enable-usdt better resembles that support for USDT is enabled, and tracepoints will be included in the binary.
11bb48c
to
6200fbf
Compare
Done, thanks! Running a GUIX build now. |
GUIX builds for 6200fbf:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ACK 6200fbf - tested enabling / disabling and with/without SDT from depends. We can follow up with #23819, #23907 and #23296, and if any serious issues arise before feature freeze, it is easy for us to flip depends such that USDT becomes opt-in, rather than opt-out, and thus, releases would be tracepoint free.
Guix build also matched:
92da8c535d4b1f07c04fb235a6c5806ae46f5abeed9c123785a6be96911dc831 guix-build-6200fbf54fa9/output/aarch64-linux-gnu/SHA256SUMS.part
0dd21a5a9c8d0d8cb3f537359a722d0431d235e37cc4a2d38c1e87f025406f29 guix-build-6200fbf54fa9/output/aarch64-linux-gnu/bitcoin-6200fbf54fa9-aarch64-linux-gnu-debug.tar.gz
8085b6034858d6d59f8223dc06b659549cf05021f057580b24958acba5d3fae7 guix-build-6200fbf54fa9/output/aarch64-linux-gnu/bitcoin-6200fbf54fa9-aarch64-linux-gnu.tar.gz
e8537078c389e1374d49f43e8e52512030089e397d1a667e78df3530de1bf2d9 guix-build-6200fbf54fa9/output/arm-linux-gnueabihf/SHA256SUMS.part
148c1574b8edbd6baeaa77c807f6d3a17159b49193c777978fe99279b42732bd guix-build-6200fbf54fa9/output/arm-linux-gnueabihf/bitcoin-6200fbf54fa9-arm-linux-gnueabihf-debug.tar.gz
4a6b2162c08d986ae4df147f9e50f90c039e7ca62b283da9d7fc4308e0757f00 guix-build-6200fbf54fa9/output/arm-linux-gnueabihf/bitcoin-6200fbf54fa9-arm-linux-gnueabihf.tar.gz
1b150b40541260de2f4f905a68db7b86339d792f404ee4c275a57d5b45f3ce1a guix-build-6200fbf54fa9/output/dist-archive/bitcoin-6200fbf54fa9.tar.gz
1f6f3ec14f6ad98391746cd73c7aabc722ddf66d720c46fbdc9c2aebbb1d0232 guix-build-6200fbf54fa9/output/powerpc64-linux-gnu/SHA256SUMS.part
869cd22a0f1eb6721f8549ca690cec1a1d54bb8305e1f363ce0b6d2a6d654277 guix-build-6200fbf54fa9/output/powerpc64-linux-gnu/bitcoin-6200fbf54fa9-powerpc64-linux-gnu-debug.tar.gz
08288ab32d123dc7872dd9fcc2af24695004da171109eec9ccc9600d8efba8b3 guix-build-6200fbf54fa9/output/powerpc64-linux-gnu/bitcoin-6200fbf54fa9-powerpc64-linux-gnu.tar.gz
5e783d7c7b0ca80e682be432c81ae1758561ec9273f20b521653417ae73e2e9a guix-build-6200fbf54fa9/output/powerpc64le-linux-gnu/SHA256SUMS.part
72daa19fe9a2724f8cb30faedb99feac633c1456d551d81c820a6226b54fb4a8 guix-build-6200fbf54fa9/output/powerpc64le-linux-gnu/bitcoin-6200fbf54fa9-powerpc64le-linux-gnu-debug.tar.gz
721344bd6a6e0a0cbb90c769e949f59449e6a90bc75bc4ade487664d29459685 guix-build-6200fbf54fa9/output/powerpc64le-linux-gnu/bitcoin-6200fbf54fa9-powerpc64le-linux-gnu.tar.gz
2996e463e4296c783a0cf733a84a1e426d2ca393da99f2d42168969402ecca7e guix-build-6200fbf54fa9/output/riscv64-linux-gnu/SHA256SUMS.part
168ddd7ff09980c70002279e391450d80d0e49a4828a6a2647693d386068b6d0 guix-build-6200fbf54fa9/output/riscv64-linux-gnu/bitcoin-6200fbf54fa9-riscv64-linux-gnu-debug.tar.gz
a1adf8450dc4a5ca72b588081c355f9400286bd059664b1d6facb0ef33523b43 guix-build-6200fbf54fa9/output/riscv64-linux-gnu/bitcoin-6200fbf54fa9-riscv64-linux-gnu.tar.gz
78a663bbd7618b47dd84d0a729de55fab758246de4d400827450a3897df78a85 guix-build-6200fbf54fa9/output/x86_64-apple-darwin/SHA256SUMS.part
b7edf07f67492dde52b2b0da1e5e200d6f56ba91168b4e377f0c8f6589eb4358 guix-build-6200fbf54fa9/output/x86_64-apple-darwin/bitcoin-6200fbf54fa9-osx-unsigned.dmg
0f5dfab2ed141bc35f8d19e1c8832399695a122e9339637e40924c5847e05bab guix-build-6200fbf54fa9/output/x86_64-apple-darwin/bitcoin-6200fbf54fa9-osx-unsigned.tar.gz
fe5aa2d9ce7b5f80b5a624b6613c577c8fd4d116bfccde8e0a00bd52e19db57e guix-build-6200fbf54fa9/output/x86_64-apple-darwin/bitcoin-6200fbf54fa9-osx64.tar.gz
abedd8376c4fd0086f1cc699610d2adf926f991ad6fba437bb24949df3ae1320 guix-build-6200fbf54fa9/output/x86_64-linux-gnu/SHA256SUMS.part
52ccacc7e5a035355d253940aa3ea9e478b59178a2fcac2e0217028c0b817e3d guix-build-6200fbf54fa9/output/x86_64-linux-gnu/bitcoin-6200fbf54fa9-x86_64-linux-gnu-debug.tar.gz
446ac535e043fb56164711f42ab78117713a901ce7a46a866b0f4f9da43f9b88 guix-build-6200fbf54fa9/output/x86_64-linux-gnu/bitcoin-6200fbf54fa9-x86_64-linux-gnu.tar.gz
e6a3980492b714430479d7803765294544999b50ef65df37d8648b240dc4bc26 guix-build-6200fbf54fa9/output/x86_64-w64-mingw32/SHA256SUMS.part
9c1c3652170a6217d8bea4b9241e8921f980c86ce85e3389371d5278612fb7c8 guix-build-6200fbf54fa9/output/x86_64-w64-mingw32/bitcoin-6200fbf54fa9-win-unsigned.tar.gz
42bfe4ba6570f8f524f0d6ae45f91cf18ef04e77fa19e0c07abd5ea7ce43b5e6 guix-build-6200fbf54fa9/output/x86_64-w64-mingw32/bitcoin-6200fbf54fa9-win64-debug.zip
225e5de0e161424da9506ba89b63aaaab2b5b7fe535aca3def68bebd1962e297 guix-build-6200fbf54fa9/output/x86_64-w64-mingw32/bitcoin-6200fbf54fa9-win64-setup-unsigned.exe
922cd070d5db7b83d81d9e2fb14248f555bc8dde917dde9b555f0cae9faa6c1c guix-build-6200fbf54fa9/output/x86_64-w64-mingw32/bitcoin-6200fbf54fa9-win64.zip
…GUIX builds with USDT tracepoints 6200fbf build: rename --enable-ebpf to --enable-usdt (0xb10c) e158a2a build: add systemtap's sys/sdt.h as depends (0xb10c) Pull request description: There has been light conceptual agreement on including the Userspace, Statically Defined Tracing tracepoints in Bitcoin Core release builds. This, for example, enables user to hook into production deployments, if they need to. Binaries don't have to be switched out. This is possible because we don't do [expensive computations](https://github.com/bitcoin/bitcoin/blob/master/doc/tracing.md#no-expensive-computations-for-tracepoints) only needed for the tracepoints. The tracepoints are NOPs when not used. Systemtap's `sys/sdt.h` header is required to build Bitcoin Core with USDT support. The header file defines the `DTRACE_PROBE` macros used in [`src/util/trace.h`](https://github.com/bitcoin/bitcoin/blob/master/src/util/trace.h). This PR adds Systemtap 4.5 (May 2021) as dependency. GUIX builds for Linux hosts now include the tracepoints. Closes bitcoin#23297. ACKs for top commit: fanquake: ACK 6200fbf - tested enabling / disabling and with/without SDT from depends. We can follow up with bitcoin#23819, bitcoin#23907 and bitcoin#23296, and if any serious issues arise before feature freeze, it is easy for us to flip depends such that USDT becomes opt-in, rather than opt-out, and thus, releases would be tracepoint free. Tree-SHA512: 0263f44892bf8450e8a593e4de7a498243687f8d81269e1c3283fa8354922c7cf93fddef4b92cf5192d33798424aa5812e03e68ef8de31af078a32dd34021382
There has been light conceptual agreement on including the Userspace, Statically Defined Tracing tracepoints in Bitcoin Core release builds. This, for example, enables user to hook into production deployments, if they need to. Binaries don't have to be switched out. This is possible because we don't do expensive computations only needed for the tracepoints. The tracepoints are NOPs when not used.
Systemtap's
sys/sdt.h
header is required to build Bitcoin Core with USDT support. The header file defines theDTRACE_PROBE
macros used insrc/util/trace.h
. This PR adds Systemtap 4.5 (May 2021) as dependency. GUIX builds for Linux hosts now include the tracepoints.Closes #23297.