From f204f22bf6aa224ca086e864864b21a4d95706b7 Mon Sep 17 00:00:00 2001 From: BraydonKains Date: Sun, 16 Feb 2025 09:01:26 -0500 Subject: [PATCH] add Talks page --- content/blog/dynamic-linking-madness.md | 6 +- content/talks.md | 82 +++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 content/talks.md diff --git a/content/blog/dynamic-linking-madness.md b/content/blog/dynamic-linking-madness.md index a5f2013..8d480af 100644 --- a/content/blog/dynamic-linking-madness.md +++ b/content/blog/dynamic-linking-madness.md @@ -193,7 +193,7 @@ That explains how we're getting program counter `0x0`! ### The Solution While I spent a considerable amount of time experimenting and looking through `go tool linker` and `cgo` source code to try and understand what was going on, and I did learn a lot, I ended up finding the problem with a good old fashioned `git bisect`. I ended up at commit [1f29f39](https://github.com/golang/go/commit/1f29f39795e736238200840c368c4e0c6edbfbae). -The message of that commit: `cmd/link: don't export all symbols for ELF external linking` +The message of that commit: `cmd/link: don't export all symbols for ELF external linking` The problematic code change was from this: ```go // Force global symbols to be exported for dlopen, etc. @@ -214,9 +214,9 @@ if ctxt.IsELF { } } ``` -What does this mean? The code used to always pass the `-rdynamic` flag to `gcc`, which passes `--export-dynamic` to `ld` under the hood. The change for the code changed to only pass `-rdynamic` to `gcc` if the particular linker flag is not supported. The justification for this is in [this issue](https://github.com/golang/go/issues/53579) (TL;DR because this is unnecessary in most cases it wastes space on a majority of binaries). While it's hard to know exactly when the `--export-dynamic-symbol` flag was added to `ld`, but it seems like the only plausible reason that this issue only occurs on an `ld` version that is high enough. +What does this mean? The code used to always pass the `-rdynamic` flag to `gcc`, which passes `--export-dynamic` to `ld` under the hood. The change for the code changed to only pass `-rdynamic` to `gcc` if the particular linker flag is not supported. The justification for this is in [this issue](https://github.com/golang/go/issues/53579) (TL;DR it's because this is unnecessary in most cases and thus wastes space on a majority of binaries). While it's hard to know exactly when the `--export-dynamic-symbol` flag was added to `ld`, it seems like the only plausible reason that this issue only occurs on an `ld` version that is high enough. -Since `-rdynamic` is now not always being passed in the CGO build process, the change I ended up on was to modify the binding generation in `go-nvml` to [always pass the `--export-dynamic` linker flag](https://github.com/NVIDIA/go-nvml/pull/79). This doesn't break if the `-rdynamic` flag is passed, but ensures that we still have the required `ld` flag being passed in newer versions of Go. +Since `-rdynamic` is now not always being passed in the CGO build process, the change I ended up on was to modify the binding generation in `go-nvml` to [always pass the `--export-dynamic` linker flag](https://github.com/NVIDIA/go-nvml/pull/79). This doesn't break if the `-rdynamic` flag is passed, but ensures that we still have the required `ld` flag being passed in newer versions of Go and `ld`. ## Conclusion diff --git a/content/talks.md b/content/talks.md new file mode 100644 index 0000000..8d30bfe --- /dev/null +++ b/content/talks.md @@ -0,0 +1,82 @@ ++++ +title = "Talks" +menu = "main" ++++ + +This is a collection of public recorded talks I've done. + +# Prepared Talks + +## Deep Dive: How Fluent Bit Collects File Logs + +https://www.youtube.com/watch?v=KrlvWBCGagI + +This is my talk for Observability Day North America, a co-located event with KubeCon NA 2024. It was a lightning talk, but it ended up being a really dense talk and probably could have been full-sized. To compensate, I talked really fast! + +T-shirt: Iron Maiden + +## Tuning OTel Collector Performance Through Profiling + +https://www.youtube.com/watch?v=qMxxjB4meXo + +This was a talk for OpenTelemetry Community Day 2024. It goes through my experience profiling parts of the OpenTelemetry Collector to find performance improvements. + +Retractions: One of the solutions I talked about in this talk for Windows getting Parent Process ID had a flawed premise, ignoring the fact that the increase in WMI memory usage did offset the gains made in the Collector. So it ended up not being that big of a win, and we're still working to find another alternate method for getting Parent Process ID. + +T-shirt: Brook from One Piece Wanted Poster + +## How Much Overhead: How to Evaluate Observability Agent Performance + +https://www.youtube.com/watch?v=BIaftvtFPHg + +This is my talk for Observability Day 2023, a co-located event with KubeCon NA 2023. It was inspired by situations at work where people would ask things like "which agent has less overhead?" without fully qualifying their goals. I wanted to break down the problem down into more actionable pieces. + +T-shirt: Meshuggah Catch-33 + +## Learning To Fly: How to Find Bottlenecks in your Agents + +https://www.youtube.com/watch?v=jf7t1CpoKlg&t=176s + +This was a remote talk I did for the [Is It Observable](https://www.youtube.com/@isitobservable) YouTube channel (awesome channel, highly recommend subscribing). This was perhaps the hardest I ever prepared for a talk, because it came with an in-depth [reproducible demo](https://github.com/braydonk/learning-to-fly-lightning-talk), that ran in a Dockerfile and included code to graph OpenTelemetry Metrics directly in the CLI. It was a lot of fun to prepare and I think it's one of my best talks. If you can get around the fact that my mic sounded TERRIBLE). + +T-shirt: Zoro from One Piece + +Background friend: A plush of the character Acrid from my favourite video game, Risk of Rain 2 + +# Tutorials + +## 5 Levels of Go Error Handling + +https://www.youtube.com/watch?v=y5utZCeHys0&t=1s + +This was my one attempt at "content creation". It's a relatively beginner-focused tutorial about Go error handling and how to do some more advanced things. The video was picked up by the algorithm this past summer and started getting a lot more attention. I'm not completely cutting myself off from making more videos in the future, but I did not have as much fun as I thought I would making this video so I'm not sure if I'll make more. I think this tutorial is pretty good for what it is though and I'll keep it around anyway! + +T-shirt: It's obscured! + +Background friend: Acrid from Risk of Rain 2 again + +# Interviews + +## KubeCon NA 2024 with Is It Observable + +https://www.youtube.com/watch?v=qf0OjAEzprs&t=365s + +This was an interview with the [Is It Observable](https://www.youtube.com/@isitobservable) YouTube channel. I talked a bit about the talk I was giving the next day at Observability Day, as well as some general best practices for managing performance of agents collecting logs. + +T-shirt: Coheed and Cambria, Vaxis II tour shirt + +## Humans of OTel - KubeCon NA 2024 + +https://www.youtube.com/watch?v=TIMgKXCeiyQ + +I was featured in the Humans of OTel series of interviews at KubeCon NA 2024, along with a lot of amazing peers from the OpenTelemetry Community! + +T-shirt: Video filmed too high to tell! + +## KubeCon NA 2023 with Is It Observable + +https://www.youtube.com/watch?v=5arixRhAIbs&t=161s + +An interview with [Is It Observable](https://www.youtube.com/@isitobservable) from KubeCon NA 2023. This was my first time doing something like this so I was definitely more nervous, but it was great practice! + +T-shirt: Meshuggah Catch 33