Delayed ACK
TCPの機能で、ACKを最大200ミリ秒待ってから送り、送信データや次のACKとまとめる。ACKパケットを節約できる。スループットの低い対話的な通信向けに設計されたが、Nagleアルゴリズムと組み合わさると悲惨な結果になる。
Nagle+Delayed ACKのデッドロック:Nagleは小さなデータをACKが来るまで送らず、受信側はデータが来るまでACKを送らないため、RPC1回ごとに200ミリ秒の停止が生じる。すべてのWebサーバーでNagleが無効化される(TCP_NODELAY)までは、HTTPの描画が止まる古典的な原因だった。最近のLinuxでは、ソケットごとにTCP_QUICKACKを設定して一時的にDelayed ACKを無効にできる。小さなメッセージが飛び交うマイクロサービスでは、テールレイテンシの問題になる。Nagle+Delayed ACKの組み合わせはよく知られたアンチパターンで、小さなパケットで200ミリ秒のスパイクが見えたら、まずここを疑うとよい。