.. _ref_dataplane: Software Dataplane ========================== 目的 --------------- 次期Lagopusの高性能かつ柔軟に複数プロトコルに対応したデータプレーンを構成できるなFast pathを実現する. - Ethernet, VLAN, IPv4, IPv6などのパケット転送やルーティング - GRE, IPsecなどのトンネルプロトコルの終端 - Userspace TCP, UDPの実装と連携 - Zero-copy socketの実現 - 新しいプロトコルフォーマットやトンネルプロトコルへの対応 - 柔軟なフロー検索とその検索に対してのアクション - プロトコル処理のためのパケットやイベントのエスカレーション (Slow-path用機構) Lagopus 0.2 dataplane ----------------------------------- Lagopus 0.2までのデータプレーンでは,ポート番号を中心としたOpenFlowパイプラインをベースに,Network I/Oとパケット処理を分離した構成をとっている.またパケット処理ではtask-completion モデルを採用していた. Network I/Oと処理を分離したため,柔軟なパケット処理を実現している一方,スレッド間通信のオーバーヘッドやデータのキャッシュの効率上,パケット処理が20MPPS程度に制限されている.また,OpenFlowをベースとしたパイプライン拡張であるためデータプレーンやコントロールプレーンが綺麗に分離されている転送などのネットワーク制御の場合は問題ないが,IPsecやICMPのコントロールパケットのエスカレーションやパケット送出などデータプレーンとスイッチエージェントやデータプレーンとコントロールプレーンが密結合している制御などのルーティング機能に対しては,新しい拡張やモジュールが必要であると考えている. .. image:: ./images/lagopus-pipeline-original-details.png 次期Lagopus Packet processing framework ----------------------------------- 次期Lagopusでは,様々なプロトコルフォーマットに対して,高速にパケット検索,転送,処理を実現するためにデータプレーンの構成を拡張し,ディスパッチャを中心とした各プロトコル・パケット処理に対応することとする. 従来のデータプレーンの構成を踏襲し,パケット制御は,仮想ポートと処理プロトコルテーブル指定して処理する 従来まではより汎用的なパイプラインを用いていたたが,トンネルプロトコルやルーティングにおけるパケット処理の性質を考慮し,処理のステージをIngressとEgressに分ける. .. image:: ./images/packet-processing-high-level-overview.png .. image:: ./images/packet-processing-dispatcher-model.png 構成 ^^^^^^^^^^^^ データプレーン用に割り当てられたCPUのうち1コアは,全体のデータプレーンの構成やデータプレーンの資源管理,エージェントとの制御通信路,OSのネットワークスタックへのエスカレーションなどの処理を行うように割り当てる. それ以外のCPUについては,パケット処理用に割り当て,マルチコアCPUを活用し処理スループットやクライアント収容数を向上させるために使用する. 各プロトコル処理部は,以下のDispatcherに登録するパケット分類,パケット処理の関数,エージェントとの制御API,ポート管理のAPIを登録する.