Profile-Guided Optimization

How to optimize Vector performance with Profile-Guided Optimization

Profile-Guided Optimization (PGO) is a compiler optimization technique where a program is optimized based on the runtime profile.

According to the tests, we see improvements of up to 15% more processed log events per second on some Vector workloads. The performance benefits depend on your typical workload - you can get better or worse results.

More information about PGO in Vector you can read in the corresponding GitHub issue.

How to build Vector with PGO?

There are two major kinds of PGO: Instrumentation and Sampling (also known as AutoFDO). In this guide, is described the Instrumentation PGO with Vector. In this guide we use cargo-pgo for building Vector with PGO.

  • Install cargo-pgo.
  • Check out the Vector repository.
  • Go to the Vector source directory and run cargo pgo build. It will build the instrumented Vector version.
  • Run instrumented Vector on your test load like cargo pgo run -- -- -c vector.toml and wait for some time to collect enough information from your workload. Usually, waiting several minutes is enough (but your case can be different).
  • Stop Vector instance. The profile data will be generated in the target/pgo-profiles directory.
  • Run cargo pgo optimize. It will build Vector with PGO optimization.

A more detailed guide on how to apply PGO is in the Rust documentation.