diff --git a/Makefile b/Makefile
index 57e877beb01465d9803cd853113ad964f4cc515a..567e4a6b28da34caa086fdfeeeaa1be99c2915df 100644
--- a/Makefile
+++ b/Makefile
@@ -92,7 +92,8 @@ CC_opt = $(DEFAULT_CC)
 CXX_opt = $(DEFAULT_CXX)
 LD_opt = $(DEFAULT_CC)
 LDXX_opt = $(DEFAULT_CXX)
-CPPFLAGS_opt = -O2
+CPPFLAGS_opt = -O3 -flto
+LDFLAGS_opt = -O3 -flto
 DEFINES_opt = NDEBUG
 
 VALID_CONFIG_basicprof = 1
@@ -208,8 +209,8 @@ CC_mutrace = $(DEFAULT_CC)
 CXX_mutrace = $(DEFAULT_CXX)
 LD_mutrace = $(DEFAULT_CC)
 LDXX_mutrace = $(DEFAULT_CXX)
-CPPFLAGS_mutrace = -O3 -fno-omit-frame-pointer
-LDFLAGS_mutrace = -rdynamic
+CPPFLAGS_mutrace = -O3 -fno-omit-frame-pointer -flto
+LDFLAGS_mutrace = -rdynamic -O3 -flto
 DEFINES_mutrace = NDEBUG
 
 VALID_CONFIG_counters = 1
@@ -217,7 +218,8 @@ CC_counters = $(DEFAULT_CC)
 CXX_counters = $(DEFAULT_CXX)
 LD_counters = $(DEFAULT_CC)
 LDXX_counters = $(DEFAULT_CXX)
-CPPFLAGS_counters = -O2 -DGPR_LOW_LEVEL_COUNTERS
+CPPFLAGS_counters = -O3 -flto -DGPR_LOW_LEVEL_COUNTERS
+LDFLAGS_counters = -O3 -flto
 DEFINES_counters = NDEBUG
 
 
diff --git a/build.yaml b/build.yaml
index 9ff37d59e173715c23be98b0f01f1f2702e190b9..442dacac6f546f31044238c994cf43805c48aab5 100644
--- a/build.yaml
+++ b/build.yaml
@@ -4031,8 +4031,9 @@ configs:
     CPPFLAGS: -O2 -DGRPC_BASIC_PROFILER -DGRPC_TIMERS_RDTSC
     DEFINES: NDEBUG
   counters:
-    CPPFLAGS: -O2 -DGPR_LOW_LEVEL_COUNTERS
+    CPPFLAGS: -O3 -flto -DGPR_LOW_LEVEL_COUNTERS
     DEFINES: NDEBUG
+    LDFLAGS: -O3 -flto
   dbg:
     CPPFLAGS: -O0
     DEFINES: _DEBUG DEBUG
@@ -4067,12 +4068,13 @@ configs:
     LDXX: clang++
     compile_the_world: true
   mutrace:
-    CPPFLAGS: -O3 -fno-omit-frame-pointer
+    CPPFLAGS: -O3 -fno-omit-frame-pointer -flto
     DEFINES: NDEBUG
-    LDFLAGS: -rdynamic
+    LDFLAGS: -rdynamic -O3 -flto
   opt:
-    CPPFLAGS: -O2
+    CPPFLAGS: -O3 -flto
     DEFINES: NDEBUG
+    LDFLAGS: -O3 -flto
   stapprof:
     CPPFLAGS: -O2 -DGRPC_STAP_PROFILER
     DEFINES: NDEBUG