rpc_server: disable BDP pings on server

The MPM gRPC server runs on a single-threaded gevent hub. gRPC's BDP
(bandwidth-estimation) probe fires repeatedly while the reclaim loop
keeps the link busy, and its ACK must return within grpcio's short,
RTT-derived internal BDP deadline. Any blocking hardware register read
(e.g. a ClkMgr PLL-lock poll) stalls all socket I/O on the hub until it
returns; , but these polls also run periodically in steady state.
When a stall outlasts the BDP deadline the server sends GOAWAY
"ping_timeout" and drops the transport. The fix is to disable BDP on
the server. The default flow-control window is fine on the LAN link,
so this costs nothing here. BDP is left enabled on the client, whose
native-threaded stack never freezes.
This commit is contained in:
Abhishek Verma 2026-08-19 11:31:17 +02:00 committed by mkoop-ni
parent dfc1ad17c3
commit a076ee6dd7

View File

@ -1116,6 +1116,11 @@ def _rpc_server_process(shared_state, port, default_args):
options=[
("grpc.max_send_message_length", MAX_GRPC_MESSAGE_SIZE),
("grpc.max_receive_message_length", MAX_GRPC_MESSAGE_SIZE),
# Disable the server's BDP (bandwidth-estimation) ping. It fires
# repeatedly and its ACK must return within grpcio's internal BDP
# timeout. The ACK may be missed if the server is stalled by ClkMgr
# PLL-lock polling, causing the server to tear down the connection.
("grpc.http2.bdp_probe", 0),
],
)