Why does Envoy take so long to compile?

There are several different reasons why Envoy is so computationally intensive to compile:

  • C++ code, and especially C++ code with templates, has slow compilation speed.

  • Envoy tests make use of gmock, which is heavily templatized, and thus has very poor compilation speed.

  • The amount of Envoy code, and the number of extensions, continues to grow rapidly, compounding the problem.

We would like Envoy’s compilation speed to be faster, especially as we know it hinders occasional contribution, but unfortunately there are no easy answers to this problem. In the interim until better solutions are found (e.g., splitting some extensions out of the main repo, precompiled headers, etc.), we recommend using a powerful machine for Envoy development. The best approach is to:

  • Use a cloud based VM along with a tool like vscode remote development. Having 36+ cores and around 2 GiB of RAM per core still allows the entire source tree to built and tested in a reasonable amount of time.

  • If using a cloud machine, make sure to build on a local ephemeral SSD versus a remote block store such as EBS. The build involves a large amount of disk access and will become disk bound if not using a fast local drive.