Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
[GopherCon 2026] Inside Out: Observing Go from...
Search
Donia Chaiehloudj
August 07, 2026
Technology
36
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[GopherCon 2026] Inside Out: Observing Go from Code to Kernel
Donia Chaiehloudj
August 07, 2026
More Decks by Donia Chaiehloudj
See All by Donia Chaiehloudj
Save CPU cycles with eBPF
doniacld
0
8
[GitHub Universe 2026] Who's watching the agents? What AI code does in production (Tetragon)
doniacld
0
12
[KCD Czech] eBPF Meets the GPU: Future of AI Infra Observability
doniacld
0
200
[KubeCon EU 2026, Observability Day] Cilium Updates
doniacld
0
51
[KubeCon EU 2026, Isovalent Booth Session] When IPv6 only cluster meets the real internet
doniacld
0
43
[KubeCon EU 2026, Isovalent Booth Session] Who Owns This IP? Debugging L2 in Kubernetes
doniacld
0
46
eBPF Hookpoint Gotchas: Why Your Program Fires (or Fails) in Unexpected Ways
doniacld
0
94
Cloud Native University NA 2025: From Squire to Network Knight - Defending the Kubernetes Castle the Cloud Native Way
doniacld
0
170
[cTENcf] eBPF and Go: The Core of Modern Kubernetes Networking
doniacld
1
120
Other Decks in Technology
See All in Technology
E2Eってつらくないですか?E2Eの管理コストを下げる手段とその実践
akaboshinit
6
3k
IBC 2026 動画技術関連レポート / IBC 2026 Report
cyberagentdevelopers
PRO
2
110
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
190
慶應義塾大学 AI実践05 論文執筆の仕組み化
keio_smilab
PRO
6
3.6k
FinOpsを導入してマルチプロダクトのコスト最適化を実現する
kworkdev
PRO
0
120
"AWSはちょっと苦手"でも大丈夫。AWS Blocks で手軽に作る Flutter のバックエンド #FlutterKaigi
tacck
PRO
0
130
In-Context Learning再入門。ICLの勾配降下的解釈の研究動向を追ってみる。
dai08srhg
0
110
Agent 活用環境の構築・運用のための AWS サービスのご紹介/agentcore-for-building-and-operating-agents
ren8k
1
320
構造で守らせる データ・法務・セキュリティ・開発チームとつくる AI時代のデータガバナンスとデータ基盤のリアル
legalontechnologies
PRO
3
790
視野はAIに、視座は人に / ai-for-breadth-humans-for-perspective
nkzn
6
2.8k
WireGuard for Apache NuttX - Bringing Secure Remote Access to embedded Devices -
aki310ooooo
0
140
渡米前の準備を制す!re:Invent 2026徹底準備術 / The Ultimate Preparation Guide for re:Invent 2026
yuj1osm
1
530
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
870
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.2k
Product Roadmaps are Hard
iamctodd
55
13k
Odyssey Design
rkendrick25
PRO
2
920
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
970
Designing for Timeless Needs
cassininazir
1
540
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
70
68k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
How to make the Groovebox
asonas
2
2.5k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
610
Transcript
Inside Out: Observing Go from Code to Kernel Donia Chaiehloudj,
Software Engineer & Community GopherCon 2026, Seattle © 2024 Isovalent. All Rights Reserved. 1
A bit about myself • • • • Software Engineer
& OSS Pollinator 🐝 at Isovalent @Cisco Co-wrote a book to learn Go KCD Provence Organiser (CFP open) 🥐 🥖 Know me for my talk about my henhouse and TinyGo © 2025 Isovalent. All Rights Reserved. 2
./ship --env prod © 2025 Isovalent. All Rights Reserved. 3
Sometimes… something goes wrong © 2025 Isovalent. All Rights Reserved.
4
Letʼs fix the issue! © 2025 Isovalent. All Rights Reserved.
5
DON’T WORRY I GOT YOUR BACK © 2025 Isovalent. All
Rights Reserved. 6
Observability gives us evidence to investigate a system. © 2025
Isovalent. All Rights Reserved. 7
Start where the symptom is visible © 2025 Isovalent. All
Rights Reserved. 8
Start where the symptom is visible © 2025 Isovalent. All
Rights Reserved. 9
1. Application-level Observability © 2024 Isovalent. All Rights Reserved. 10
Pillars of Observability metrics © 2025 Isovalent. All Rights Reserved.
logs traces 11
Pillars of Observability metrics © 2025 Isovalent. All Rights Reserved.
logs traces 12
© 2025 Isovalent. All Rights Reserved. 13
Request Demo © 2025 Isovalent. All Rights Reserved. 14
© 2025 Isovalent. All Rights Reserved. 15
© 2025 Isovalent. All Rights Reserved. 16
Original code profile, err = fetchProfile(ctx) // ... recommendations, err
= fetchRecmdt(ctx) // ... inventory, err = fetchInventory(ctx) // ... © 2025 Isovalent. All Rights Reserved. 17
Code after the fix group, ctx := errgroup.WithContext(ctx) // one
sub request fails -> main request fails group.Go(func() error { var err error profile, err = fetchProfile(ctx) return err }) // add a goroutine to the group group.Go(func() error { var err error recommendations, err = fetchRecmdt(ctx) return err }) group.Go(func() error { var err error inventory, err = fetchInventory(ctx) return err }) if err := group.Wait(); err != nil { return err } © 2025 Isovalent. All Rights Reserved. // wait for the all goroutines 18
Fixed Demo © 2025 Isovalent. All Rights Reserved. 19
© 2025 Isovalent. All Rights Reserved. 20
Missing cancellation goroutine still running © 2025 Isovalent. All Rights
Reserved. 21
Nested retries © 2025 Isovalent. All Rights Reserved. 22
Narrow down to the Go runtime © 2025 Isovalent. All
Rights Reserved. 23
2. Inside the Go Runtime © 2024 Isovalent. All Rights
Reserved. 24
Inside the runtime: example starts workers GET /work Client Backend
Service Worker 200 OK Prometheus instrumentation © 2025 Isovalent. All Rights Reserved. 25
Request Demo © 2025 Isovalent. All Rights Reserved. 26
© 2025 Isovalent. All Rights Reserved. 27
pprof code instrumentation import ( "net/http" _ "net/http/pprof" ) go
func() { log.Println(http.ListenAndServe( "localhost:6061", nil, )) }() // add blank import // expose pprof profiles metrics Access pprof metrics go tool pprof http://localhost:6061/debug/pprof/profile © 2025 Isovalent. All Rights Reserved. 28
pprof Demo © 2025 Isovalent. All Rights Reserved. 29
© 2025 Isovalent. All Rights Reserved. 30
Original code results := make(chan Result) go func() { result
:= doWork(context.Background()) results <- result // leaks: blocks forever }() select { case result := <-results: writeResult(w, result) case <-r.Context().Done(): return } © 2025 Isovalent. All Rights Reserved. 31
Code after the fix ctx := r.Context() results := make(chan
Result) go func() { result, err := doWork(ctx) if err != nil { return } // use request context select { case results <- result: case <-ctx.Done(): return } }() // exit when context is cancelled select { case result := <-results: writeResult(w, result) case <-ctx.Done(): return } © 2025 Isovalent. All Rights Reserved. 32
Fixed Demo © 2025 Isovalent. All Rights Reserved. 33
© 2025 Isovalent. All Rights Reserved. 34
Other pprof use cases: retained allocation A tiny slice can
retain a huge array payload := make([]byte, 100<<20) token := payload[:100] cache.Store(key, token) © 2025 Isovalent. All Rights Reserved. // referencing payload slice 35
Other pprof use cases: retained allocation A tiny slice can
retain a huge array payload := make([]byte, 100<<20) token := payload[:100] cache.Store(key, token) // referencing payload slice heap profile inuse_space bytes still retained inuse_objects objects still alive © 2025 Isovalent. All Rights Reserved. 36
Other pprof use cases: retained allocation A tiny slice can
retain a huge array payload := make([]byte, 100<<20) token := payload[:100] cache.Store(key, token) // referencing payload slice heap profile inuse_space bytes still retained inuse_objects objects still alive Make a copy tokenCopy := append([]byte(nil), token...) © 2025 Isovalent. All Rights Reserved. // copy the slice’s values 37
Other pprof use cases: expensive allocation Regexp computation for _,
line := range lines { re := regexp.MustCompile(`...`) matches := re.FindAllString(line, -1) process(matches) } © 2025 Isovalent. All Rights Reserved. 38
Other pprof use cases: expensive allocation Regexp computation allocations profile
for _, line := range lines { re := regexp.MustCompile(`...`) matches := re.FindAllString(line, -1) process(matches) } alloc_space total bytes allocated over time alloc_objects total objects allocated over time © 2025 Isovalent. All Rights Reserved. 39
Other pprof use cases: expensive allocation Regexp computation allocations profile
for _, line := range lines { re := regexp.MustCompile(`...`) matches := re.FindAllString(line, -1) process(matches) } alloc_space total bytes allocated over time alloc_objects total objects allocated over time Outside of a loop var re = regexp.MustCompile(`...`) for _, line := range lines { matches := re.FindAllString(line, -1) process(matches) } © 2025 Isovalent. All Rights Reserved. 40
Even deeper © 2025 Isovalent. All Rights Reserved. 41
3. Beyond the process with eBPF © 2024 Isovalent. All
Rights Reserved. 42
Beyond the process with eBPF: example POST /compute { “jobs”:16
} Client Backend Service Launching 16 goroutines 200 OK © 2025 Isovalent. All Rights Reserved. 43
Request baseline / Demo • • • Baseline average latency
for 2 jobs: 1s Under load latency for 16 jobs: 8s Number of available CPUs: 11 © 2025 Isovalent. All Rights Reserved. 44
© 2025 Isovalent. All Rights Reserved. 45
Where is the CPU going? $ go tool pprof cpu.pprof
© 2025 Isovalent. All Rights Reserved. 46
pprof Demo © 2025 Isovalent. All Rights Reserved. 47
© 2025 Isovalent. All Rights Reserved. 48
Where is the CPU going? $ go tool pprof cpu.pprof
Duration: 15.11s, Total samples = 3.52s (23.29%) Only 23,29% of the CPU is in use during the 15s of the requests by this application. We have an Off-CPU problem. © 2025 Isovalent. All Rights Reserved. 49
@doniacld © 2024 Isovalent. All Rights Reserved. 50
What is ? Makes the Linux kernel programmable @doniacld ©
2024 Isovalent. All Rights Reserved. 51
Overview of Userspace App Events: • File is opening •
Network packet is received syscalls Linux Kernel @doniacld © 2024 Isovalent. All Rights Reserved. event Program 52
eBPF Demo © 2025 Isovalent. All Rights Reserved. 53
© 2025 Isovalent. All Rights Reserved. 54
© 2025 Isovalent. All Rights Reserved. 55
Overview of © 2024 Isovalent. All Rights Reserved. tools 56
offcputime Demo © 2025 Isovalent. All Rights Reserved. 57
© 2025 Isovalent. All Rights Reserved. 58
© 2025 Isovalent. All Rights Reserved. 59
Off-CPU flamegraph of the service ℹHow to read Each box
= time spent waiting on CPU © 2025 Isovalent. All Rights Reserved. 60
CPU Configuration and Throttling Requests started Requests completed Quota Exceeded
T#10 … (20ms) T#10 … (20ms) T#10. (10ms) … … … T#3 … (20ms) Threads Throttled T#3 … (20ms) Threads Throttled T#3. (10ms) T#2 … (20ms) Idle for 80ms … waiting next period T#2 … (20ms) Idle for 80m … waiting next period T#2. (10ms) T#1 … (20ms) 0 20 T#1 … (20ms) T#1. (10ms) 100 200 Time (ms) src: https://medium.com/@alexandru.lazarev/cpu-limits-in-kubernetes-why-your-pod-is-idle-but-still-throttled-a-deep-dive-into-what-really-136c0cdd62ff © 2025 Isovalent. All Rights Reserved. 61
Allocate CPU intentionally # Before services: app: cpus: "0.25" ©
2025 Isovalent. All Rights Reserved. 62
Allocate CPU intentionally # Before services: app: cpus: "0.25" ©
2025 Isovalent. All Rights Reserved. # After services: app: cpus: "2.0" 63
Demo after configuration change © 2025 Isovalent. All Rights Reserved.
64
© 2025 Isovalent. All Rights Reserved. 65
© 2025 Isovalent. All Rights Reserved. 66
Other eBPF Observability use cases • Network issues • Disk/IO
issues © 2025 Isovalent. All Rights Reserved. 67
You may already be using eBPF © 2025 Isovalent. All
Rights Reserved. 68
Takeaways t? re? 🔎 pprof } ? © 2025 Isovalent.
All Rights Reserved. 69
Thanks! 🧪 Demo Repository: github.com/doniacld/gophercon26-obs-code2kernel 📘Resources: • Profiling Go programs
with pprof: https://jvns.ca/blog/2017/09/24/profiling-go-with-pprof/ • eBPF docs: https://docs.ebpf.io/ • off-CPU analysis blog post: https://www.brendangregg.com/offcpuanalysis.html 🔗 Want to connect? Donia Chaiehloudj / @doniacld © 2025 Isovalent. All Rights Reserved. 70