Profiling & Optimizing Go Training
Go ships with amazing profiling tools, but understanding how and when to use them, as well as understanding their output, can be quite challenging. This course was designed to take experienced developers through the fundamentals of the pprof tool, and show them how to and when to create proper profiles for their code. It then shows them how to spot performance issues, identifies common performance pitfalls, and shows the proper fixes for many of them.
Length1 day. Each day is 4 hours long including a 15 minute break.
Class Size10 - 25 students. Need a larger or smaller class, just contact us for a custom quote.
- You have been doing daily Go development for 3-6 months and want to master more advanced topics.
- You want to learn how to profile your Go code and improve performance.
- Familiarity and comfort navigating and basic file manipulation at the command line.
- Familiarity and comfort with a modern code editor, including creating and modifying files and projects.
- You have 3 to 6 months of daily Go experience.
- Familiarity with basic programming concepts and structures such as variables, loops, conditionals, etc.
- Computers should be capable of modern software development, such as access to install and run binaries, install a code editor, etc. Full instructions referenced here: preparing your environment for Go development. It may be necessary for them to have root/admin access to their computer.
- Install and configure an editor for Go.
- Have a functioning Go environment installed with Go 1.13 or later.
- Sign up for a Github account if you don't already have one.
- Install GraphViz (needed for generating Go profiles).
Suggested Followup Learning
- Students will understand how to install and run the pprof tool.
- Students will understand how to configure their Go code to create and capture performance profiles.
- Students will understand how to read a Go profile, torch graph, and navigate other pprof generated output.
- Students will understand the Go test ecosystem, as well as how to configure and run their Go tests efficiently.
- Students will be able to identify common performance pitfalls and correct them in their Go code.
This module covers general information about your instructor and course materials.
Go ships with a number of profiling tools. This chapter will walk you through how to:
- Use interactive
pprofwith a cpu profile
- Use interactive
pprofwith different types of memory profiles
- Generate profiles from benchmarks
- Generate profiles from live/running applications
- Generate torch graphs from benchmarks or live/running applications
Optimizing Go Services
Understanding how to use tools like
pprof and writing benchmarks is important, but understanding common coding pitfalls and how to spot them with those tools is the end goal.
In this interactive workshop, you will:
- Learn several compiler tricks to spot areas for improvement
- Learn how to properly buffer readers and writers
- Find and remove unnecessary memory allocations
The execution trace captures a wide range of execution events such as goroutine creation/blocking/unblocking, syscall enter/exit/block, GC-related events, changes of heap size, processor start/stop, etc. A precise nanosecond-precision timestamp and a stack trace is captured for most events. The generated trace can be interpreted using
go tool trace.
This chapter will walk through how to enable tracing, use the trace tool, and spot performance issues.
This chapter covers where to get more support on Go, recommends books and videos, and list the contact information for our instructors.
Go comes with a powerful set of tools for profiling and improving the performance of your code. Benchmarking is one of those tools, and the first one most developers start with. In this module we will cover basic benchmarking, some common benchmarking mistakes, and how to compare benchmarks to see if performance has improved.