661 karma · joined August 21, 2017
Apart from that, the usual qualms one might have about C are not really relevant in eBPF land, so I’ve actually found it the nicest experience writing C I’ve ever had, the verifier is just the price we have to pay.
Overhead ultimately depends on the frequency, it defaults to 19hz per core, at which it’s less than 1%, which is tried and tested with all sorts of super heavy python, JVM, rust, etc. workloads. Since it’s per core it tends to be plenty of stacks to build statistical significance quickly. The profiler is essentially a thread-per-core model, which certainly helps for perf.
The offset approach has evolved a bit, it’s mixed with some disassembling today, with that combination it’s rock solid. It is dependent on the engine, and in the case of python only support cpython today.
1) native unwinding: https://www.polarsignals.com/blog/posts/2022/11/29/dwarf-bas...
2) python: https://www.polarsignals.com/blog/posts/2023/10/04/profiling...
Both available as part of the Parca open source project.
(Disclaimer I work on Parca and am the founder of Polar Signals)
[1] https://www.polarsignals.com/
(Disclaimer: founder of polar signals)
I agree that neither of these are terribly complicated features, but as far as I know no other product on the market actually has this combination. (yes, you can export data from most systems and use a different visualization tool but the point of products is to provide a single integrated package)
(disclaimer: Founder of the company that offers the product featured in this case study.)
(disclaimer: I'm the founder of the product showcased in this case study.)
You can capture memory or CPU metrics with top as well, and that's useful, but it's not the same thing as a full-blown metrics system eg. Prometheus.
If you're looking to optimize your project I would recommend using a profiler rather than metrics that just tell you the total.
(disclaimer: I'm the founder of the company that offers the product shown in the blog post, but I also happen to be a Prometheus maintainer)
However, we wouldn’t be against adding a mode like this!
FWIW both the server and the agent are single statically linked binaries so while it’s a bit more set up it’s not terribly difficult either[1].
Quick summary: this post dives into the gory details of how we implemented an eBPF based profiler for LuaJIT.
Let us know if you have any questions on this, we’ll keep an eye out on comments!
We missed this being submitted yesterday, so let us know if you have any questions, we'll be sure to watch this thread!
One more thing I'd recommend doing before going to a notary though is get a "Vorabstellungnahme" from IHK to ensure that they won't reject your company name which would create delays and additional notary cost. It costs some money, but is worth ensuring it doesn't cause chaos afterwards.
1. Get "Vorabstellungnahme" from IHK, takes a few hours.
2. E-mail notary (yes I've worked with them a couple times, that might speed up their response time), get pre-fab founding docs within a few hours, appointment next day. Digital version of the founding docs will be available within a few hours.
3. Create account with Qonto or something equivalent, there's an explicit configuration for your notary email, so they will take care of providing proof of the starting capital.
4. Transfer starting capital.
5. Notary hands in Handelsregisteranmeldung, sends you a copy and upload it to your bank.
In practice, I find the founding process not complicated, but the day-to-day operation, bookkeeping, taxes, etc. way more painful.
Founding a GmbH wholly owned by a Delaware C-Corp, however, is intensely painful, practically no bank wants to work with you, and notaries aren't enough, you need to work with apostilles (international notaries). I highly recommend working with a law firm to set this up correctly but expect easily upwards of $10k between lawyer, apostille, and bank account costs.
I guess this is feedback to maintainers of the project to clarify these two relationships.
This is solvable as Brendan calls out, we’ve created an eBPF-based profiler at Polar Signals, that essentially does what you said, it optimized the unwind tables, caches them in bpf maps, and then synchronously unwinds as opposed to copying the whole stack into user-space.
I would highly recommend anyone troubleshooting something like this to do continuous profiling and the root cause of this type of problem becomes painfully obvious within seconds.
(Disclaimer I founded a company in this space, and we recently open sources a library for rust to do this: https://www.polarsignals.com/blog/posts/2023/12/20/rust-memo...)