Ensō: A Streaming Interface for NIC-Application Communication | USENIX

Introduction
現在のアーキではNICとSW間でfixed size packet bufferがやりとりされる。
Linux: sk_buffs
DPDK: mbufs
NICはTSO, LROオフロードし複数パケットのデータを結合しSWに引き渡す。Fixed size packet bufferのサイズに合わすためデータをpacket bufferサイズに分割しないといけない。
問題点①:アプリに対して、MTUサイズのPacket bufferに分割された受信データを抽象化し、Packet bufferを意識することなく受信データをアクセスさせる必要がある。効率が悪い
Packet bufferサイズは効率を考えるとMTUサイズになる
Packet bufferが細かく分割されるため、NICからホストメモリのpacket bufferにコピーした後に、さらに①アプリ領域へのメモリコピー or ②アプリがパケットバッファを処理、のどちらかをする必要がある。

問題点② キャッシュ効率が悪い
データがメモリ上に分散するため効率が悪い

問題点③ パケットごとにメタデータが必要で、メタデータ通信のためのメモリアクセスと帯域消費が増える

提案手法: Enso。NIC-SW間の可変長チャンクデータ(Streaming)のNIC-SW間のAPI。
解決策①:ring bufferの使い方を変える
従来:ring bufferにdescriptorのみを格納。
提案:ring bufferにデータを格納
効果①: メタデータアクセス削減、notify削減。



