# TAS: TCP Acceleration as an OS Service
> [!abstract] 概要(Abstract の日本語訳)
> データセンターのネットワーク速度が上昇すると、特にリモートプロシージャコール(RPC)において、TCPパケット処理に消費されるサーバーCPUサイクルの割合が増加する。
> この負担からサーバーCPUを解放するため、既存のさまざまな手法は、OSカーネルをバイパスする、アプリケーション向けにTCPスタックをカスタマイズする、またはパケット処理を専用ハードウェアへオフロードすることで対処してきた。
> しかし、これらの手法は効率性と引き換えに、安全性、適応性、または汎用性を失う。
> 高速に変化するコモディティクラウドでは、いずれのトレードオフも十分に望ましいものではない。
> 本稿は、TCP高速化をサービスとして提供するTASを示す。
> TASは、データセンターのRPCにおけるTCP処理の共通ケースをOSカーネルから分離し、専用CPU上で高速経路OSサービスとして実行する。
> これにより共通経路を単純化しつつ、安全性、適応性、汎用性を含む標準TCPスタックの機能を維持する。
> とくに、まれなケースのコードとデータを高速経路から除くことで、今日のサーバーに一般的な深いパイプラインを持つCPU上で性能を改善する。
> TASは負荷に比例して適切なCPU数を動的に割り当て、トラフィック負荷に応じて高速経路を収容する。
> TASは、一般的なクラウドアプリケーションにおいて、IXというカーネルバイパスOSに対して最大90%高いスループットと57%低いテールレイテンシを示す。
> また、64K接続でIXより2.2倍高いスループットを達成し、TCP接続数の増加にも対応する。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] Abstract)
## 論文情報
- 著者: [[Antoine Kaufmann]](MPI-SWS)、[[Tim Stamler]]・[[Simon Peter]](The University of Texas at Austin)、[[Naveen Kr. Sharma]]・[[Arvind Krishnamurthy]]・[[Thomas Anderson]](University of Washington)
- 媒体: *ACM EuroSys 2019*
- 会議: Fourteenth EuroSys Conference 2019、2019-03-25〜2019-03-28、Dresden
- DOI: https://doi.org/10.1145/3302424.3303985
- 実装: 論文中ではTASを10,127行のCで実装したと報告する
## 概要
TASは、TCPスタック全体をカーネル外へ移すのではなく、データセンターRPCの共通ケースだけを専用CPU上のfast pathへ分離する。
接続確立・切断、輻輳制御、タイムアウト、異常パケット処理などはslow pathへ残し、未信頼アプリケーションへTCP ACKと輻輳制御を任せない。
POSIXソケット互換のユーザー空間ライブラリを用いるため、アプリケーションを変更せずに利用できる。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §1, §3)
## 問題設定と既存方式
データセンターのリンク速度がCPU性能より速く伸びると、TCPパケット処理がアプリケーションのCPU資源を圧迫する。
論文は既存方式を、(1)モノリシックなカーネル内スタック、(2)アプリケーションへTCP処理を移すカーネルバイパス、(3)保護付きカーネルバイパス、(4)NICオフロード、(5)専用CPU方式に整理する。
カーネル内方式は安全性・機能性を持つが、特権モード遷移、共有状態、ロック、キャッシュ・TLBミス、分岐の多いコードが負荷になる。
カーネルバイパスは保護境界とパケット処理を単純化できるが、アプリケーションが輻輳制御を破ればデータセンターのポリシーに干渉できる。
IXはハードウェアCPU仮想化で保護境界を戻すが、カーネル方式の一部オーバーヘッドも再導入する。
NICオフロードはCPUを解放するが、TCPや輻輳制御の進化に追随しにくい。
TASはこれらの間で、ソフトウェアの柔軟性、OSの安全性、専用CPUの分離、ワークロード比例性を同時に狙う。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §2.1)
## 既存スタックのオーバーヘッド
32K同時接続のキーバリューストアで、Linuxは1要求あたり16.75キロサイクルを使い、その85%をネットワークスタック、6%をアプリケーションで消費する。
IXは2.73キロサイクル、TASはPOSIXソケット互換層付きで2.57キロサイクルまで削減する。
Linuxでは1要求あたり12.7K命令、CPI 1.32、平均処理レイテンシ8マイクロ秒となる。
TASは命令数自体は3.9KとIXの3.3Kより多いが、処理を別の高速経路へ分離し、接続状態を小さく保つことで平均処理レイテンシ1.2マイクロ秒を得る。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §2.2)
| モジュール | Linux kc | Linux | IX kc | IX | TAS kc | TAS |
|---|---:|---:|---:|---:|---:|---:|
| Driver | 0.73 | 4% | 0.05 | 2% | 0.09 | 4% |
| IP | 1.53 | 9% | 0.12 | 4% | 0 | 0% |
| TCP | 3.92 | 23% | 1.05 | 39% | 0.81 | 32% |
| Sockets/IX | 8.00 | 48% | 0.76 | 28% | 0.62 | 24% |
| Other | 1.50 | 9% | 0 | 0% | 0 | 0% |
| App | 1.07 | 6% | 0.76 | 28% | 0.68 | 26% |
| Total | 16.75 | 100% | 2.73 | 100% | 2.57 | 100% |
(表1 (Table 1. CPU cycles per request by network stack module)。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Table 1.)
| カウンタ | Linux | IX | TAS |
|---|---:|---:|---:|
| CPU cycles(application / stack) | 1.1K / 15.7K | 0.8K / 1.9K | 0.7K / 1.9K |
| Instructions | 12.7K | 3.3K | 3.9K |
| CPI | 1.32 | 0.82 | 0.66 |
| Retiring(cycles) | 175 / 3591 | 190 / 753 | 167 / 848 |
| Frontend Bound | 173 / 2600 | 121 / 175 | 102 / 248 |
| Backend Bound | 388 / 9046 | 402 / 1005 | 353 / 684 |
| Bad Speculation | 141 / 515 | 48 / 52 | 63 / 129 |
(表2 (Table 2. Per request app/stack overheads)。値はapplication / stackの順。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Table 2.)
## TASの設計
TASは、fast path、slow path、アプリケーションごとの未信頼なユーザー空間TCPスタックの三つのコンポーネントで構成され、共有メモリキューで接続する。
fast pathは共通ケースのパケット交換、ヘッダー処理、TCP ACK、輻輳ポリシーの強制、ペイロード分割を担当する。
slow pathは輻輳制御の方針、接続管理、ユーザー空間TCPスタックの登録、タイムアウト、例外処理を担当する。
アプリケーション側のlibTASは既定でPOSIXソケットを提供し、低レベルAPIも選択できる。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §3)
### Fast path
受信では、NICのRSSでフローを受信スレッドへ割り当てる。
順序どおりに到着したパケットについてはネットワークヘッダーを捨て、ペイロードをフローごとのユーザー空間循環受信バッファへ直接書き込み、context RX queueへ通知する。
送信では、アプリケーションがフローごとの循環送信バッファへデータを追加し、fast pathがrate bucket、送信ウィンドウ、受信ウィンドウに従ってペイロードを取り出し、TCPセグメントとヘッダーを生成する。
ACKをfast pathで処理することで、未信頼アプリケーションがACKを操作して輻輳制御を回避することを防ぎ、ECNフィードバックとTCPタイムスタンプを正しく保つ。
ペイロードバッファを共有せずフローごとに分けることで、フロー制御ウィンドウ計算を定数時間に近づけ、隔離を高める。
**図1 (Figure 1): TASの受信経路**
![[_attachments/2026_Unknown_TAS/fig01-tas-receive-flow.png]]
(Figure 1. RSSからfast path、libTASのRX payload buffer、アプリケーションの`recv()`/`epoll()`へデータと通知を渡す経路。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 1.)
**図2 (Figure 2): TASの送信経路**
![[_attachments/2026_Unknown_TAS/fig02-tas-transmit-flow.png]]
(Figure 2. アプリケーションの送信バッファからfast pathがrate bucketと状態を参照し、ACK・データパケットを処理する経路。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 2.)
例外は、未知の接続、破損パケット、未処理TCPフラグ、順序外到着である。
TASは順序外データを1区間だけ保持し、それ以外は破棄して次に期待するシーケンス番号をACKする。
ただし、重複ACKを数えて3個で高速リカバリを起動する処理はfast pathに残す。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §3.1)
| フィールド | ビット | 説明 |
|---|---:|---|
| `opaque` | 64 | アプリケーション定義のフロー識別子 |
| `context` | 16 | RX/TX context queue番号 |
| `bucket` | 24 | rate bucket番号 |
| `rx\|tx_start` | 128 | RX/TXバッファ開始位置 |
| `rx\|tx_size` | 64 | RX/TXバッファサイズ |
| `rx\|tx_head\|tail` | 128 | RX/TXバッファのhead/tail位置 |
| `tx_sent` | 32 | `tx_head`から送信したバイト数 |
| `seq` | 32 | ローカルTCPシーケンス番号 |
| `ack` | 32 | 相手TCPシーケンス番号 |
| `window` | 16 | 相手のTCP受信ウィンドウ |
| `dupack_cnt` | 4 | 重複ACK数 |
| `local_port` | 16 | ローカルポート番号 |
| `peer_ip\|port\|mac` | 96 | セグメント化に使う相手の3タプル |
| `ooo_start\|len` | 64 | 順序外区間 |
| `cnt_ackb\|ecnb` | 64 | ACK済み・ECNマーキング済みバイト数 |
| `cnt_frexmits` | 8 | fast pathが起動した高速再送回数 |
| `rtt_est` | 32 | RTT推定値 |
(表3 (Table 3. Required per-flow fast path state)。1フローあたり102バイト。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Table 3.)
**図3 (Figure 3): slow pathによる接続制御**
![[_attachments/2026_Unknown_TAS/fig03-slow-path-connection-control.png]]
(Figure 3. SYN/SYNACKなどの接続制御を例外キュー経由でslow pathとlibTASへ渡す構造。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 3.)
### Slow pathと輻輳制御
slow pathは各フローについて既定で2 RTTごとに制御ループを実行し、ACK済みバイト、ECNマーキング済みバイト、高速再送回数、RTT推定値を取得する。
論文の実装はDCTCPとTIMELY(TCP向けにスロースタートを追加)をサポートする。
DCTCPはウィンドウではなくレートを制御し、輻輳が見えるまで各制御間隔でレートを倍増し、その後は既定10Mbpsの加算増加を行う。
レートベース制御は、多数フローでウィンドウの急変によるバーストを平滑化し、フロー間の公平な帯域配分を狙う。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §3.2)
接続確立・切断、TCPオプション交渉、ポート割当、ARP、IPルーティング、再送タイムアウトはslow pathが担当する。
TASは未信頼アプリケーションへポリシーを委譲せず、輻輳制御の方針とそのパケット経路上の強制を分離する。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §3.2)
### ユーザー空間スタックとワークロード比例性
ユーザー空間TCPスタックは通常のPOSIXソケットを提供するため、アプリケーションを変更せず動的リンクで利用できる。
TASはIXに似た低レベルAPIも持つが、性能と互換性の両方を選べるようにする。
fast pathは最大数のコアとNICキューを初期化し、パケットが来ないコアはブロック・デスケジュールする。
slow pathはCPU使用率を監視し、合計アイドルが1.25コアを超えればコアを減らし、0.2コア未満ならコアを増やす。
RSSリダイレクションテーブルは先に更新し、アプリケーションからの送信経路は遅延更新することで、コア増減中のパケット再割当を許容する。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §3.3–§3.4)
## 実装と評価設定
TASはfast path 2,931行、slow path 3,744行、POSIXソケットライブラリ3,452行のCで構成される。
fast pathはDPDKでNICへ直接アクセスし、Linuxカーネルをバイパスする。
評価サーバーは24コアIntel Xeon Platinum 8160、196GB RAM、Intel XL710 40GbEであり、クライアントは6コアIntel Xeon E5-2430とIntel X520 10GbEを6台使用した。
Ubuntu 16.04、Linux kernel 4.15、DCTCP、Arista 7050S-64スイッチを用い、ECNマーキング閾値は65パケットである。
比較対象はLinuxのepoll、mTCP、IXであり、mTCPとIXはPOSIXソケットを提供しない。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §4, §4.1, §5)
論文が明示する制約は、接続ごとの送受信バッファサイズ固定、完全なTCPスロースタート未実装、IPフラグメント非対応である。
短命接続ではRTT推定の遅れが不利になりうる。また、評価の中心は定常状態のデータセンター通信であり、インターネット規模の損失、長RTT、TLS、頻繁な接続制御を高速経路の前提に含めていない。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §4.1, §6)
## 実験結果
### RPC
Linux・TASの送受信を組み合わせた100本のバルク転送は、全組合せで9.4Gbpsに到達した。
| 受信\送信 | Linux | TAS |
|---|---:|---:|
| Linux | 9.4Gbps | 9.4Gbps |
| TAS | 9.4Gbps | 9.4Gbps |
(表4 (Table 4. Compatibility between Linux and TAS)。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Table 4.)
接続数を増やすRPCエコーベンチマークでは、1K接続のTASがLinuxの5.1倍、IXの0.95倍のスループットを示し、飽和後の低下は最大7%にとどまった。
**図4 (Figure 4): RPC接続スケーラビリティ**
![[_attachments/2026_Unknown_TAS/fig04-connection-scalability.png]]
(Figure 4. 接続数の増加に対するTAS、IX、LinuxのRPCスループット。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 4.)
短命接続では、1接続あたり4 RPC以上でTASがLinuxを上回り、256 RPCで帯域の95%を利用する。
**図5 (Figure 5): 短命接続のスループット**
![[_attachments/2026_Unknown_TAS/fig05-short-lived-connections.png]]
(Figure 5. 接続を再確立する前のメッセージ数ごとのTASとLinuxのスループット。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 5.)
パイプライン化したRPCでは、受信側の64バイト以下でTASがLinuxの最大4.5倍、送信側の小〜中サイズで最大12.4倍となる。
2KBのRPC、250サイクルのアプリケーション処理ではTASが40Gbps線速に達する一方、Linuxは約10Gbpsにとどまる。
アプリケーション処理が1,000サイクルになるとTASの改善幅はRPCサイズによらず約2.5倍であり、mTCPは512バイトを超えるとスケーラビリティ限界に達する。
**図6 (Figure 6): パイプラインRPCスループット**
![[_attachments/2026_Unknown_TAS/fig06-pipelined-rpc-throughput.png]]
(Figure 6. RPCサイズとアプリケーション処理遅延を変えた受信・送信スループット。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 6.)
### パケット損失
0.1〜5%の人工的なパケット損失で測定すると、TASのスループット低下は損失率1%まで最大1.5%、5%で13%である。
TASは1つの連続した順序外区間だけを保持する簡略回復を用いるため、Linuxより損失ペナルティは約2倍だが、データセンターで一般的な損失率では限定的である。
**図7 (Figure 7): パケット損失によるスループット低下**
![[_attachments/2026_Unknown_TAS/fig07-packet-loss-penalty.png]]
(Figure 7. Linux、TAS、簡略回復TASのパケット損失率に対する相対スループット低下。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 7.)
### キーバリューストア
32K接続、90% GET・10% SET、32バイトキー・64バイト値、Zipf係数0.9のキーバリューストアで、TASの低レベルAPIはLinux・IXに対して最大9.6倍・1.9倍、ソケット互換層付きでも最大7.0倍・1.3倍のスループットを示した。
**図8 (Figure 8): キーバリューストアのスループットスケーラビリティ**
![[_attachments/2026_Unknown_TAS/fig08-key-value-throughput-scalability.png]]
(Figure 8. サーバーコア数に対するTAS low-level API(TAS LL)、ソケット互換層(TAS SO)、IX、Linuxのスループット。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 8.)
TASクライアント使用時の要求レイテンシは、Linuxに対して中央値5.6倍、99パーセンタイル5.9倍の改善である。
**図9 (Figure 9): キーバリューストアのレイテンシCDF**
![[_attachments/2026_Unknown_TAS/fig09-key-value-latency-cdf.png]]
(Figure 9. サーバーとクライアントのスタック組合せごとの要求レイテンシ分布。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 9.)
| スタック | 中央値 | 90パーセンタイル | 99パーセンタイル | 最大 |
|---|---:|---:|---:|---:|
| Linux | 97 | 129 | 177 | 1319 |
| IX | 20 | 27 | 30 | 280 |
| TAS | 17 | 20 | 30 | 122 |
(表5 (Table 5. Key-value store request latency in microseconds with TAS clients)。単位はマイクロ秒。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Table 5.)
### 非スケーラブルなキーバリューストア
単一キーへのアクセスを集中させ、アプリケーション側のロック競合を作った場合でも、TASはネットワークスタックをアプリケーションと独立に拡張できる。
4コア時のスループットはTAS LL 4.6 million operations/s、TAS SO 3.1 million operations/s、IX 2.8 million operations/s、Linux 0.8 million operations/sである。
| 総コア数 | 2 | 4 | 8 | 12 | 16 |
|---|---:|---:|---:|---:|---:|
| App(Sockets) | 1 | 2 | 5 | 7 | 9 |
| TAS | 1 | 2 | 3 | 5 | 7 |
| App(Lowlevel) | 1 | 2 | 4 | 6 | 8 |
| TAS | 1 | 2 | 4 | 6 | 8 |
(表6 (Table 6. Core split for TAS in the key-value store throughput experiment)。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Table 6.)
| 総コア数 | 1 | 2 | 3 | 4 |
|---|---:|---:|---:|---:|
| TAS LL | 2.4 | 3.8 | 4.6 | — |
| TAS SO | 2.4 | 3.1 | 3.1 | — |
| IX | 1.5 | 2.5 | 2.8 | 2.8 |
| Linux | 0.3 | 0.4 | 0.6 | 0.8 |
(表7 (Table 7. Throughput for non-scalable key-value store workload)。単位はmillion operations/s。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Table 7.)
### リアルタイム分析
FlexStormを3台のクライアントクラスタへ配置した評価では、TASはmTCPに対して生スループット8%、コアあたりスループット26%高く、タプル処理レイテンシを56%削減した。
アプリケーションの多重化スレッドがボトルネックであるため、TASの生スループット差は小さいが、mTCPの大規模バッチ処理を必要とせずに待ち行列を短縮した。
**図10 (Figure 10): FlexStormスループット**
![[_attachments/2026_Unknown_TAS/fig10-flexstorm-throughput.png]]
(Figure 10. Linux、mTCP、TASの生スループットとコアあたりスループット。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 10.)
| スタック | 入力 | 処理 | 出力 | 合計 |
|---|---:|---:|---:|---:|
| Linux | 6.96マイクロ秒 | 0.37マイクロ秒 | 20ms | 20ms |
| mTCP | 4ms | 0.33マイクロ秒 | 14ms | 18ms |
| TAS | 7.47マイクロ秒 | 0.36マイクロ秒 | 8ms | 8ms |
(表8 (Table 8. Average FlexStorm tuple processing time)。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Table 8.)
### 輻輳制御と公平性
TASのレートベースDCTCPは、単一10Gbpsリンクのシミュレーションで制御間隔がRTT以上ならDCTCPと類似したフロー完了時間・キュー長を示す。
2,560サーバー・112スイッチの3層Fat-Tree、過剰収容比1:4のシミュレーションでは、制御間隔100マイクロ秒で短フロー・長フローともDCTCPに近い。
**図11 (Figure 11): 単一10Gbpsリンクの輻輳シミュレーション**
![[_attachments/2026_Unknown_TAS/fig11-single-link-congestion-simulation.png]]
(Figure 11. 制御間隔に対するTCP、DCTCP、TASの平均フロー完了時間と平均キュー長。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 11.)
**図12 (Figure 12): 大規模クラスタのフロー完了時間**
![[_attachments/2026_Unknown_TAS/fig12-large-cluster-flow-completion.png]]
(Figure 12. 3層Fat-Treeシミュレーションにおける短フローと長フローの完了時間CDF。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 12.)
4台の送信機から1台の受信機へ送るincastでは、TASの各接続のスループットのテールは中央値の1.6〜2.8倍以内で、中央値は各接続の公平な分配に近い。
Linuxはウィンドウ拡大・縮小によるバースト、低RTTでの制御粒度、共有キューのオーバーフローが重なり、フロー飢餓が発生する。
**図13 (Figure 13): incast時の接続レート分布**
![[_attachments/2026_Unknown_TAS/fig13-incast-connection-rates.png]]
(Figure 13. Linuxの中央値、TASの中央値・99パーセンタイル、公平分配を接続数ごとに比較する。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 13.)
### ワークロード比例性
キーバリューストアのクライアント数を増減させる動的負荷では、TASのfast pathコア数が1台のクライアント時の3コアから最大9コアまで増え、負荷低下に合わせて減少する。
**図14 (Figure 14): ワークロード増減に対するコア数とスループット**
![[_attachments/2026_Unknown_TAS/fig14-workload-proportionality-throughput.png]]
(Figure 14. キーバリューストア負荷の増減に追随するTASプロセッサコア数とスループット。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 14.)
コアの増減中、3台から4台のクライアントへ移る区間ではレイテンシが一時的に約15マイクロ秒、約30%上昇するが、速やかに元の水準へ戻る。
**図15 (Figure 15): コア追加時の要求レイテンシ**
![[_attachments/2026_Unknown_TAS/fig15-workload-proportionality-latency.png]]
(Figure 15. TASが負荷増加に応じてコアを追加するときのクライアント観測レイテンシ。Source: [[.raw/papers/2026_Unknown_TAS.pdf]], Figure 15.)
## 新規性と位置づけ
TASの新規性は、カーネルバイパスのようにTCPスタック全体をアプリケーションへ委譲せず、NICオフロードのように進化の遅いハードウェアへ固定せず、共通ケースだけを専用CPU上のOSサービスへ切り出した点にある。
[[ユーザーレベルTCPスタック]]のmTCPはアプリケーション内のコアローカルTCPスレッドとバッチ処理で高速化するが、アプリケーションを信頼し、標準ソケットを提供しない。
TASはその高速化方向を採りながら、libTASによるPOSIX互換性と、fast pathによるACK・輻輳制御強制を残す。
後続の[[@2020__NSDI__AccelTCP - Accelerating Network Applications with Stateful TCP Offloading]]がNIC上へ状態付きTCP処理を移すのに対し、TASは複雑で変更頻度の高い制御をホストCPUに残し、共通処理だけを分離する。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §2, §6, §7)
## 考察
TASは、性能を「TCP処理をどこで実行するか」だけでなく、「共通処理と例外処理をどの境界で分けるか」「誰が輻輳ポリシーを決め、誰が強制するか」「ネットワーク処理用CPUを負荷に応じてどう配分するか」という設計問題へ分解する。
一方、1フロー102バイトの状態をキャッシュへ保持し、順序外処理を1区間に制限する設計は、接続バッファの固定、損失時の再送増加、インターネットの長RTT・断片化・TLSへの未対応という制約と表裏一体である。
したがってTASの結果は、データセンターの定常的なRPCを対象に、安全性と互換性を保ったままTCP処理を高速化できることの実証であり、任意のインターネットTCPを同じfast pathへ適用できることを示すものではない。(Source: [[.raw/papers/2026_Unknown_TAS.txt]] §4.1, §6)
## 強み / 弱点・課題
### 強み
- 共通ケースと例外ケースをfast path/slow pathへ分割し、既存TCPの機能性と専用CPUの性能分離を組み合わせた点
- ACKと輻輳制御の強制を信頼されたサービス側に残し、カーネルバイパスの安全性・公平性問題に対処した点
- POSIXソケット互換層、低レベルAPI、Linuxピア互換を同じ設計で評価した点
- RPC、損失、キーバリューストア、FlexStorm、Fat-Treeシミュレーション、動的負荷まで評価した点
### 弱点・課題
- 接続バッファサイズ固定、完全なTCPスロースタート未実装、IPフラグメント非対応
- 順序外データを1区間だけ保持する簡略回復により、5%損失時のペナルティがLinuxの約2倍
- 評価環境は10〜40Gbpsの特定NIC・Linux 4.15・DCTCPに依存し、現代の400Gbps級NIC、DPU、SmartNIC、実インターネットの条件は未評価
- コア増減時にレイテンシが一時的に約30%上昇し、動的資源割当自体が新たなテール要因になりうる
- TLS、長RTT、頻繁な接続制御、予測不能な損失を含むワークロードへの一般化は未検証
## 横断的な位置づけ
[[ユーザーレベルTCPスタック]]のmTCP、[[カーネルバイパスネットワーキング]]のDPDK系方式、[[TCP IPスタック統合|TCP/IPスタック統合]]のiipは、TCP処理の責任をOSカーネルの外側または統合側へ移す。
TASは同じ責任再配置を行いながら、共通ケースをOSサービスとして隔離し、制御ポリシーをslow pathへ集約するため、性能・安全性・互換性の別の組合せを示す。
[[@2021__SIGCOMM__Understanding Host Network Stack Overheads]]が高帯域Linuxのデータコピー、NUMA、キャッシュ、集約機会を主な平均コストとして示したのに対し、TASは短RPCのper-packet処理、共有状態、パイプライン停滞を分離の対象にした。
[[@2026__SIGCOMM__Understanding Host Network Stack Latency]]が既存LinuxスタックのCPU計上、公平性、割り込み調整を再設計することでユーザー空間TASとの差を5マイクロ秒まで縮めた結果と合わせると、TASの専用サービス化とLinux内の資源管理改善は競合する単一解ではなく、異なるボトルネックに対応する補完的な設計軸である。(Source: [[@2021__SIGCOMM__Understanding Host Network Stack Overheads]], [[@2026__SIGCOMM__Understanding Host Network Stack Latency]], [[.raw/papers/2026_Unknown_TAS.txt]] §2, §6)
## 出典
- [[.raw/papers/2026_Unknown_TAS.pdf]]
- [[.raw/papers/2026_Unknown_TAS.txt]]
- [ACM DOI](https://doi.org/10.1145/3302424.3303985)