# RPS(Receive Packet Steering)
RPS(Receive Packet Steering)とは、Linux カーネルのネットワーク受信スタックにおいて、[[RSS(Receive Side Scaling)]] のソフトウェア実装版として機能する仕組みである。Linux 2.6.35 で導入され、シングルキュー NIC 環境でもパケット処理を複数 CPU コアに分散できる。
## 動作原理
1. NIC が単一の割り込みを CPU0 へ通知する(シングルキュー NIC の通常動作)
2. CPU0 がパケットのヘッダ情報(4 タプル: 送受信 IP・ポート)をハッシュ化
3. コア間割り込み(IPI: Inter-Processor Interrupt)を使って他の CPU コアへプロトコル処理を分散する
## 設定方法
```bash
# 分散先 CPU コアのビットマスク(例: 4 コア全部有効)
echo "f" > /sys/class/net/eth0/queues/rx-0/rps_cpus
```
## RSS・RFS との比較
RPS は [[RSS(Receive Side Scaling)]] のハードウェア非依存版だが、アプリケーションの CPU キャッシュ局所性を考慮しない。この点を改善したものが [[RFS(Receive Flow Steering)]](RPS の拡張)。
## 位置づけ
[[RSS(Receive Side Scaling)]] が使えない(NIC ハードウェア非対応)環境で、シングルキュー NIC のパケット処理を複数コアに分散するための基盤技術。実用環境では通常 [[RFS(Receive Flow Steering)]] と組み合わせて設定する(rps_cpus と rps_flow_cnt を同時設定)。
## 横断的知見
- 今後の取り込みで、複数ソース間の関係を追記する。
## 未解決の問い
- この概念をどのソース群で継続的に検証するか。