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
9
[GitHub Universe 2026] Who's watching the agents? What AI code does in production (Tetragon)
doniacld
0
17
[KCD Czech] eBPF Meets the GPU: Future of AI Infra Observability
doniacld
0
210
[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
Copilot Coworkで「みのるん式」やってみた
minorun365
PRO
2
1.5k
PostgreSQL オプティマイザ統計の秘密
nori_shinoda
0
340
バックオフィスに染み出すTypeScript ── clasp で安全に仕組みを作る
nealle
1
180
OneLakeをデータソースにした AI Search(Foundry IQ)の ライフサイクル管理
ryuseiiida
0
220
AI Agent 時代のデータ基盤: ClickHouse で実現する 超高速分析とコスト削減の両立
jozono
0
180
Lint の層を組み直した話
bengo4com
3
310
AWSを利用する上で知っておきたい名前解決の話 2026
nagisa53
4
2.4k
Autonomous AI Lakehouse - Live AI Hubから始めるセキュアなAIデータ活用 -
oracle4engineer
PRO
3
190
DBTS2026 盛り上がってますか!?Databricksが実現するAI時代のデータ基盤
akuwano
1
130
現場を動かすAIエージェント#2_製造業現場でのAI活用から見た、ハマる罠と実践知
kintotechdev
2
170
re:Invent2026 事前勉強会 歴史と愉しみ方10分LT編
toshi_atsumi
0
130
AI時代の組織作り:チーム開発から「個人×AI」への移行と、持続可能な「開発資本」の築き方
ham0215
1
100
Featured
See All Featured
HDC tutorial
michielstock
2
1k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.3k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
660
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
520
Speed Design
sergeychernyshev
33
2.2k
Exploring anti-patterns in Rails
aemeredith
4
560
Git: the NoSQL Database
bkeepers
PRO
433
67k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
320
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
60k
Become a Pro
speakerdeck
PRO
31
6.3k
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