LRU が KV キャッシュの論文が示唆するほど打ち抜くのは難しい

2026/09/10 22:39

LRU が KV キャッシュの論文が示唆するほど打ち抜くのは難しい

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

要約

Japanese Translation:

最近の研究は、複雑なライブネス(生体性)認識を持つ逐出ポリシーが、KV プレフィックスキャッシュに対して単純な Least Recently Used (LRU) 戦略よりも優れているという仮定に疑問を呈しています。Mooncake および AgentX を含む数百人のエージェントセッションからの実トレス(68 万件以上のリクエスト)を用いたブロック粒度のシミュレーターを用いて、すべての 3 つの変形ポリシー(危険度ベースの推定、物理モデル化されたコスト、整合性のあるセッション粒度)はパフォーマンスを向上させることはなく、多くの場合、8,000〜50,000 ブロックのキャッシュ規模においてベースラインとなる LRU よりも劣りました。本研究では、容量制限領域下(例:4 万ブロック対約 1,070 万トークンの作業セット)において再計算は長期間アイドル状態のセッションよりも緊密なツールループによって支配されており、5 分間の TTL ポリシーは逐出が容量駆動であるため LRU と同一の結果をもたらすことが明らかになりました。さらに、フラットブロック型 LRU およびラッドスリーフ制限付き LRU の差は 0.02pp に留まっており、SGLang や vLLM などのフレームワークにおけるリーフ制限による利点は最小であるという結論に至っています。また、オフラインオーラクル Belady が自己の非頻度性ポリシーによる相互食い違いのため、ほぼ満杯のキャッシュにおいて LRU に敗北するというハネス(テスト用スクリプト)上のバグも発見されました。著者らは、予測されるオブジェクトのライブネスを容量制限領域では実現可能ではないと結論づけ、代わりに圧縮、階層化、入場制御、作業セットを意識したスケジューリングへの焦点が移行すべきであると提唱しています。限定的要因として、GPU 実行を伴わないキャッシュポリシーのモデリングおよびセッション間共有に関する過度に保守的な仮定が含まれます。コードと再現手順は著者の GitHub リポジトリを通じて入手可能です。

本文

クロスリクエスト KV 前綴キャッシングにおける LRU の限界と容量束縛レジームの実証研究

本研究は、393 の本物の Claude Code セッションから抽出した 68,266 リクエストと、Mooncake データセットからの 23,608 リクエストを「前缀キャッシュシミュレーター」で再現し、プロダクションの基準(ベースライン)を上回るための 3 つのアプローチを実験しました。結果、すべて失敗しました。

特に興味深いのは「なぜ」です:容量不足の状況下では、再計算の主な原因はセッションが TTL を待ってアイドルになることではなく、数秒間隔でツール呼び出しループが繰り返されることにあります。TTL は実際には一度も発火しませんでした。

以下に、ゼロの状態から結果を再現するための構成と分析を示します。


目次

  • シミュレーター(Simulator)の概要
    • 3 つの重要な特性
    • 使用されたトレースデータ
  • 検証:Mooncake のヒットレイト曲線の再現
  • エージェントセッション分析
      1. アイドル状態の実態
      1. 容量不足時の再計算原因
      1. TTL の発火しないこと
      1. LRU 改善アプローチの失敗
  • Belady 敗北ハネスのバグに関する発見
  • 結論:レジームによる最適化要件の違い
  • 制約事項(Limitations)
  • 再現手順
  • 未解決の質問

私が構築したシミュレーター

クロスリクエスト KV 前綴キャッシングは、エージェント型 LLM サービングにおいて最も実用的な「レバー」です。これがコーディングエージェントの 50 回めターンのコストを初回の何分の一に抑えられている理由です。vLLM、SGLang、LMCache、Mooncake Store などのスタックはこれらを提供しており、デフォルトでは **LRU(Least Recently Used)**による除却を行っています。(SGLang は LFU や Priority などを提供しますが、 shipped のデフォルトは LRU です。)

シミュレーターの特性と検証

急速に拡大している「LRU はエージェントワークロードに不適切」という主張に対し、TTL による停止セッションとの区別が不可能という弱点を突くシミュレーターを構築しましたが、そのアプローチは機能しませんでした。

重要な 3 つの特性です:

  1. ヒットは前缀連続性を持つ
    • ヒットとは「ブロックチェーンにおける最も長い居住前缀」を指し、集合の共通部分ではありません。
    • 深さ 3 の場所で 1 ブロックでもミスすると、それ以降のものも使えなくなります(まだ住んでいる場合でも)。
  2. Radix 構造は除却を制限する
    • 居住子孫を持つブロックは除却できません。
    • ベースラインは radix リーフ上の LRU であり、これが vLLM や SGLang が実装しているものです(単なるフラット LRU よりも現実的です)。
  3. 進行中のチェーンはピン留めされる
    • 発見 5 に従い、進行中のリクエストは除却対象外です。

トレーデータソース

分析に使用されたのは合成データではなく、実際のトラース(Trace)です。

トレースリクエスト数ブロックサイズハッシュスコープソース
SemiAnalysis AgentX68,266 (393 の Claude Code セッション)64 トークンセッションローカルHF (Apache-2.0)
Mooncake toolagent23,608512 トークングローバルGitHub (Apache-2.0)
Mooncake conversation12,031512 トークングローバル同上

検証:Mooncake の発表された曲線の再現

信頼を得る前に、Mooncake が公開したトレース上で、彼ら自身が発表した「キャッシュ(ブロック数)対ヒットレート」の表を再現しました。

結果比較

キャッシュ (ブロック)1k10k30k50k100k
発表済み (LRU)0.300.400.480.500.510.51
測定値 (radix-leaf LRU)0.3410.4600.5370.5510.5520.553
測定値 (フラットブロック LRU)0.3400.4600.5370.5510.5520.553
  • 形状の再現: 発表された飽和点(1k-50k の増加で 30%→50%、さらに容量増は改善最小限)を完全に再現しました。
  • システマティックなオフセット: +4〜6ppの乖差があり、その理由を説明できませんでした。ブロック分母、トークン分母、部分尾ブロック除外、リクエスト平均化など 5 つの定義を試しましたが解決しませんでした。
    • これは定義の違いかバージョンミスマッチによるものであり、バグではありません。
  • 結論: 一致させる代わりに、未解決のまま公開します。

付随的な発見

フラットブロック LRU と radix リーフ制限付き LRU の間には0.02pp の違いしかありませんでした。両方の主要エンジンが実装している「リーフ制限」は、このワークロードにおいては本質的に何も買えません(意味をなしません)。

再現コマンド:

make validate


エージェントセッション分析

1. エージェントセッションは発表されている以上にアイドル状態にある

セッション数: 393、リクエスト数: 68,266

  • セッションスパン (h): p50=1.84、p90=28.36、max=254.8
  • リクエスト間隔 (s):
    • p50=2.1、p90=51.1、p99=3426.3、max=491922 (5.7 日)
    • 60 秒を超えるギャップ:9.5%
    • 3,600 秒(1 時間)を超えるギャップ:1.0%
  • 作業率(実行クロック時間の分率):
    • p25=3.4%、p50=13.9%、p75=33.9%
    • ライフタイムの 50% 未満を実行したセッション:85.5%

文献との比較

最も参照されている記述では「中位値作業率 20% で、50% 以下のセッションが 70%」と報告されています。しかし、この独立したトレースではそれぞれ**13.9% と 85.5%**であり、前提の方が発表されたものよりも極端であることを示しています。

  • 形状: ギャップは**双峰分布(bimodal)**です。中央値が 2.1 秒(緊密なツールループ)で、重い尾が数日まで続いています。

再現コマンド:

make characterize

2. 容量不足の状況下では、無駄の発生場所は予想と異なっていた

これは私の考え方を根本から変えた発見です。AgentSysBench は、「キャッシュ除却がキャッシュ作成トークンの合計の**55.9%を、集計的な金銭的コストの31.5%**に貢献する」と報告しており、これが 5 分間のプロバイダー TTL とアイドルギャップの衝突によるものです。

しかし、再計算がどこから来るかをポリシーに関係なく測定した結果は以下の通りです:

リクエスト前のギャップリクエスト数再計算トークンへの寄与率
<10 s (緊密なループ)10,06933.1%
10–60 s9127.0%
1–5 min70120.5%
5–30 min2368.6%
30–60 min503.0%
>1 h1235.8%

分析:

  • **10 秒以内のギャップ後に到着したリクエストが再計算の 33.1%**を占めます。
  • ここでの支配的な要因は、2 秒間の緊密なツールループです。
  • その 88k トークンのワーキングセットがキャッシュ容量を上回ることで、「予測問題」ではなく**「容量の問題」**になっています。p50 のギャップが 2.1 秒であるため、ライブネス推定器は区別する材料をほとんど持ちません。

31.5% との矛盾についての考察

⚠️ これは 31.5% という数値と矛盾するわけではありません。引用する前に読んでください:

AgentSysBenchこのリポジトリ (本研究)
分子除却によって引き起こされたキャッシュ作成トークン5 分以上のギャップ後に再計算されたプリフィルトークン
分母ビル全体の合計(キャッシュリードと出力を含む)すべての再計算トークン
レジームTTL 束縛 — エントリはタイマーで死亡する容量束縛 — ワーキングセット (~10.7M トークン) > キャッシュ (40,000 ブロック)
  • TTL 束縛されたキャッシュでは、本質的にすべての除却が構造上ギャップによって駆動されます。
  • 私の設定は容量束縛レジームであり、TTL は発火しません(発見 3)。
  • 結論: キャッシュ容量をプロビジョニングしている場合、最適化するものが変わります。

再現コマンド:

make gap

3. 5 分間の TTL は容量不足の状況下では一度も発火しなかった

TTL-300sは、あらゆるランで LRU リーフと等価の結果を生みました。LRU は常にタイマーが切れる前に除却したので、TTL は束縛的な制約となることはありませんでした。これは容量束縛レジームであることを示す明確な証拠です。

4. LRU を上回るための 3 つのアプローチ、3 つの失敗

独立したコンポーネントを持つ以下のポリシーを実装しましたが、すべて単調に悪化しました。

  • +H: リセツティに基づかないハザードベース
    P(session returns)
    (オンラインベイジアン推定器)。オラクルはなし。
  • +C: 物理的にモデル化された再計算コスト(後尾の再計算は高コスト)。
  • +G: コヒーレントなセッション粒度の除却(1 つのセッションの私有後尾を犠牲に)。

ヒットレート比較 (40 の AgentX セッション、4,751 リクエスト)

キャッシュ (ブロック)LRU-leafTTL-300sLFU-leaf+H+HC+HCG
8,00083.48%83.48%63.61%82.89%71.77%68.63%
20,00093.92%93.92%69.96%93.61%84.86%78.89%
50,00095.76%95.76%79.58%95.68%94.45%91.40%

有効な再計算コスト(負の値は worse)

キャッシュLFU-leaf+H+HC+HCG
8,000-129.7%-3.2%-38.9%-81.0%
20,000-434.3%-4.5%-90.4%-207.8%
50,000-447.1%-1.0%-15.4%-66.8%

結果:

  • すべてのコンポーネントが悪化を招きます。
  • 私が最も自信を持っていた「コヒーレントな除却」が最悪でした。
  • 全体の無駄の 17.5% を担う信号(2 秒ギャップ)を最適化しようとしたにもかかわらず、中央値 2.1 秒では区別できない予測器を使用していました。

再現コマンド:

make ablation


Belady が LRU に敗北させるハネスのバグ

最初のランにおいて、オフラインオラクルであるBelady が LRU に敗北しました。これは結果ではなく、**壊れたハネス(実験枠組み)**です。

  • 原因: ほぼ埋まったキャッシュに長いチェーンを挿入すると、ポリシーは現在構築中の前綴そのものを除却してしまいます。LRU は偶然にも免疫を持っていますが(直前に挿入されたブロックが最新タイムスタンプ)、近接性を含まないすべてのポリシーが自己を食い尽くします。
  • 解決策: 実際のエンジンでは「リファレンスカウンターピン」でこれを防止しますが、ゼロから構築されたシミュレーターには通常ありません。

実装アドバイス: もしあなたもこれを実装する場合、最初のテストとして**「Belady が LRU を上回るか?」**を行ってください。そうでなければ、このバグを持っており、すべてのポリシー比較が LRU の利益に静かに誤って計算されていることになります。

その他の実装改善点

  1. touch()
    は最も深いヒットブロックのみを更新すれば十分です(O(チェーン長) を O(1) に)。AgentX の中央値 1,387 ブロックにおいて重要です。
  2. キャッシュを全スキャンするのではなく、k 個の最も最近使用されなかったリーフをサンプリングして除却候補スコアリングします(プロダクションキャッシュで採用済み)。

これの意味するところについて私の考え

どの制約が束縛するかによって最適化するものが決まり、2 つのレジームは反対のことを望みます

  • TTL 束縛レジーム:
    • /liveネス予測と保留ポリシーがレバーとなり、発表された除却コストに関する作業は直接適用されます。
  • 容量束縛レジーム(本研究の実行位置):
    • 「このセッションは戻ってくるだろうか」という問いではなく、**「緊密なツールループで N の同時セッションの 88k トークンワーキングセットをどのように収めるか」**という問題となります。
    • これは圧縮、ティアリング、アドミッションコントロール、ワーキングセット認識スケジューリングへと指し示します。

2.1 秒の中位ギャップではライブネス予測に作業する材料がありません。私はライブネスの枠組みで入場しましたが、それは容量束縛レジームにおいては失敗したコストとなりました。最初にどのレジームにあるかを確立していれば、すべてを節約できたはずです。

文献はより強いベースラインである LRU-leaf を持っています。実際のトレース上で、3 つの独立したメカニズムを用いてもそれを打ち破ることができませんでした。いくつかの発表された代替案(適応的な TTL など)は、競争相手に対して「劣化版ポート」評価として機能し、その余裕(マージン)は読んでいるよりも柔らかいことを示唆しています。


制約事項(Limitations)

  1. 容量束縛であり、TTL 束縛ではありません: ~10.7M トークンのワーキングセットに対して 40,000 ブロック。Anthropic などのプロバイダーキャッシュとは逆の環境です(カスタマーあたり実質無限容量)。
  2. シミュレーションのみです: GPU 実行をモデル化しません。「何をキャッシュすべきか」には有効ですが、「スループット、レイテンシ、SLO」については直接有効ではありません。
  3. クロスセッション共有の非モデル化: AgentX はブロックハッシュがセッションローカル(ネームスペース化)です。システムプロンプトの共有は見えない設定です。Mooncake はグローバルですが、高密度なトレースです。
  4. 到着時間の合成: AgentX セッションは合成された到着時間(ウィンドウ上で均一分布)を使用しています。
  5. データの代表性: 393 のセッションと Mooncake の 1 時間は世界の全体像ではありません。

再現手順

ゼロの状態から以下のコマンドを実行することで、すべてを再現可能です。

git clone https://github.com/<you>/agentic-kv-cache && cd agentic-kv-cache
make setup      # venv の構築
make data       # ~1.1 GB のトレース (Apache-2.0) をダウンロードし、pickle にフラット化
make repro      # 4 つの実験をすべて実行し、結果/results/ に書き出す

個別の結果確認:

  • make validate
    ->
    results/01_validate.txt
    # Mooncake の検証
  • make characterize
    ->
    results/02_characterize.txt
    # AgentX の作業率とギャップ
  • make gap
    ->
    results/03_gap.txt
    # アイドルギャップによる再計算分布
  • make ablation
    ->
    results/04_ablation.txt
    # ポリシーアブレーション

技術的仕様

  • シミュレーターは純粋な stdlib Python で記述されており、
    numpy
    はヘルパースクリプトでのみ使用されています。
  • results/
    フォルダにコミットされた出力により、何もダウンロードせずに表をチェックできます。

未解決の質問

もしこれらのいずれかを回答できる方がいれば issue をお開設ください(正直に知りたいです):

  1. Mooncake オフセットの理由: なぜ +4〜6pp のオフセットが生じるのか?無限キャッシュでのポリシー無依存であり、メトリック定義だけで説明可能であるべきだが、5 つの定義でも解決できない。
  2. ライブネス認識除却の限界: 中位ギャップが 2.1 秒よりもはるかに長いワークロード(例:承認フローなど)で、ライブネス認識除却が radix リーフ LRU を上回るものはあるのか?
  3. 用語の再検討: 33% が 10 秒未満のギャップからのという結果が他のエージェント型トレースでも維持されるか。もしそうなら、この分野の一部は誤った「用語(term)」をターゲットにしている可能性がある。

クレジット

  • トレースデータ: Mooncake (Moonshot AI, FAST'25) と AgentX コーパス (SemiAnalysis)。どちらも Apache-2.0 ライセンス。
  • 両者の関係性はありません(独立した作業)。
  • ソースコードは MIT ライセンス

同じ日のほかのニュース

一覧に戻る →

2026/09/13 1:25

OpenStreetMap に最初の変更を加える

## Japanese Translation: OpenStreetMap は、近隣の店舗や施設に公式ウェブサイトのタグを追加することで、有意義な貢献を誰もが求めるよう呼びかけています。この作業は 15 分以内で完了可能です。この単純な行動は、米国だけで 100 万を超える店舗が存在するにもかかわらず、アクティブなマッパーの数はそれに比べて遥かに少ないという重要なデータギャップに対処しています。既存のエントリの多くはこの不可欠なウェブ住所を欠いています。無料の JOSM エディタと、そのウェブサイトウィザードプラグインを活用することで、貢献者は不足しているタグを効率的に特定できます。単一のウェブサイトタグを追加するだけで、マッピングソフトウェアは電話番号、営業時間、メールアドレスなどの重要な詳細情報を自動的に推測でき、世界中で利用可能な多数の無料サービスへのデータ提供を強化します。著者は、シアトルのウォリングフォード地区で 1 つのチェンジセット内にて 66 の新規タグを追加するだけでその影響を実証しました。結局のところ、これらのツールの普及啓発は、誰でも無料で利用できるより完全なデジタル地図の構築に貢献します。 ## Text to translate: The original summary is high quality and well-balanced, so it does not require improvement. ## Summary: OpenStreetMap invites everyone to make a meaningful contribution by adding official website tags to nearby shops or amenities—a task achievable in under fifteen minutes. This simple action addresses a critical data gap, especially given that the U.S. alone hosts over one million shops while active mappers are far fewer; many existing entries lack these crucial web addresses. Using the free JOSM editor and its Website Wizard plugin, contributors can efficiently locate missing tags. Adding a single website tag automatically enables mapping software to infer other vital details like phone numbers, opening hours, and emails, enriching data for dozens of free services worldwide. The author demonstrated this impact by adding sixty-six new tags in Seattle's Wallingford neighborhood in one changeset. Ultimately, spreading awareness of these tools helps build a more complete digital map for everyone to use at no cost.

2026/09/13 5:25

Real-SWE:AI モデルを実際の企業コードベースでの運用におけるベンチマーク評価

## Japanese Translation: 2026年9月、新しい Real-SWE ベンチマークが、実際の企業からライセンスされた私有のリアルワールドエンタープライズコードベースにおいて、最先端 AI モデルに挑戦する。これに対し、以前の公衆インターネットデータを用いた評価では約 99% のトークンが隠されていたが、このベンチマークでは課題は孤立したサンドボックスから直接verbatim またはインスピレーションを得られた形で抽出されており、ここでは機密生産コードとビジネス結果への影響シナリオ(例:請求書、税金、移行)が含まれる。評価はモデル単体ではなく、モデルおよびハーネスの組み合わせを測定しており、エンタープライズエンジニアの実際の作業方法を反映している。解決率は、各課題につき 8 回の独立したランにわたる pass@1 の平均値として量化され、95% 信頼区間が示される。 タスクは平均して短く、中位値では約 1,742 文字であり、Terminal-Bench よりもはるかに短いが、DeepSWE や FrontierCode よりも長い。各参考ソリューションは通常、中位値で約 11 ファイルを編集する。性能には大きなばらつきがある:上位の解決率には Fable 5.1(38.8%)、GPT-6 AstraCodex CLI(33.8%)、Gemini 3.8 FlashGemini CLI(31.2%)、GLM 5.3Claude Code(28.8%)、Gro k 4.6Grok Build/Muse Spark 1.3Muse Code(23.8%)が含まれる。モデルは短いロールアウトでも苦戦する:約 71% のロールアウト(10 分未満)が失敗したのに対し、より長いロールアウトでは約 73% が失敗しており、最も一般的な失敗モードは要件の欠落であり、どのモデルもすべての課題を解決することはできない。 展開コストもモデルによって大きく異なる:選択するモデルによっては約 2.50 ドルから 6.96 ドル程度で変動し(Gemini 3.8 Flash は下限、Fable 5.1 は上限)、一部のモデルでは報告されていない高いコストが発生する可能性もある。この変化により、エンタープライズエンジニアは、標準的な公衆データベンチマークではほとんど準備がなされない制限された環境において、複雑な固有のパターンとビジネスリスクをナビゲートすることになる。

2026/09/09 10:57

Apple iPod エングレーバー(2019)

## 日本語翻訳: 2005 年、Apple のエンジニアは「iPod のパーソナライズ」ウェブページを革新し、巧妙な回避策を用いて静的フォームをインタラクティブなショッピングツールへと変換しました。このアップグレード以前には、顧客はカスタム製品を表示することなく、単なるテキスト入力を記入するしかできませんでした。これを解決するために、開発者は JavaScript を用いて JPEG 画像を切り替え、ユーザーがデバイスを実時間で視覚化できるようにする回転する iPod アニメーションを作成しました。また、ユーザーがタイプしたテキストに基づいてエンベージングオーバーレイを動的に生成する ImageMagick ソフトウェアを採用し、顧客が製品上に自分の名前が表示される様子を正確にプレビューできるようになりました。さらに、CSS クラスの切り替えによって古典的な黄色いフェード効果をシミュレートし、出荷見積もりに対する動的なフィードバックを提供しました。これらの手法は早期ブラウザ技術の深刻な制限に依存していましたが、顧客体験を向上させる能力においてほぼ魔法のように感じられました。この歴史的プロトタイプは、限られた技術的手段であっても、ウェブイノベーションが製品のカスタマイズ性を大幅に改善し、購入前のバイヤーの信頼性を高め、将来的なインタラクティブ電子商取引デザインのための基準を設定できることを証明しました。

LRU が KV キャッシュの論文が示唆するほど打ち抜くのは難しい | そっか~ニュース