Skip to content

Connected subchannel refactoring#13932

Merged
dgquintas merged 9 commits intogrpc:masterfrom
dgquintas:conn_subchannel
Jan 18, 2018
Merged

Connected subchannel refactoring#13932
dgquintas merged 9 commits intogrpc:masterfrom
dgquintas:conn_subchannel

Conversation

@dgquintas
Copy link
Copy Markdown
Contributor

@dgquintas dgquintas commented Jan 5, 2018

This PR makes connected subchannel into an actual object (while making it C++ while at it). This allows subchannels to keep their connectivity as TRANSIENT FAILURE even while the connected subchannel has lost connectivity. Subchannels can then attempt to recreate the connected subchannel, while their connectivity state subscribers (LB policies) are only aware of the TRANSIENT FAILURE status and may see an eventual transition to READY if the subchannel's reconnection attempt is successful. Previously, TRANSIENT FAILURE was a terminal state for subchannels (in fact, it was internally turned into SHUTDOWN), meaning subchannels wouldn't recover from disconnections, which resulted in the problems described in #11643.

Fixes #11643


This change is Reviewable

@grpc-testing
Copy link
Copy Markdown

****************************************************************

libgrpc.so

     VM SIZE                                                                                            FILE SIZE
 ++++++++++++++ GROWING                                                                              ++++++++++++++
  +0.4% +2.35Ki [None]                                                                                +269Ki  +4.6%
      +0.4% +2.00Ki [Unmapped]                                                                            +269Ki  +4.7%
      +2.5%     +30 [None]                                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_alarm_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_auth_context_refcount                                                           0  [ = ]
     +23e2%     +23 grpc_trace_chttp2_refcount                                                                 0  [ = ]
     +23e2%     +23 grpc_trace_closure                                                                         0  [ = ]
     +23e2%     +23 grpc_trace_cq_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_error_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_fd_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_lb_policy_refcount                                                              0  [ = ]
     +23e2%     +23 grpc_trace_metadata                                                                        0  [ = ]
     +23e2%     +23 grpc_trace_pending_tags                                                                    0  [ = ]
     +23e2%     +23 grpc_trace_pollable_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_resolver_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_security_connector_refcount                                                     0  [ = ]
     +23e2%     +23 grpc_trace_stream_refcount                                                                 0  [ = ]
  +6.4%    +368 src/core/ext/filters/client_channel/subchannel.cc                                       +368  +6.4%
      [NEW]    +806 on_subchannel_connected                                                                 +806  [NEW]
      [NEW]    +338 grpc_connected_subchannel::CreateCall                                                   +338  [NEW]
      [NEW]    +260 on_connected_subchannel_connectivity_changed                                            +260  [NEW]
      [NEW]     +76 grpc_connected_subchannel::NotifyOnStateChange                                           +76  [NEW]
      [NEW]     +73 grpc_connected_subchannel::Ping                                                          +73  [NEW]
     +12e2%     +58 grpc_connected_subchannel_unref                                                          +58 +12e2%
      +407%     +57 grpc_connected_subchannel_ref                                                            +57  +407%
      [NEW]     +48 grpc_connected_subchannel::grpc_connected_subchannel                                     +48  [NEW]
      [NEW]     +41 grpc_connected_subchannel::Unref                                                         +41  [NEW]
      [NEW]     +27 grpc_connected_subchannel::Ref                                                           +27  [NEW]
      +7.3%     +18 [Unmapped]                                                                               +18  +7.3%
      +0.8%      +3 maybe_start_connecting_locked                                                             +3  +0.8%
  +1.6%    +105 src/core/lib/iomgr/error.cc                                                             +105  +1.6%
      [NEW]    +103 _GLOBAL__sub_I_error.cc                                                                 +103  [NEW]
      [NEW]      +2 grpc_core::DebugOnlyTraceFlag::~DebugOnlyTraceFlag                                        +2  [NEW]
  +1.0%     +87 src/core/lib/surface/completion_queue.cc                                                 +87  +1.0%
       +58%     +87 _GLOBAL__sub_I_completion_queue.cc                                                       +87   +58%
  +7.5%     +48 src/core/ext/filters/client_channel/lb_policy.cc                                         +48  +7.5%
      [NEW]     +48 _GLOBAL__sub_I_lb_policy.cc                                                              +48  [NEW]
   +29%     +48 src/core/ext/filters/client_channel/resolver.cc                                          +48   +29%
      [NEW]     +48 _GLOBAL__sub_I_resolver.cc                                                               +48  [NEW]
  +0.4%     +48 src/core/lib/iomgr/ev_epollex_linux.cc                                                   +48  +0.4%
      [NEW]    +193 pollset_kick_all(grpc_pollset*) [clone .isra.9]                                         +193  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_ev_epollex_linux.cc                                                       +48  [NEW]
  +1.5%     +48 src/core/lib/security/context/security_context.cc                                        +48  +1.5%
      [NEW]     +48 _GLOBAL__sub_I_security_context.cc                                                       +48  [NEW]
  +0.5%     +48 src/core/lib/security/transport/security_connector.cc                                    +48  +0.5%
      [NEW]    +537 fake_check_peer(grpc_security_connector*, tsi_peer, grpc_auth_context**, grpc_closur    +537  [NEW]
      [NEW]    +404 ssl_check_peer(grpc_security_connector*, char const*, tsi_peer const*, grpc_auth_con    +404  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_security_connector.cc                                                     +48  [NEW]
  +4.5%     +48 src/core/lib/surface/alarm.cc                                                            +48  +4.5%
      [NEW]    +242 alarm_unref(grpc_alarm*) [clone .part.2]                                                +242  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_alarm.cc                                                                  +48  [NEW]
  +1.4%     +48 src/core/lib/transport/metadata.cc                                                       +48  +1.4%
      [NEW]     +48 _GLOBAL__sub_I_metadata.cc                                                               +48  [NEW]
  +4.2%     +48 src/core/lib/transport/transport.cc                                                      +48  +4.2%
      [NEW]     +48 _GLOBAL__sub_I_transport.cc                                                              +48  [NEW]
  +0.1%     +46 src/core/ext/transport/chttp2/transport/chttp2_transport.cc                              +46  +0.1%
       +96%     +46 _GLOBAL__sub_I_chttp2_transport.cc                                                       +46   +96%
  +3.3%     +46 src/core/lib/iomgr/ev_posix.cc                                                           +46  +3.3%
       +96%     +46 _GLOBAL__sub_I_ev_posix.cc                                                               +46   +96%
  +0.6%     +32 src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc                 +32  +0.6%
      +2.2%     +38 rr_connectivity_changed_locked                                                           +38  +2.2%

 -------------- SHRINKING                                                                            --------------
  -0.7%     -32 src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc                   -32  -0.7%
      -2.5%     -38 pf_connectivity_changed_locked                                                           -38  -2.5%

  +0.3% +3.36Ki TOTAL                                                                                 +270Ki  +4.2%


****************************************************************

libgrpc++.so

     VM SIZE              FILE SIZE
 ++++++++++++++ GROWIN ++++++++++++++
  [ = ]       0 [None]    +248  +0.0%

  [ = ]       0 TOTAL     +248  +0.0%



@grpc-testing
Copy link
Copy Markdown

[trickle] No significant performance differences

@grpc-testing
Copy link
Copy Markdown

****************************************************************

libgrpc.so

     VM SIZE                                                                                            FILE SIZE
 ++++++++++++++ GROWING                                                                              ++++++++++++++
  +0.4% +2.35Ki [None]                                                                                +269Ki  +4.6%
      +0.4% +2.00Ki [Unmapped]                                                                            +269Ki  +4.7%
      +2.5%     +30 [None]                                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_alarm_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_auth_context_refcount                                                           0  [ = ]
     +23e2%     +23 grpc_trace_chttp2_refcount                                                                 0  [ = ]
     +23e2%     +23 grpc_trace_closure                                                                         0  [ = ]
     +23e2%     +23 grpc_trace_cq_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_error_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_fd_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_lb_policy_refcount                                                              0  [ = ]
     +23e2%     +23 grpc_trace_metadata                                                                        0  [ = ]
     +23e2%     +23 grpc_trace_pending_tags                                                                    0  [ = ]
     +23e2%     +23 grpc_trace_pollable_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_resolver_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_security_connector_refcount                                                     0  [ = ]
     +23e2%     +23 grpc_trace_stream_refcount                                                                 0  [ = ]
  +6.4%    +368 src/core/ext/filters/client_channel/subchannel.cc                                       +368  +6.4%
      [NEW]    +806 on_subchannel_connected                                                                 +806  [NEW]
      [NEW]    +338 grpc_connected_subchannel::CreateCall                                                   +338  [NEW]
      [NEW]    +260 on_connected_subchannel_connectivity_changed                                            +260  [NEW]
      [NEW]     +76 grpc_connected_subchannel::NotifyOnStateChange                                           +76  [NEW]
      [NEW]     +73 grpc_connected_subchannel::Ping                                                          +73  [NEW]
     +12e2%     +58 grpc_connected_subchannel_unref                                                          +58 +12e2%
      +407%     +57 grpc_connected_subchannel_ref                                                            +57  +407%
      [NEW]     +48 grpc_connected_subchannel::grpc_connected_subchannel                                     +48  [NEW]
      [NEW]     +41 grpc_connected_subchannel::Unref                                                         +41  [NEW]
      [NEW]     +27 grpc_connected_subchannel::Ref                                                           +27  [NEW]
      +7.3%     +18 [Unmapped]                                                                               +18  +7.3%
      +0.8%      +3 maybe_start_connecting_locked                                                             +3  +0.8%
  +1.6%    +105 src/core/lib/iomgr/error.cc                                                             +105  +1.6%
      [NEW]    +103 _GLOBAL__sub_I_error.cc                                                                 +103  [NEW]
      [NEW]      +2 grpc_core::DebugOnlyTraceFlag::~DebugOnlyTraceFlag                                        +2  [NEW]
  +1.0%     +87 src/core/lib/surface/completion_queue.cc                                                 +87  +1.0%
       +58%     +87 _GLOBAL__sub_I_completion_queue.cc                                                       +87   +58%
  +7.5%     +48 src/core/ext/filters/client_channel/lb_policy.cc                                         +48  +7.5%
      [NEW]     +48 _GLOBAL__sub_I_lb_policy.cc                                                              +48  [NEW]
   +29%     +48 src/core/ext/filters/client_channel/resolver.cc                                          +48   +29%
      [NEW]     +48 _GLOBAL__sub_I_resolver.cc                                                               +48  [NEW]
  +0.4%     +48 src/core/lib/iomgr/ev_epollex_linux.cc                                                   +48  +0.4%
      [NEW]    +193 pollset_kick_all(grpc_pollset*) [clone .isra.9]                                         +193  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_ev_epollex_linux.cc                                                       +48  [NEW]
  +1.5%     +48 src/core/lib/security/context/security_context.cc                                        +48  +1.5%
      [NEW]     +48 _GLOBAL__sub_I_security_context.cc                                                       +48  [NEW]
  +0.5%     +48 src/core/lib/security/transport/security_connector.cc                                    +48  +0.5%
      [NEW]    +537 fake_check_peer(grpc_security_connector*, tsi_peer, grpc_auth_context**, grpc_closur    +537  [NEW]
      [NEW]    +404 ssl_check_peer(grpc_security_connector*, char const*, tsi_peer const*, grpc_auth_con    +404  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_security_connector.cc                                                     +48  [NEW]
  +4.5%     +48 src/core/lib/surface/alarm.cc                                                            +48  +4.5%
      [NEW]    +242 alarm_unref(grpc_alarm*) [clone .part.2]                                                +242  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_alarm.cc                                                                  +48  [NEW]
  +1.4%     +48 src/core/lib/transport/metadata.cc                                                       +48  +1.4%
      [NEW]     +48 _GLOBAL__sub_I_metadata.cc                                                               +48  [NEW]
  +4.2%     +48 src/core/lib/transport/transport.cc                                                      +48  +4.2%
      [NEW]     +48 _GLOBAL__sub_I_transport.cc                                                              +48  [NEW]
  +0.1%     +46 src/core/ext/transport/chttp2/transport/chttp2_transport.cc                              +46  +0.1%
       +96%     +46 _GLOBAL__sub_I_chttp2_transport.cc                                                       +46   +96%
  +3.3%     +46 src/core/lib/iomgr/ev_posix.cc                                                           +46  +3.3%
       +96%     +46 _GLOBAL__sub_I_ev_posix.cc                                                               +46   +96%
  +0.6%     +32 src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc                 +32  +0.6%
      +2.2%     +38 rr_connectivity_changed_locked                                                           +38  +2.2%

 -------------- SHRINKING                                                                            --------------
  -0.7%     -32 src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc                   -32  -0.7%
      -2.5%     -38 pf_connectivity_changed_locked                                                           -38  -2.5%

  +0.3% +3.36Ki TOTAL                                                                                 +270Ki  +4.2%


****************************************************************

libgrpc++.so

     VM SIZE              FILE SIZE
 ++++++++++++++ GROWIN ++++++++++++++
  [ = ]       0 [None]    +248  +0.0%

  [ = ]       0 TOTAL     +248  +0.0%



@grpc-testing
Copy link
Copy Markdown

[trickle] No significant performance differences

@grpc-testing
Copy link
Copy Markdown

[microbenchmarks] No significant performance differences

@grpc-testing
Copy link
Copy Markdown

[microbenchmarks] Performance differences noted:
Benchmark                                   cpu_time    real_time
------------------------------------------  ----------  -----------
BM_HasClearGrpcStatus<ErrorWithGrpcStatus>  +6%         +6%
BM_Zalloc/2048                              -6%         -6%

@grpc-testing
Copy link
Copy Markdown

****************************************************************

libgrpc.so

     VM SIZE                                                                                            FILE SIZE
 ++++++++++++++ GROWING                                                                              ++++++++++++++
  +0.4% +2.35Ki [None]                                                                                +269Ki  +4.6%
      +0.4% +2.00Ki [Unmapped]                                                                            +269Ki  +4.7%
      +2.5%     +30 [None]                                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_alarm_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_auth_context_refcount                                                           0  [ = ]
     +23e2%     +23 grpc_trace_chttp2_refcount                                                                 0  [ = ]
     +23e2%     +23 grpc_trace_closure                                                                         0  [ = ]
     +23e2%     +23 grpc_trace_cq_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_error_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_fd_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_lb_policy_refcount                                                              0  [ = ]
     +23e2%     +23 grpc_trace_metadata                                                                        0  [ = ]
     +23e2%     +23 grpc_trace_pending_tags                                                                    0  [ = ]
     +23e2%     +23 grpc_trace_pollable_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_resolver_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_security_connector_refcount                                                     0  [ = ]
     +23e2%     +23 grpc_trace_stream_refcount                                                                 0  [ = ]
  +6.4%    +368 src/core/ext/filters/client_channel/subchannel.cc                                       +368  +6.4%
      [NEW]    +806 on_subchannel_connected                                                                 +806  [NEW]
      [NEW]    +338 grpc_connected_subchannel::CreateCall                                                   +338  [NEW]
      [NEW]    +260 on_connected_subchannel_connectivity_changed                                            +260  [NEW]
      [NEW]     +76 grpc_connected_subchannel::NotifyOnStateChange                                           +76  [NEW]
      [NEW]     +73 grpc_connected_subchannel::Ping                                                          +73  [NEW]
     +12e2%     +58 grpc_connected_subchannel_unref                                                          +58 +12e2%
      +407%     +57 grpc_connected_subchannel_ref                                                            +57  +407%
      [NEW]     +48 grpc_connected_subchannel::grpc_connected_subchannel                                     +48  [NEW]
      [NEW]     +41 grpc_connected_subchannel::Unref                                                         +41  [NEW]
      [NEW]     +27 grpc_connected_subchannel::Ref                                                           +27  [NEW]
      +7.3%     +18 [Unmapped]                                                                               +18  +7.3%
      +0.8%      +3 maybe_start_connecting_locked                                                             +3  +0.8%
  +1.6%    +105 src/core/lib/iomgr/error.cc                                                             +105  +1.6%
      [NEW]    +103 _GLOBAL__sub_I_error.cc                                                                 +103  [NEW]
      [NEW]      +2 grpc_core::DebugOnlyTraceFlag::~DebugOnlyTraceFlag                                        +2  [NEW]
  +1.0%     +87 src/core/lib/surface/completion_queue.cc                                                 +87  +1.0%
       +58%     +87 _GLOBAL__sub_I_completion_queue.cc                                                       +87   +58%
  +7.5%     +48 src/core/ext/filters/client_channel/lb_policy.cc                                         +48  +7.5%
      [NEW]     +48 _GLOBAL__sub_I_lb_policy.cc                                                              +48  [NEW]
   +29%     +48 src/core/ext/filters/client_channel/resolver.cc                                          +48   +29%
      [NEW]     +48 _GLOBAL__sub_I_resolver.cc                                                               +48  [NEW]
  +0.4%     +48 src/core/lib/iomgr/ev_epollex_linux.cc                                                   +48  +0.4%
      [NEW]    +193 pollset_kick_all(grpc_pollset*) [clone .isra.9]                                         +193  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_ev_epollex_linux.cc                                                       +48  [NEW]
  +1.5%     +48 src/core/lib/security/context/security_context.cc                                        +48  +1.5%
      [NEW]     +48 _GLOBAL__sub_I_security_context.cc                                                       +48  [NEW]
  +0.5%     +48 src/core/lib/security/transport/security_connector.cc                                    +48  +0.5%
      [NEW]    +537 fake_check_peer(grpc_security_connector*, tsi_peer, grpc_auth_context**, grpc_closur    +537  [NEW]
      [NEW]    +404 ssl_check_peer(grpc_security_connector*, char const*, tsi_peer const*, grpc_auth_con    +404  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_security_connector.cc                                                     +48  [NEW]
  +4.5%     +48 src/core/lib/surface/alarm.cc                                                            +48  +4.5%
      [NEW]    +242 alarm_unref(grpc_alarm*) [clone .part.2]                                                +242  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_alarm.cc                                                                  +48  [NEW]
  +1.4%     +48 src/core/lib/transport/metadata.cc                                                       +48  +1.4%
      [NEW]     +48 _GLOBAL__sub_I_metadata.cc                                                               +48  [NEW]
  +4.2%     +48 src/core/lib/transport/transport.cc                                                      +48  +4.2%
      [NEW]     +48 _GLOBAL__sub_I_transport.cc                                                              +48  [NEW]
  +0.1%     +46 src/core/ext/transport/chttp2/transport/chttp2_transport.cc                              +46  +0.1%
       +96%     +46 _GLOBAL__sub_I_chttp2_transport.cc                                                       +46   +96%
  +3.3%     +46 src/core/lib/iomgr/ev_posix.cc                                                           +46  +3.3%
       +96%     +46 _GLOBAL__sub_I_ev_posix.cc                                                               +46   +96%
  +0.6%     +32 src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc                 +32  +0.6%
      +2.2%     +38 rr_connectivity_changed_locked                                                           +38  +2.2%

 -------------- SHRINKING                                                                            --------------
  -0.7%     -32 src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc                   -32  -0.7%
      -2.5%     -38 pf_connectivity_changed_locked                                                           -38  -2.5%

  +0.3% +3.36Ki TOTAL                                                                                 +270Ki  +4.2%


****************************************************************

libgrpc++.so

     VM SIZE              FILE SIZE
 ++++++++++++++ GROWIN ++++++++++++++
  [ = ]       0 [None]    +248  +0.0%

  [ = ]       0 TOTAL     +248  +0.0%



@grpc-testing
Copy link
Copy Markdown

[trickle] No significant performance differences

@grpc-testing
Copy link
Copy Markdown

[microbenchmarks] No significant performance differences

@grpc-testing
Copy link
Copy Markdown

****************************************************************

libgrpc.so

     VM SIZE                                                                                            FILE SIZE
 ++++++++++++++ GROWING                                                                              ++++++++++++++
  +0.4% +2.35Ki [None]                                                                                +269Ki  +4.6%
      +0.4% +2.00Ki [Unmapped]                                                                            +269Ki  +4.7%
      +2.5%     +30 [None]                                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_alarm_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_auth_context_refcount                                                           0  [ = ]
     +23e2%     +23 grpc_trace_chttp2_refcount                                                                 0  [ = ]
     +23e2%     +23 grpc_trace_closure                                                                         0  [ = ]
     +23e2%     +23 grpc_trace_cq_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_error_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_fd_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_lb_policy_refcount                                                              0  [ = ]
     +23e2%     +23 grpc_trace_metadata                                                                        0  [ = ]
     +23e2%     +23 grpc_trace_pending_tags                                                                    0  [ = ]
     +23e2%     +23 grpc_trace_pollable_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_resolver_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_security_connector_refcount                                                     0  [ = ]
     +23e2%     +23 grpc_trace_stream_refcount                                                                 0  [ = ]
  +6.4%    +368 src/core/ext/filters/client_channel/subchannel.cc                                       +368  +6.4%
      [NEW]    +806 on_subchannel_connected                                                                 +806  [NEW]
      [NEW]    +338 grpc_connected_subchannel::CreateCall                                                   +338  [NEW]
      [NEW]    +260 on_connected_subchannel_connectivity_changed                                            +260  [NEW]
      [NEW]     +76 grpc_connected_subchannel::NotifyOnStateChange                                           +76  [NEW]
      [NEW]     +73 grpc_connected_subchannel::Ping                                                          +73  [NEW]
     +12e2%     +58 grpc_connected_subchannel_unref                                                          +58 +12e2%
      +407%     +57 grpc_connected_subchannel_ref                                                            +57  +407%
      [NEW]     +48 grpc_connected_subchannel::grpc_connected_subchannel                                     +48  [NEW]
      [NEW]     +41 grpc_connected_subchannel::Unref                                                         +41  [NEW]
      [NEW]     +27 grpc_connected_subchannel::Ref                                                           +27  [NEW]
      +7.3%     +18 [Unmapped]                                                                               +18  +7.3%
      +0.8%      +3 maybe_start_connecting_locked                                                             +3  +0.8%
  +1.6%    +105 src/core/lib/iomgr/error.cc                                                             +105  +1.6%
      [NEW]    +103 _GLOBAL__sub_I_error.cc                                                                 +103  [NEW]
      [NEW]      +2 grpc_core::DebugOnlyTraceFlag::~DebugOnlyTraceFlag                                        +2  [NEW]
  +1.0%     +87 src/core/lib/surface/completion_queue.cc                                                 +87  +1.0%
       +58%     +87 _GLOBAL__sub_I_completion_queue.cc                                                       +87   +58%
  +7.5%     +48 src/core/ext/filters/client_channel/lb_policy.cc                                         +48  +7.5%
      [NEW]     +48 _GLOBAL__sub_I_lb_policy.cc                                                              +48  [NEW]
   +29%     +48 src/core/ext/filters/client_channel/resolver.cc                                          +48   +29%
      [NEW]     +48 _GLOBAL__sub_I_resolver.cc                                                               +48  [NEW]
  +0.4%     +48 src/core/lib/iomgr/ev_epollex_linux.cc                                                   +48  +0.4%
      [NEW]    +193 pollset_kick_all(grpc_pollset*) [clone .isra.9]                                         +193  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_ev_epollex_linux.cc                                                       +48  [NEW]
  +1.5%     +48 src/core/lib/security/context/security_context.cc                                        +48  +1.5%
      [NEW]     +48 _GLOBAL__sub_I_security_context.cc                                                       +48  [NEW]
  +0.5%     +48 src/core/lib/security/transport/security_connector.cc                                    +48  +0.5%
      [NEW]    +537 fake_check_peer(grpc_security_connector*, tsi_peer, grpc_auth_context**, grpc_closur    +537  [NEW]
      [NEW]    +404 ssl_check_peer(grpc_security_connector*, char const*, tsi_peer const*, grpc_auth_con    +404  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_security_connector.cc                                                     +48  [NEW]
  +4.5%     +48 src/core/lib/surface/alarm.cc                                                            +48  +4.5%
      [NEW]    +242 alarm_unref(grpc_alarm*) [clone .part.2]                                                +242  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_alarm.cc                                                                  +48  [NEW]
  +1.4%     +48 src/core/lib/transport/metadata.cc                                                       +48  +1.4%
      [NEW]     +48 _GLOBAL__sub_I_metadata.cc                                                               +48  [NEW]
  +4.2%     +48 src/core/lib/transport/transport.cc                                                      +48  +4.2%
      [NEW]     +48 _GLOBAL__sub_I_transport.cc                                                              +48  [NEW]
  +0.1%     +46 src/core/ext/transport/chttp2/transport/chttp2_transport.cc                              +46  +0.1%
       +96%     +46 _GLOBAL__sub_I_chttp2_transport.cc                                                       +46   +96%
  +3.3%     +46 src/core/lib/iomgr/ev_posix.cc                                                           +46  +3.3%
       +96%     +46 _GLOBAL__sub_I_ev_posix.cc                                                               +46   +96%
  +0.6%     +32 src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc                 +32  +0.6%
      +2.2%     +38 rr_connectivity_changed_locked                                                           +38  +2.2%

 -------------- SHRINKING                                                                            --------------
  -0.7%     -32 src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc                   -32  -0.7%
      -2.5%     -38 pf_connectivity_changed_locked                                                           -38  -2.5%

  +0.3% +3.36Ki TOTAL                                                                                 +270Ki  +4.2%


****************************************************************

libgrpc++.so

     VM SIZE              FILE SIZE
 ++++++++++++++ GROWIN ++++++++++++++
  [ = ]       0 [None]    +248  +0.0%

  [ = ]       0 TOTAL     +248  +0.0%



@grpc-testing
Copy link
Copy Markdown

[trickle] No significant performance differences

#define GRPC_SUBCHANNEL_REF_EXTRA_ARGS
#endif

class grpc_connected_subchannel : public grpc_core::RefCountedWithTracing {
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we may want to rename the class to follow C++ class naming conventions.

@grpc-testing
Copy link
Copy Markdown

[microbenchmarks] No significant performance differences

@markdroth
Copy link
Copy Markdown
Member

This looks really good! Most of my comments are minor.


Reviewed 10 of 10 files at r1.
Review status: all files reviewed at latest revision, 18 unresolved discussions, some commit checks failed.


src/core/ext/filters/client_channel/lb_policy.h, line 163 at r1 (raw file):

int grpc_lb_policy_pick_locked(grpc_lb_policy* policy,
                               const grpc_lb_policy_pick_args* pick_args,
                               grpc_connected_subchannel** target,

Should we change this to return a RefCountedPtr?

This might be easier once #13857 is merged. We should probably discuss which of these PRs we should try to merge first.


src/core/ext/filters/client_channel/subchannel.cc, line 169 at r1 (raw file):

}

grpc_connected_subchannel* grpc_connected_subchannel_ref(

Shouldn't these two functions go away?


src/core/ext/filters/client_channel/subchannel.cc, line 555 at r1 (raw file):

      }
      maybe_start_connecting_locked(c);
      goto done;

Instead of using a goto here, can we just use an else clause for the code on lines 560-570?


src/core/ext/filters/client_channel/subchannel.cc, line 773 at r1 (raw file):

void grpc_connected_subchannel::Unref(const grpc_core::DebugLocation& location,
                                      const char* reason) {
  GRPC_CHANNEL_STACK_UNREF(channel_stack_, REF_REASON);

Instead of taking and releasing refs to the channel stack every time we take and release a ref to the connected subchannel, why don't we just take a single ref to the channel stack in the ctor and release it in the dtor?

This should ideally eliminate the need to override the Ref() and Unref() methods.


src/core/ext/filters/client_channel/subchannel.h, line 51 at r1 (raw file):

#define GRPC_SUBCHANNEL_WEAK_UNREF(p, r) \
  grpc_subchannel_weak_unref((p), __FILE__, __LINE__, (r))
#define GRPC_CONNECTED_SUBCHANNEL_REF(p, r) \

These two macros should go away.


src/core/ext/filters/client_channel/subchannel.h, line 68 at r1 (raw file):

#define GRPC_SUBCHANNEL_WEAK_REF(p, r) grpc_subchannel_weak_ref((p))
#define GRPC_SUBCHANNEL_WEAK_UNREF(p, r) grpc_subchannel_weak_unref((p))
#define GRPC_CONNECTED_SUBCHANNEL_REF(p, r) grpc_connected_subchannel_ref((p))

Same here.


src/core/ext/filters/client_channel/subchannel.h, line 76 at r1 (raw file):

Previously, dgquintas (David G. Quintas) wrote…

Yes, we may want to rename the class to follow C++ class naming conventions.

Yup. Why not go ahead and do that in this PR?


src/core/ext/filters/client_channel/subchannel.h, line 76 at r1 (raw file):

#endif

class grpc_connected_subchannel : public grpc_core::RefCountedWithTracing {

We should probably put this new code in the grpc_core namespace, since we've C++-ified it.


src/core/ext/filters/client_channel/subchannel.h, line 88 at r1 (raw file):

  };

  grpc_connected_subchannel(grpc_channel_stack* channel_stack);

This should be explicit.


src/core/ext/filters/client_channel/subchannel.h, line 98 at r1 (raw file):

  void Ping(grpc_closure* on_initiate, grpc_closure* on_ack);

  grpc_error* CreateCall(const CallArgs* args, grpc_subchannel_call** call);

The first arg could be a reference instead of a pointer.


src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc, line 415 at r1 (raw file):

          GRPC_ERROR_REF(error), "selected_not_ready+switch_to_update");
    } else {
      if (sd->curr_connectivity_state < GRPC_CHANNEL_TRANSIENT_FAILURE) {

Seems very weird to use < for an enum. How about explicitly checking for the values we're interested in here?


src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc, line 415 at r1 (raw file):

          GRPC_ERROR_REF(error), "selected_not_ready+switch_to_update");
    } else {
      if (sd->curr_connectivity_state < GRPC_CHANNEL_TRANSIENT_FAILURE) {

Why move this block up here from its oriignal position? I'm pretty sure this is unsafe, because if we unref the subchannel list, we will then try to access sd->curr_connectivity_state without holding a ref.


src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc, line 432 at r1 (raw file):

      // really want to take any action instead of waiting for the selected
      // subchannel reconnecting.
      if (sd->curr_connectivity_state == GRPC_CHANNEL_SHUTDOWN ||

SHUTDOWN state should never happen here anymore.


src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc, line 449 at r1 (raw file):

  if (sd->curr_connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
    if (sd->connected_subchannel != nullptr) {
      GRPC_CONNECTED_SUBCHANNEL_UNREF(sd->connected_subchannel,

Might be a good idea to refactor grpc_lb_subchannel_data_unref_subchannel() such that there's a canned helper function to do this.


src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc, line 457 at r1 (raw file):

  }
  // If the sd's new state is SHUTDOWN, unref the subchannel.
  else if (sd->curr_connectivity_state == GRPC_CHANNEL_SHUTDOWN) {

This should never happen anymore.


src/core/lib/debug/trace.h, line 91 at r1 (raw file):

typedef TraceFlag DebugOnlyTraceFlag;
#else
class DebugOnlyTraceFlag : public TraceFlag {

The intent of this interface was that for non-debug builds, DebugOnlyTraceFlag does not actually take up any space -- the compiler elides it completely. I don't think that's the case if it inherits from the real implementation.


src/core/lib/support/ref_counted.h, line 101 at r1 (raw file):

  RefCountedWithTracing(const RefCountedWithTracing&) = delete;
  RefCountedWithTracing& operator=(const RefCountedWithTracing&) = delete;
  GRPC_ABSTRACT_BASE_CLASS

We also need this in the RefCounted class.

(I had added this in #13684, but it's fine to do it here too, or just move this to its own PR if you want. Whichever one gets merged first will win.)


src/core/lib/support/ref_counted.h, line 113 at r1 (raw file):

  }

  virtual ~RefCountedWithTracing() {}

Why remove this? We generally want all destructors to be virtual for a base class.


Comments from Reviewable

@markdroth
Copy link
Copy Markdown
Member

Review status: all files reviewed at latest revision, 18 unresolved discussions, some commit checks failed.


src/core/ext/filters/client_channel/lb_policy.h, line 163 at r1 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

Should we change this to return a RefCountedPtr?

This might be easier once #13857 is merged. We should probably discuss which of these PRs we should try to merge first.

I've just merged #13857, so you'll have to merge the changes into this PR.


src/core/lib/debug/trace.h, line 91 at r1 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

The intent of this interface was that for non-debug builds, DebugOnlyTraceFlag does not actually take up any space -- the compiler elides it completely. I don't think that's the case if it inherits from the real implementation.

I think I'm running into this same problem in #13684. I'm going to try to come up with a better fix as part of that PR.


Comments from Reviewable

@grpc-testing
Copy link
Copy Markdown

****************************************************************

libgrpc.so

     VM SIZE                                                                                            FILE SIZE
 ++++++++++++++ GROWING                                                                              ++++++++++++++
  +0.5% +2.99Ki [None]                                                                                +276Ki  +4.8%
      +0.5% +2.64Ki [Unmapped]                                                                            +276Ki  +4.8%
      +2.5%     +30 [None]                                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_alarm_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_auth_context_refcount                                                           0  [ = ]
     +23e2%     +23 grpc_trace_chttp2_refcount                                                                 0  [ = ]
     +23e2%     +23 grpc_trace_closure                                                                         0  [ = ]
     +23e2%     +23 grpc_trace_cq_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_error_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_fd_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_lb_policy_refcount                                                              0  [ = ]
     +23e2%     +23 grpc_trace_metadata                                                                        0  [ = ]
     +23e2%     +23 grpc_trace_pending_tags                                                                    0  [ = ]
     +23e2%     +23 grpc_trace_pollable_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_resolver_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_security_connector_refcount                                                     0  [ = ]
     +23e2%     +23 grpc_trace_stream_refcount                                                                 0  [ = ]
  +6.8%    +944 src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc                          +944  +6.8%
      [NEW] +1.57Ki rr_handover_locked(glb_lb_policy*) [clone .part.8]                                   +1.57Ki  [NEW]
      [NEW] +1.36Ki query_for_backends_locked(glb_lb_policy*) [clone .part.11]                           +1.36Ki  [NEW]
      [NEW]    +708 glb_pick_locked                                                                         +708  [NEW]
      [NEW]    +693 pick_from_internal_rr_locked                                                            +693  [NEW]
      [NEW]    +590 glb_shutdown_locked                                                                     +590  [NEW]
      [NEW]    +433 wrapped_rr_closure                                                                      +433  [NEW]
      [NEW]    +314 glb_cancel_pick_locked                                                                  +314  [NEW]
      [NEW]    +150 add_pending_pick                                                                        +150  [NEW]
      +124%    +134 glb_ping_one_locked                                                                     +134  +124%
      [NEW]    +119 glb_rr_connectivity_changed_locked                                                      +119  [NEW]
      [NEW]    +113 initial_metadata_add_lb_token                                                           +113  [NEW]
       +13%     +48 [Unmapped]                                                                               +48   +13%
  +6.4%    +368 src/core/ext/filters/client_channel/subchannel.cc                                       +368  +6.4%
      [NEW]    +806 on_subchannel_connected                                                                 +806  [NEW]
      [NEW]    +338 grpc_connected_subchannel::CreateCall                                                   +338  [NEW]
      [NEW]    +260 on_connected_subchannel_connectivity_changed                                            +260  [NEW]
      [NEW]     +76 grpc_connected_subchannel::NotifyOnStateChange                                           +76  [NEW]
      [NEW]     +73 grpc_connected_subchannel::Ping                                                          +73  [NEW]
     +12e2%     +58 grpc_connected_subchannel_unref                                                          +58 +12e2%
      +407%     +57 grpc_connected_subchannel_ref                                                            +57  +407%
      [NEW]     +48 grpc_connected_subchannel::grpc_connected_subchannel                                     +48  [NEW]
      [NEW]     +41 grpc_connected_subchannel::Unref                                                         +41  [NEW]
      [NEW]     +27 grpc_connected_subchannel::Ref                                                           +27  [NEW]
      +7.3%     +18 [Unmapped]                                                                               +18  +7.3%
      +0.8%      +3 maybe_start_connecting_locked                                                             +3  +0.8%
   +39%    +192 src/core/ext/filters/client_channel/lb_policy.cc                                        +192   +39%
      [NEW]     +60 grpc_lb_policy_weak_unref                                                                +60  [NEW]
       +76%     +51 grpc_lb_policy_unref                                                                     +51   +76%
      [NEW]     +48 _GLOBAL__sub_I_lb_policy.cc                                                              +48  [NEW]
       +15%     +19 [Unmapped]                                                                               +19   +15%
      [NEW]     +19 shutdown_locked                                                                          +19  [NEW]
      [NEW]      +7 grpc_lb_policy_weak_ref                                                                   +7  [NEW]
      [NEW]      +6 grpc_lb_policy_pick_locked                                                                +6  [NEW]
      [NEW]      +6 grpc_lb_policy_cancel_pick_locked                                                         +6  [NEW]
       +11%      +1 grpc_lb_policy_ref                                                                        +1   +11%
  +0.8%    +112 src/core/ext/filters/client_channel/client_channel.cc                                   +112  +0.8%
       +86%     +74 pick_callback_done_locked                                                                +74   +86%
      +9.3%     +61 pick_callback_start_locked                                                               +61  +9.3%
       +19%     +59 cc_destroy_call_elem                                                                     +59   +19%
      +0.7%      +1 pick_callback_cancel_locked                                                               +1  +0.7%
  +1.6%    +105 src/core/lib/iomgr/error.cc                                                             +105  +1.6%
      [NEW]    +103 _GLOBAL__sub_I_error.cc                                                                 +103  [NEW]
      [NEW]      +2 grpc_core::DebugOnlyTraceFlag::~DebugOnlyTraceFlag                                        +2  [NEW]
  +1.0%     +87 src/core/lib/surface/completion_queue.cc                                                 +87  +1.0%
       +58%     +87 _GLOBAL__sub_I_completion_queue.cc                                                       +87   +58%
   +29%     +48 src/core/ext/filters/client_channel/resolver.cc                                          +48   +29%
      [NEW]     +48 _GLOBAL__sub_I_resolver.cc                                                               +48  [NEW]
  +0.4%     +48 src/core/lib/iomgr/ev_epollex_linux.cc                                                   +48  +0.4%
      [NEW]    +193 pollset_kick_all(grpc_pollset*) [clone .isra.9]                                         +193  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_ev_epollex_linux.cc                                                       +48  [NEW]
  +1.5%     +48 src/core/lib/security/context/security_context.cc                                        +48  +1.5%
      [NEW]     +48 _GLOBAL__sub_I_security_context.cc                                                       +48  [NEW]
  +0.5%     +48 src/core/lib/security/transport/security_connector.cc                                    +48  +0.5%
      [NEW]    +537 fake_check_peer(grpc_security_connector*, tsi_peer, grpc_auth_context**, grpc_closur    +537  [NEW]
      [NEW]    +404 ssl_check_peer(grpc_security_connector*, char const*, tsi_peer const*, grpc_auth_con    +404  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_security_connector.cc                                                     +48  [NEW]
  +4.5%     +48 src/core/lib/surface/alarm.cc                                                            +48  +4.5%
      [NEW]    +242 alarm_unref(grpc_alarm*) [clone .part.2]                                                +242  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_alarm.cc                                                                  +48  [NEW]
  +1.4%     +48 src/core/lib/transport/metadata.cc                                                       +48  +1.4%
      [NEW]     +48 _GLOBAL__sub_I_metadata.cc                                                               +48  [NEW]
  +4.2%     +48 src/core/lib/transport/transport.cc                                                      +48  +4.2%
      [NEW]     +48 _GLOBAL__sub_I_transport.cc                                                              +48  [NEW]
  +0.1%     +46 src/core/ext/transport/chttp2/transport/chttp2_transport.cc                              +46  +0.1%
       +96%     +46 _GLOBAL__sub_I_chttp2_transport.cc                                                       +46   +96%
  +3.3%     +46 src/core/lib/iomgr/ev_posix.cc                                                           +46  +3.3%
       +96%     +46 _GLOBAL__sub_I_ev_posix.cc                                                               +46   +96%
  +0.6%     +32 src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc                 +32  +0.6%
      [NEW]    +429 rr_pick_locked                                                                          +429  [NEW]
      [NEW]    +393 rr_shutdown_locked                                                                      +393  [NEW]
      [NEW]    +279 rr_cancel_pick_locked                                                                   +279  [NEW]
      +4.1%     +70 rr_connectivity_changed_locked                                                           +70  +4.1%
      +1.7%      +5 rr_cancel_picks_locked                                                                    +5  +1.7%

 -------------- SHRINKING                                                                            --------------
  -2.6%    -128 src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc                  -128  -2.6%
      [DEL]    -481 pf_shutdown_locked                                                                      -481  [DEL]
      [DEL]    -274 pf_cancel_pick_locked                                                                   -274  [DEL]
      [DEL]    -103 pf_pick_locked                                                                          -103  [DEL]
      -3.5%     -54 pf_connectivity_changed_locked                                                           -54  -3.5%
     -20.1%     -28 [Unmapped]                                                                               -28 -20.1%
      -1.0%      -3 pf_cancel_picks_locked                                                                    -3  -1.0%

  +0.4% +5.08Ki TOTAL                                                                                 +278Ki  +4.4%


****************************************************************

libgrpc++.so

     VM SIZE              FILE SIZE
 ++++++++++++++ GROWIN ++++++++++++++
  [ = ]       0 [None]    +248  +0.0%

  [ = ]       0 TOTAL     +248  +0.0%



@grpc-testing
Copy link
Copy Markdown

[trickle] No significant performance differences

@grpc-testing
Copy link
Copy Markdown

[microbenchmarks] Performance differences noted:
Benchmark                                                       call_initial_size-median
--------------------------------------------------------------  --------------------------
BM_StreamingPingPong<MinTCP, NoOpMutator, NoOpMutator>/0/1      -7%
BM_StreamingPingPong<MinTCP, NoOpMutator, NoOpMutator>/1/1      -7%
BM_StreamingPingPong<MinTCP, NoOpMutator, NoOpMutator>/32768/1  -7%
BM_StreamingPingPong<MinTCP, NoOpMutator, NoOpMutator>/4096/1   -7%
BM_StreamingPingPong<MinTCP, NoOpMutator, NoOpMutator>/512/1    -7%
BM_StreamingPingPong<MinTCP, NoOpMutator, NoOpMutator>/64/1     -7%
BM_StreamingPingPong<MinTCP, NoOpMutator, NoOpMutator>/8/1      -7%

@grpc-testing
Copy link
Copy Markdown

****************************************************************

libgrpc.so

     VM SIZE                                                                                            FILE SIZE
 ++++++++++++++ GROWING                                                                              ++++++++++++++
  +0.5% +2.92Ki [None]                                                                                +263Ki  +4.5%
      +0.5% +2.52Ki [Unmapped]                                                                            +263Ki  +4.6%
      [NEW]     +32 vtable for grpc_core::ConnectedSubchannel                                                +32  [NEW]
      [NEW]     +32 vtable for grpc_core::RefCountedWithTracing                                              +32  [NEW]
      +2.5%     +30 [None]                                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_alarm_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_auth_context_refcount                                                           0  [ = ]
     +23e2%     +23 grpc_trace_chttp2_refcount                                                                 0  [ = ]
     +23e2%     +23 grpc_trace_closure                                                                         0  [ = ]
     +23e2%     +23 grpc_trace_cq_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_error_refcount                                                                  0  [ = ]
     +23e2%     +23 grpc_trace_fd_refcount                                                                     0  [ = ]
     +23e2%     +23 grpc_trace_lb_policy_refcount                                                              0  [ = ]
     +23e2%     +23 grpc_trace_metadata                                                                        0  [ = ]
     +23e2%     +23 grpc_trace_pending_tags                                                                    0  [ = ]
     +23e2%     +23 grpc_trace_pollable_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_resolver_refcount                                                               0  [ = ]
     +23e2%     +23 grpc_trace_security_connector_refcount                                                     0  [ = ]
     +23e2%     +23 grpc_trace_stream_refcount                                                                 0  [ = ]
  +6.0%    +347 src/core/ext/filters/client_channel/subchannel.cc                                       +347  +6.0%
      [NEW]    +806 on_subchannel_connected                                                                 +806  [NEW]
      [NEW]    +322 grpc_core::ConnectedSubchannel::CreateCall                                              +322  [NEW]
      [NEW]    +308 on_connected_subchannel_connectivity_changed                                            +308  [NEW]
      [NEW]     +77 grpc_core::ConnectedSubchannel::ConnectedSubchannel                                      +77  [NEW]
      [NEW]     +76 grpc_core::ConnectedSubchannel::NotifyOnStateChange                                      +76  [NEW]
      [NEW]     +73 grpc_core::ConnectedSubchannel::Ping                                                     +73  [NEW]
      [NEW]     +41 ConnectedSubchannel_unref                                                                +41  [NEW]
       +12%     +31 [Unmapped]                                                                               +31   +12%
      [NEW]     +23 grpc_core::ConnectedSubchannel::~ConnectedSubchannel                                     +23  [NEW]
      [NEW]     +18 ConnectedSubchannel_ref                                                                  +18  [NEW]
      [NEW]     +14 grpc_core::ConnectedSubchannel::~ConnectedSubchannel                                     +14  [NEW]
      [NEW]      +9 grpc_core::RefCountedWithTracing::~RefCountedWithTracing                                  +9  [NEW]
      +0.8%      +3 maybe_start_connecting_locked                                                             +3  +0.8%
      [NEW]      +2 grpc_core::RefCountedWithTracing::~RefCountedWithTracing                                  +2  [NEW]
  +1.6%    +105 src/core/lib/iomgr/error.cc                                                             +105  +1.6%
      [NEW]    +103 _GLOBAL__sub_I_error.cc                                                                 +103  [NEW]
      [NEW]      +2 grpc_core::DebugOnlyTraceFlag::~DebugOnlyTraceFlag                                        +2  [NEW]
  +1.0%     +87 src/core/lib/surface/completion_queue.cc                                                 +87  +1.0%
       +58%     +87 _GLOBAL__sub_I_completion_queue.cc                                                       +87   +58%
  +1.4%     +80 src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc                 +80  +1.4%
      +5.0%     +84 rr_connectivity_changed_locked                                                           +84  +5.0%
  +9.7%     +48 src/core/ext/filters/client_channel/lb_policy.cc                                         +48  +9.7%
      [NEW]     +48 _GLOBAL__sub_I_lb_policy.cc                                                              +48  [NEW]
   +29%     +48 src/core/ext/filters/client_channel/resolver.cc                                          +48   +29%
      [NEW]     +48 _GLOBAL__sub_I_resolver.cc                                                               +48  [NEW]
  +0.4%     +48 src/core/lib/iomgr/ev_epollex_linux.cc                                                   +48  +0.4%
      [NEW]    +193 pollset_kick_all(grpc_pollset*) [clone .isra.9]                                         +193  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_ev_epollex_linux.cc                                                       +48  [NEW]
  +1.5%     +48 src/core/lib/security/context/security_context.cc                                        +48  +1.5%
      [NEW]     +48 _GLOBAL__sub_I_security_context.cc                                                       +48  [NEW]
  +0.5%     +48 src/core/lib/security/transport/security_connector.cc                                    +48  +0.5%
      [NEW]    +537 fake_check_peer(grpc_security_connector*, tsi_peer, grpc_auth_context**, grpc_closur    +537  [NEW]
      [NEW]    +404 ssl_check_peer(grpc_security_connector*, char const*, tsi_peer const*, grpc_auth_con    +404  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_security_connector.cc                                                     +48  [NEW]
  +4.5%     +48 src/core/lib/surface/alarm.cc                                                            +48  +4.5%
      [NEW]    +242 alarm_unref(grpc_alarm*) [clone .part.2]                                                +242  [NEW]
      [NEW]     +48 _GLOBAL__sub_I_alarm.cc                                                                  +48  [NEW]
  +1.4%     +48 src/core/lib/transport/metadata.cc                                                       +48  +1.4%
      [NEW]     +48 _GLOBAL__sub_I_metadata.cc                                                               +48  [NEW]
  +4.2%     +48 src/core/lib/transport/transport.cc                                                      +48  +4.2%
      [NEW]     +48 _GLOBAL__sub_I_transport.cc                                                              +48  [NEW]
  +0.1%     +46 src/core/ext/transport/chttp2/transport/chttp2_transport.cc                              +46  +0.1%
       +96%     +46 _GLOBAL__sub_I_chttp2_transport.cc                                                       +46   +96%
  +3.3%     +46 src/core/lib/iomgr/ev_posix.cc                                                           +46  +3.3%
       +96%     +46 _GLOBAL__sub_I_ev_posix.cc                                                               +46   +96%

 -------------- SHRINKING                                                                            --------------
  -2.3%    -112 src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc                  -112  -2.3%
      -6.9%    -106 pf_connectivity_changed_locked                                                          -106  -6.9%
      -4.3%      -6 [Unmapped]                                                                                -6  -4.3%

  +0.3% +3.88Ki TOTAL                                                                                 +264Ki  +4.1%


****************************************************************

libgrpc++.so

     VM SIZE              FILE SIZE
 ++++++++++++++ GROWIN ++++++++++++++
  [ = ]       0 [None]    +248  +0.0%

  [ = ]       0 TOTAL     +248  +0.0%



@grpc-testing
Copy link
Copy Markdown

[trickle] No significant performance differences

@grpc-testing
Copy link
Copy Markdown

[microbenchmarks] Performance differences noted:
Benchmark                                      cpu_time    real_time
---------------------------------------------  ----------  -----------
BM_PumpStreamClientToServer<InProcess>/262144  -7%         -7%
BM_PumpStreamServerToClient<InProcess>/32768   -4%         -4%

@grpc-testing
Copy link
Copy Markdown

[microbenchmarks] Performance differences noted:
Benchmark                                   cpu_time    real_time
------------------------------------------  ----------  -----------
BM_HasClearGrpcStatus<ErrorWithGrpcStatus>  +4%         +4%
BM_MetadataRefUnrefStatic                   -20%        -20%

@markdroth
Copy link
Copy Markdown
Member

This looks good to me. The only thing I'm waiting on to approve this is that I'd like to get #13984 merged first, and that's waiting on your review, so please take a look when you have a chance. Thanks!

@dgquintas
Copy link
Copy Markdown
Contributor Author

#13984 has been merged. Approval time?

@markdroth
Copy link
Copy Markdown
Member

Reviewed 1 of 1 files at r6, 3 of 4 files at r7.
Review status: all files reviewed at latest revision, 1 unresolved discussion, some commit checks failed.


src/core/lib/support/ref_counted.h, line 104 at r7 (raw file):

  RefCountedWithTracing(const RefCountedWithTracing&) = delete;
  RefCountedWithTracing& operator=(const RefCountedWithTracing&) = delete;
  GRPC_ABSTRACT_BASE_CLASS

Looks like you've got this macro here twice now.


Comments from Reviewable

@dgquintas
Copy link
Copy Markdown
Contributor Author

Review status: all files reviewed at latest revision, 1 unresolved discussion, some commit checks failed.


src/core/lib/support/ref_counted.h, line 104 at r7 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

Looks like you've got this macro here twice now.

Done.


Comments from Reviewable

@grpc-testing
Copy link
Copy Markdown

****************************************************************

libgrpc.so

     VM SIZE                                                                                        FILE SIZE
 ++++++++++++++ GROWING                                                                          ++++++++++++++
  +0.1%    +765 [None]                                                                            +261Ki  +4.5%
      +0.1%    +701 [Unmapped]                                                                        +261Ki  +4.5%
      [NEW]     +32 vtable for grpc_core::ConnectedSubchannel                                            +32  [NEW]
      [NEW]     +32 vtable for grpc_core::RefCountedWithTracing                                          +32  [NEW]
   +13%    +720 src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc            +720   +13%
       +16%    +273 rr_connectivity_changed_locked                                                      +273   +16%
       +31%    +119 rr_ping_one_locked                                                                  +119   +31%
       +29%    +106 rr_pick_locked                                                                      +106   +29%
       +32%     +87 rr_cancel_pick_locked                                                                +87   +32%
       +28%     +82 rr_cancel_picks_locked                                                               +82   +28%
       +14%     +67 rr_shutdown_locked                                                                   +67   +14%
  +6.7%    +384 src/core/ext/filters/client_channel/subchannel.cc                                   +384  +6.7%
      [NEW]    +822 on_subchannel_connected                                                             +822  [NEW]
      [NEW]    +322 grpc_core::ConnectedSubchannel::CreateCall                                          +322  [NEW]
      [NEW]    +290 on_connected_subchannel_connectivity_changed                                        +290  [NEW]
      [NEW]     +76 grpc_core::ConnectedSubchannel::NotifyOnStateChange                                  +76  [NEW]
      [NEW]     +74 grpc_core::ConnectedSubchannel::ConnectedSubchannel                                  +74  [NEW]
      [NEW]     +73 grpc_core::ConnectedSubchannel::Ping                                                 +73  [NEW]
      +888%     +71 grpc_subchannel_get_connected_subchannel                                             +71  +888%
       +12%     +36 grpc_subchannel_unref                                                                +36   +12%
       +42%     +32 subchannel_call_destroy                                                              +32   +42%
      [NEW]     +23 grpc_core::ConnectedSubchannel::~ConnectedSubchannel                                 +23  [NEW]
      [NEW]     +14 grpc_core::ConnectedSubchannel::~ConnectedSubchannel                                 +14  [NEW]
      +3.2%      +8 [Unmapped]                                                                            +8  +3.2%
  +6.8%    +336 src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc              +336  +6.8%
      +9.7%     +94 pf_update_locked                                                                     +94  +9.7%
      [NEW]     +89 destroy_unselected_subchannels_locked(pick_first_lb_policy*) [clone .isra.2]         +89  [NEW]
       +32%     +87 pf_cancel_pick_locked                                                                +87   +32%
       +14%     +67 pf_shutdown_locked                                                                   +67   +14%
       +62%     +64 pf_pick_locked                                                                       +64   +62%
      +1.9%     +29 pf_connectivity_changed_locked                                                       +29  +1.9%
  +1.1%    +160 src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc                      +160  +1.1%
      [NEW] +1.50Ki rr_handover_locked(glb_lb_policy*) [clone .part.11]                              +1.50Ki  [NEW]
      [NEW] +1.36Ki query_for_backends_locked(glb_lb_policy*) [clone .part.13]                       +1.36Ki  [NEW]
       +15%    +105 glb_shutdown_locked                                                                 +105   +15%
       +20%     +62 glb_cancel_pick_locked                                                               +62   +20%
  +0.5%     +75 src/core/ext/filters/client_channel/client_channel.cc                                +75  +0.5%
       +22%     +68 cc_destroy_call_elem                                                                 +68   +22%
      [NEW]      +9 grpc_core::RefCountedWithTracing::~RefCountedWithTracing                              +9  [NEW]
      [NEW]      +2 grpc_core::RefCountedWithTracing::~RefCountedWithTracing                              +2  [NEW]
  +2.9%     +64 src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc                     +64  +2.9%
       +33%     +72 grpc_lb_subchannel_data_unref_subchannel                                             +72   +33%

  +0.2% +2.45Ki TOTAL                                                                             +263Ki  +4.1%


****************************************************************

libgrpc++.so

     VM SIZE        FILE SIZE
 ++++++++++++++  ++++++++++++++

  [ = ]       0        0  [ = ]



Copy link
Copy Markdown
Member

@markdroth markdroth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice work!

@grpc-testing
Copy link
Copy Markdown

[trickle] No significant performance differences

@grpc-testing
Copy link
Copy Markdown

[microbenchmarks] No significant performance differences

@grpc-testing
Copy link
Copy Markdown

****************************************************************

libgrpc.so

     VM SIZE                                                                                        FILE SIZE
 ++++++++++++++ GROWING                                                                          ++++++++++++++
  +0.1%    +765 [None]                                                                            +261Ki  +4.5%
      +0.1%    +701 [Unmapped]                                                                        +261Ki  +4.5%
      [NEW]     +32 vtable for grpc_core::ConnectedSubchannel                                            +32  [NEW]
      [NEW]     +32 vtable for grpc_core::RefCountedWithTracing                                          +32  [NEW]
   +13%    +720 src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc            +720   +13%
       +16%    +273 rr_connectivity_changed_locked                                                      +273   +16%
       +31%    +119 rr_ping_one_locked                                                                  +119   +31%
       +29%    +106 rr_pick_locked                                                                      +106   +29%
       +32%     +87 rr_cancel_pick_locked                                                                +87   +32%
       +28%     +82 rr_cancel_picks_locked                                                               +82   +28%
       +14%     +67 rr_shutdown_locked                                                                   +67   +14%
  +6.7%    +384 src/core/ext/filters/client_channel/subchannel.cc                                   +384  +6.7%
      [NEW]    +822 on_subchannel_connected                                                             +822  [NEW]
      [NEW]    +322 grpc_core::ConnectedSubchannel::CreateCall                                          +322  [NEW]
      [NEW]    +290 on_connected_subchannel_connectivity_changed                                        +290  [NEW]
      [NEW]     +76 grpc_core::ConnectedSubchannel::NotifyOnStateChange                                  +76  [NEW]
      [NEW]     +74 grpc_core::ConnectedSubchannel::ConnectedSubchannel                                  +74  [NEW]
      [NEW]     +73 grpc_core::ConnectedSubchannel::Ping                                                 +73  [NEW]
      +888%     +71 grpc_subchannel_get_connected_subchannel                                             +71  +888%
       +12%     +36 grpc_subchannel_unref                                                                +36   +12%
       +42%     +32 subchannel_call_destroy                                                              +32   +42%
      [NEW]     +23 grpc_core::ConnectedSubchannel::~ConnectedSubchannel                                 +23  [NEW]
      [NEW]     +14 grpc_core::ConnectedSubchannel::~ConnectedSubchannel                                 +14  [NEW]
      +3.2%      +8 [Unmapped]                                                                            +8  +3.2%
  +6.8%    +336 src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc              +336  +6.8%
      +9.7%     +94 pf_update_locked                                                                     +94  +9.7%
      [NEW]     +89 destroy_unselected_subchannels_locked(pick_first_lb_policy*) [clone .isra.2]         +89  [NEW]
       +32%     +87 pf_cancel_pick_locked                                                                +87   +32%
       +14%     +67 pf_shutdown_locked                                                                   +67   +14%
       +62%     +64 pf_pick_locked                                                                       +64   +62%
      +1.9%     +29 pf_connectivity_changed_locked                                                       +29  +1.9%
  +1.1%    +160 src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc                      +160  +1.1%
      [NEW] +1.50Ki rr_handover_locked(glb_lb_policy*) [clone .part.11]                              +1.50Ki  [NEW]
      [NEW] +1.36Ki query_for_backends_locked(glb_lb_policy*) [clone .part.13]                       +1.36Ki  [NEW]
       +15%    +105 glb_shutdown_locked                                                                 +105   +15%
       +20%     +62 glb_cancel_pick_locked                                                               +62   +20%
  +0.5%     +75 src/core/ext/filters/client_channel/client_channel.cc                                +75  +0.5%
       +22%     +68 cc_destroy_call_elem                                                                 +68   +22%
      [NEW]      +9 grpc_core::RefCountedWithTracing::~RefCountedWithTracing                              +9  [NEW]
      [NEW]      +2 grpc_core::RefCountedWithTracing::~RefCountedWithTracing                              +2  [NEW]
  +2.9%     +64 src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc                     +64  +2.9%
       +33%     +72 grpc_lb_subchannel_data_unref_subchannel                                             +72   +33%

  +0.2% +2.45Ki TOTAL                                                                             +263Ki  +4.1%


****************************************************************

libgrpc++.so

     VM SIZE        FILE SIZE
 ++++++++++++++  ++++++++++++++

  [ = ]       0        0  [ = ]



@grpc-testing
Copy link
Copy Markdown

[trickle] No significant performance differences

@grpc-testing
Copy link
Copy Markdown

[microbenchmarks] No significant performance differences

@dgquintas
Copy link
Copy Markdown
Contributor Author

Issues #13148

@dgquintas dgquintas merged commit a889163 into grpc:master Jan 18, 2018
nicolasnoble added a commit to nicolasnoble/grpc that referenced this pull request Jan 26, 2018
dgquintas added a commit that referenced this pull request Jan 26, 2018
Revert "Merge pull request #13932 from dgquintas/conn_subchannel"
@lock lock bot locked as resolved and limited conversation to collaborators Jan 20, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants