常に **TCP_NODELAY** になっています。

2025/12/23 6:09

常に **TCP_NODELAY** になっています。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

概要:
この記事では、現代の分散システムにおいては

TCP_NODELAY
を有効にする(すなわち Nagle のアルゴリズムを無効化する)ことが最良のプラクティスであると主張しています。現在、そのブロッキング動作は不要なレイテンシーだけを増やすだけになるためです。開発者はレイテンシーのデバッグ時にこのフラグを定期的に確認し、多くが単にオンにすることで数時間分の遅延を解消したと報告しています。Nagle は(RFC 896、1984)単一バイトパケットの 40 バイトヘッダーオーバーヘッドを削減するために導入されましたが、このアルゴリズムは前のパケットが ACK されるまで新しいデータをブロックし、ネットワーク RTT 以外のタイマーはありません。RFC 813 と RFC 1122 は ACK を遅延させる「遅延 ACK」を正式化し、追加のデータが到着するかタイマーが発火するまで ACK を保留します。これらを組み合わせると、パイプライン化されたレイテンシーセンシティブなトラフィックに対して停止(ストール)を引き起こします。Hacker News のコメントでは、「tinygram 防止」と固定タイマーが実際の原因であり、単なる遅延 ACK だけではないと指摘されています(Key Point 6)。現代のデータセンターでは、インデータセンターレイテンシー(約 500 µs)やリージョン間レイテンシー(数ミリ秒)が Nagle のブロッキングをレイテンシークリティカルなワークロードにとってコスト高にしています。さらに、現代のトラフィックは単一バイトパケットで構成されることがほとんどなく、TLS オーバーヘッドやシリアライゼーション、大きめのメッセージが Nagle の元々の動機をほぼ無意味にしています(Key Point 8)。著者はそのようなシステムでは
TCP_NODELAY
をデフォルトで有効にすることを推奨し、これを行うことは「罪」ではないと強調しています(Key Point 9)。

RFC 896 はまた、ネットワークが飽和状態になるとフェアなパケットドロップがネットワークを劣化させつつも安定に保つというメタステーブルな挙動についても触れています(Key Point 11)。最後に、著者はポータビリティの問題やプログラム制御を超えるカーネルバッファリング解決策がないため

TCP_QUICKACK
を避けています(Key Point 12)。

要するに、現在のトラフィックパターンとハードウェア性能を考慮すると Nagle のアルゴリズムは必ずしも必要ではなく、

TCP_NODELAY
を有効にすることがレイテンシーセンシティブなワークロードにおいて標準となるべきです。

本文

それはもう1980年代ではないことに、幸いです。

分散システムでレイテンシ問題をデバッグするとき、最初に確認するのは TCP_NODELAY が有効になっているかどうかです。私だけではありません―知り合いのすべての分散システム開発者が、この単純なソケットオプションを有効にすることで素早く解決できるレイテンシ問題に何時間も費やした経験があります。デフォルト動作は誤っているようで、概念そのものが時代遅れになっているかもしれません。


ここでは何について語っていますか

1984年のジョン・ナゲ(John Nagle)によるRFC 896が最良の情報源です:

小さなパケットに関する特別な問題があります。キーボードから発信される単文字メッセージをTCPで送信するとき、典型的には 41バイト のパケット(1バイトデータ+40バイトヘッダー)が有用データ1バイトごとに送信されます。この4000 %のオーバーヘッドは軽負荷ネットワークでは許容範囲ですが、面倒です。

簡単に言えば、ナゲはTCPヘッダーコストをより良く分散しスループットを改善したい(最悪の場合で最大 40倍)という目的でした。小さなパケットの主な原因は次のとおりです:

  1. ユーザーが1バイトずつ入力する人間対話型アプリケーション(例:シェル)
  2. 多数の
    write()
    呼び出しでメッセージを「滴下」してしまう不十分に実装されたプログラム

ナゲの提案は簡潔かつ賢明でした:

単純でエレガントな解決策が発見されました:
ユーザーから新しい送信データが到着したとき、以前に送信されたデータがまだ ACK されていない場合は、新しい TCP セグメントの送信を抑制する。

RFC 896 は往復時間(RTT)のみを使用し、別途タイマーは設定していません。


遅延ACKとの相互作用

ナゲのアルゴリズムはもう一つのTCP機能である 遅延ACK とうまく連携できません。遅延ACK のアイデアは、次のどちらかが起きるまで ACK を送信しないことです:

  • 何らかのデータを返せる場合(例:telnet エコー)
  • タイマーが切れたとき

RFC 813(1982)が最初に提案し、RFC 1122(1989)で正式化されました。
この相互作用は問題を引き起こします:ナゲは ACK を受信するまで新しいデータの送信をブロックしますが、遅延ACK はその ACK が応答準備できるまで遅らせます。パケットを満タンに保つには良いですが、レイテンシ感度の高いパイプライン型アプリケーションにはあまり向きません。

ナゲ自身もフラストレーションを表明しています:

「それはまだ悩みます。実際の問題は小さなグラム防止ではなく、ACK の遅延とそのばかげた固定タイマーです。」


ナゲは無害なのか?

遅延 ACK が無い場合でも、ナゲのアルゴリズムの挙動は現代の分散システムではおそらく望ましいものではありません。

  • 単一データセンター内の RTT は通常約 500 µs
  • 同じリージョン内のインターデータセンターレイテンシは数ミリ秒
  • グローバルレベルでは数百ミリ秒に達することも

サーバーが数百マイクロ秒で実行できる作業量を考えると、1 RTT だけ遅延させてデータを送信するのは明らかに有益とは言えません。

元々の正当化――ヘッダーコストを分散し単バイトパケットで最大40倍のオーバーヘッドを回避する―は、今日ではほとんど無意味です。多くの分散データベースやシステムは単一バイトパケットを送信せず、TLS を使用し、効率的なエンコーディング/シリアライズを採用しています。小さなメッセージに関する懸念は、アプリケーション層で実質的に処理されています。


ナゲが必要か?

明白な結論:
現代のデータセンターハードウェア上でレイテンシ感度の高い分散システムを構築しているなら、躊躇なく TCP_NODELAY(ナゲアルゴリズムを無効化)を有効にしてください。 罪ではありません—ただ実行すれば良いです。

もっと議論を呼ぶ見解:
現代のトラフィックパターンとハードウェア性能を考えると、ナゲアルゴリズムはそもそも不要だと思われます。TCP_NODELAY をデフォルトにすべきです。 1 バイトずつ書くコードは遅くなるかもしれませんが、効率が重要ならばアプリケーションを修正する方が適切です。


フットノート

  • RFC 896 はコンピュータネットワークにおけるメタスタブル動作について最も初期の記述の一つです:「この状態は安定している… ネットワークは減衰した状態で継続的に機能する。」
  • TCP_QUICKACK に関する質問が多いですが、ポータビリティと奇妙な意味合い(man ページ参照)から私はほとんど使用しません。さらに重要なのは、TCP_QUICKACK はカーネルがデータを保持している傾向を解消しないことです。
    write()
    を呼び出したら「今すぐ送信する」という意味合いがあるためです。

同じ日のほかのニュース

一覧に戻る →

2025/12/23 4:15

**イラスト付きトランスフォーマー**

## Japanese Translation: 記事は「Attention is All You Need」で紹介されたTransformerアーキテクチャと、従来の再帰型や畳み込み型ニューラル機械翻訳モデルに比べてその注意力ベース設計がトレーニングを高速化する方法について説明しています。 Transformerはエンコーダスタック(通常6層)とデコーダスタック(同じく6層)で構成されます。各層には以下の要素があります: 1. **自己注意**では、トークン埋め込み(512次元ベクトル)がクエリ・キー・バリュー行列にそれぞれ64次元へ射影されます。ドット積スコアは \(\sqrt{64}\) で縮小し、softmax を適用して値を重み付けし、合計します。 2. **マルチヘッド注意**では、各層に8セットの Q/K/V 射影が使用されます。すべてのヘッドからの出力は連結され、最終的な重み行列 \(W_O\) を通じて射影されます。 3. フィードフォワードニューラルネットワーク(ReLU の間にある2つの線形層)。 すべてのサブレイヤは残差接続とその後のレイヤ正規化で包まれています。 位置エンコーディング(512次元の正弦/余弦ベクトル)は埋め込みに加算され、モデルがトークン順序を知り、訓練時より長いシーケンスを扱えるようにします。デコーダでは自己注意がマスクされ、将来位置は \(-\infty\) に設定されるため、オートレグレッシブ生成が保証されます。 最終的なデコーダ出力は線形射影されてロジットベクトル(次元はターゲット語彙サイズ ≈10 000 単語)となり、その後 softmax で単語確率を得ます。訓練では、これらの分布とワンホットエンコードされた目標トークン間のクロスエントロピー損失が最小化され、逆伝播により最適化されます。 デコーディングは貪欲法またはビームサーチで行うことができ、記事では将来的にデコーディング戦略と大規模語彙や長いシーケンスへの訓練を改善する予定だと述べています。本文は元論文、Tensor2Tensor コード、Jupyter ノートブック、および後続のTransformerバリアントを参照し、Twitter での訂正を歓迎しています。 産業界において、Transformers を採用すると NLP プロジェクトが加速し、翻訳品質が向上し、言語集約型サービスへの展開が拡大します。

2025/12/23 4:37

**超音波による癌治療:サウンドウェーブで腫瘍と戦う**

## Japanese Translation: ### Summary HistoSonics の Edison システムは、水で満たされた膜を通じて高強度超音波を届け、腫瘍内部で崩壊する空洞泡を生成し、周囲の健康な組織を保護しながらがん細胞を機械的に液化します。この技術は 2001 年にミシガン大学で Zhen Xu によって発見されました。彼女は 20 MPa を超える負圧のマイクロ秒バーストが過熱なしに泡を作り出せることを示し、後に 2009 年に HistoSonics を設立して商業化しました。 FDA は 2023 年に肝臓腫瘍用として Edison を承認しました。主要な腎臓癌研究は 2026 年に完了予定で、その後規制承認が期待されます。大規模な膵臓試験(5 年生存率 13 % を目標)が進行中で、初期結果では深部病変の成功した焼灼と良好な耐容性が示され、ヒストトリッピーを他治療法と組み合わせることで残存疾患に対処し免疫応答を誘発できる可能性が示唆されています。 HistoSonics は、その目的に特化したデバイスが物理学、生物学、および生体医学工学を統合し、ロボット制御・コンピュータガイドシステムで繊維組織(例:血管)を保護しつつ液化腫瘍残渣の自然除去を可能にすると主張しています。技術はまた、がんタンパク質を露出させることで免疫応答を刺激し、免疫療法と組み合わせた際に全身性抗腫瘍活性を高める可能性があります。 新しいガイダンス技術—超音波ではなく X 線画像—と治療エコーを解析するフィードバックシステムが開発され、組織破壊のリアルタイムモニタリングが改善されています。 2025 年 8 月にジェフ・ベゾスの所有グループが HistoSonics を 22.5 億米ドルで取得し、研究開発と市場拡大への新たな資源を提供しました。成功すればヒストトリッピーは肝臓・腎臓・膵臓以外の癌にも非侵襲的手術オプションを広げ、音波をがん治療における変革的モダリティとして位置付ける可能性があります。

2025/12/23 3:46

**GLM‑4.7:コーディング機能の進化**

## Japanese Translation: (combining missing details, removing unfounded inferences, keeping clarity):** --- ## Summary GLM‑4.7 は GLM‑4.6 に対し、複数の面で大幅な性能向上を示しています: - **コーディングベンチマーク:** SWE‑bench (+5.8 % で 73.8 %)、SWE‑bench Multilingual (+12.9 % で 66.7 %)、Terminal Bench 2.0 (+16.5 % で 41 %)。 - **ツール使用 & ウェブ閲覧:** τ²‑Bench と BrowseComp において顕著な向上を示し、モデルのツール実行とウェブサイトナビゲーション能力が改善されています。 - **複雑推論:** HLE ベンチマークで +12.4 %(42.8 %)に達し、チャット・創作執筆・ロールプレイシナリオでの性能も向上しています。 リリースには、新しい *思考モード* — Interleaved Thinking, Preserved Thinking, Turn‑level Thinking — が含まれ、ツール使用と複雑なエージェント操作を強化します。GLM‑4.7 は 17 の評価テスト(例:MMLU‑Pro, GPQA‑Diamond, AIME 2025, IMOAnswerBench, LiveCodeBench‑v6)で競合他社より優れた性能を示しています。 ### Availability - **API アクセス:** Z.ai、OpenRouter などのパートナー経由で利用可能。ユーザーは「glm‑4.7」を選択するか、API リクエストで直接呼び出すことができます。 - **ローカルデプロイメント:** 重みは HuggingFace と ModelScope に公開されており、vLLM および SGLang 推論用の公式ドキュメントがあります。 - **価格とアップグレード:** GLM Coding Plan の購読者は自動でアップグレードされます。新規ユーザーは Claude レベルの性能を約 1/7 の価格で、使用量上限が 3 倍になるメリットがあります。 ### Ecosystem impact リリースはすでに人気のコーディングエージェント(Claude Code, Kilo Code, Cline, Roo Code)へ統合されており、Vibe Coding の UI 改善と同時期です。手頃な価格で高性能なコーディング支援とオープンウェイトを提供することで、GLM‑4.7 はソフトウェア開発ワークフロー全体のコスト低減と生産性向上が期待されています。 --- **Key points retained:** All major quantitative gains, new thinking modes, benchmark superiority, availability channels, pricing structure, local inference support, and ecosystem integrations are explicitly mentioned. Unnecessary inferences have been removed, and vague phrasing (e.g., “clear performance boost”) has been replaced with concrete data.

常に **TCP_NODELAY** になっています。 | そっか~ニュース