GopherCon 2015: Go GC: Solving the Latency Problem - Rick Hudson
Gopher Academy2 HN recommenders · recommended in 2 months, 2015–2020
talk · advanced · 2015–2020 on HN
Rick Hudson's GopherCon 2015 talk on Go 1.5's new low-latency concurrent garbage collector. It covers the motivation, performance numbers, technical challenges and why the approach fits Go.
Pointed to as the authoritative source on Go's GC pause improvements, and later revisited when GC latency claims were challenged.
Up next
2 mo on HNThe Charming Genius of the Apollo Guidance Computer - Brian Troutwine
Erlang Solutions
2 HN recommender · 2015–2019
11 mo on HNCppCon 2015: Andrei Alexandrescu “std::allocator...”
CppCon
7 HN recommender · 2017–2025
12 mo on HNLexical Scanning in Go - Rob Pike
GoogleFOSSSydney
13 HN recommender · 2012–2025
10 mo on HNCppCon 2017: Matt Kulukundis “Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step”
CppCon
9 HN recommender · 2018–2026
9 mo on HNRustConf 2018 - Closing Keynote - Using Rust For Game Development by Catherine West
Rust Programming Language
9 HN recommender · 2018–2023
10 mo on HNCppCon 2016: Jason Turner “Rich Code for Tiny Computers: A Simple Commodore 64 Game in C++17”
CppCon
13 HN recommender · 2016–2024
9 mo on HNIdeas about a new programming language for games.
Jonathan Blow
7 HN recommender · 2014–2025
9 mo on HNCppCon 2014: Mike Acton "Data-Oriented Design and C++"
CppCon
9 HN recommender · 2015–2026
9 mo on HNHow I program C
Eskil Steenberg
8 HN recommender · 2017–2025
9 mo on HNGoogle I/O 2012 - Go Concurrency Patterns
Google for Developers
9 HN recommender · 2012–2025
7 mo on HNCppCon 2015: Kate Gregory “Stop Teaching C"
CppCon
7 HN recommender · 2016–2025
7 mo on HNZig: A programming language designed for robustness, optimality, and clarity – Andrew Kelley
Recurse Center
6 HN recommender · 2018–2024
5 comments from Hacker News
Go's TLS support should be greatly improved in Go 1.6 thanks to the performance work you referenced by Cloudflare. The licensing issue was resolved and the work was merged 11/10/2016[1] While GC will always carry a cost, great improvements have been made over the last year and continues to be an area of focus for each Go release. Rick Hudson gave a nice update on Go's GC improves at GopherCon 2015 [2][3] [1] link [2] link . [3] ▶ this video
If you liked this you might also find Rick Hudson's talk on GC improvements in Go 1.5 interesting: ▶ this video link
Wait, isn't Go devs said they solved GC latency problems [1]? (from 2015): "Go is building a garbage collector (GC) not only for 2015 but for 2025 and beyond: A GC that supports today’s software development and scales along with new software and hardware throughout the next decade. Such a future has no place for stop-the-world GC pauses, which have been an impediment to broader uses of safe and secure languages such as Go." [2] [1] ▶ this video [2] link
Oki, got it. Can't decide if that sounds like horrible conditions or a fun challenge =) For reference, the Go 1.5 GC propaganda: > Go 1.5, the first glimpse of this future, achieves GC latencies well below the 10 millisecond goal we set a year ago. Blog post: link Slide: link Talk: ▶ this video Edit: Meanwhile, over in Java land they measure stop the world pauses in seconds , not milliseconds: link link
It looks like a few things in there could further reduce typical and peak pause times, by backgrounding more phases of the work and rescanning stacks late so it's less likely much marking has to happen in the pause. I'm less clear on this, but "embrace write barrier during scan" and the other pacing changes might also better spread out work during the concurrent phases. The pause improvements in 1.5 are no joke -- here's a benchmark from the GopherCon talk on it: link (1.5 is the yellow dots along the bottom) (That talk is ▶ this video and the slides are link ) And here's a graph from a real-world memory hungry app on a beta--300ms pause down to 4ms: link (Presentation on that app here: link ) Another app's pauses went from ~12ms to ~2ms: link And this doc means Go isn't moving to a generational GC now, which the pre-1.4 proposal speculated they might do in 1.6. That would mostly be a throughput win (discard short-lived garbage cheaply and early, so full GCs can be rarer), not a pause win (it could add new short pauses for young-gen GCs). Seems sane for now, since the polish they're talking about seems difficult, directly useful, and important as a basis for future work, and the pauses seem like the larger headache for the working Gopher anyway.