SNP【Scalable Networking Pack】
概要

ネットワーク通信では、データを送受信する度にパケットの分割や結合、チェックサムの計算、受信データの処理など多くの作業が発生する。これらをすべてCPUが担うと、通信量の増加に伴いCPU使用率が高まり、アプリケーションの実行に使える計算資源が減少してしまう。
SNPは、こうした処理の一部をネットワークアダプタ側の専用回路に任せることで、サーバ全体の処理効率を高める。TCPデータの分割を担う「LSO」(Large Send Offload)や、受信したパケットの処理を複数のCPUコアに振り分ける「RSS」(Receive Side Scaling)、誤り検出符号の計算を代行する「チェックサムオフロード」(checksum offload)などの機能で構成される。
これらの機能は単独でも動作するが、組み合わせて利用することで通信性能をより高められる場合がある。マルチコアCPUと単一のネットワークアダプタの組み合わせの場合、従来はCPUの一つのコアがネットワーク処理に掛り切りになり、他のコアに余裕があっても通信性能はそのコア一つの処理能力に制約されていた。
SNPの各機能は、この制約を緩和し、サーバが持つ複数コアやネットワークアダプタの能力をより有効に使い切ることができる。特に、仮想化基盤では複数の仮想マシンが一つの物理ネットワークアダプタを共有する際に通信処理が特定のCPUコアへ集中しやすく、SNPに含まれる「VMQ」(Virtual Machine Queue)によって負荷を分散し処理を効率化できる。
導入初期には、一部のネットワーク機器やドライバがSNPの処理に十分対応しておらず、通信が途切れたり速度が低下したりする相性問題が生じることがあった。そのため、システムの安定性を重視する管理者の間では、SNPの各機能を意図的に無効化して運用する例も見られた。現在ではネットワークアダプタの性能向上やドライバの成熟により、こうした問題は減少し、標準のまま利用される場合が増えている。