sdplane リリース
最終更新: 2026-10-10
ダウンロード
Ubuntu 24.04 用の Debian パッケージです。libsdplane と sdplane の両方が必要です。
- 設定ファイル(スイッチ構成の最小設定) [sdplane-switch.conf]
- 設定ファイル(ルーター構成の例) [sdplane-router.conf]
開発プロジェクト
- kait-cronos/sdplane-oss : オープンソース版ソースコード GitHub
- kait-cronos : 開発プロジェクトホームページ
前提条件
- CPU: x86-64-v2 以降(amd64)
- OS: Ubuntu 24.04 LTS
- NIC: DPDK 対応 NIC。大抵の NIC は対応しており、Intel や NVIDIA(Mellanox)の NIC も対応しています。その他の NIC は DPDK の対応 NIC 一覧を確認してください。設定で指定した NIC は sdplane が専有するので、管理用の Linux インターフェースは指定しないでください。
- メモリ: 16GB 以上
インストールと前処理
-
libsdplane と sdplane の deb を取得して、インストールします。sdplane.service が自動で有効になります。
wget https://www.yasuhironet.net/dist/ubuntu24.04/libsdplane_0.3.37-121~ubuntu24.04_amd64.deb https://www.yasuhironet.net/dist/ubuntu24.04/sdplane_0.1.3-943~ubuntu24.04_amd64.debsudo apt install ./libsdplane_*_amd64.deb ./sdplane_*_amd64.deb依存パッケージとして、DPDK 23.11 のライブラリ(librte-*)、liburcu、libpcap と、推奨パッケージの dpdk(NIC ドライバーや dpdk-devbind.py などのツール)が自動でインストールされます。
-
ヒュージページを設定します。
/etc/default/grubに以下を追加し、grub を更新します。GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=8"sudo update-grub -
起動時に vfio-pci ドライバーを読み込むようにします。
sudo cp /etc/sdplane/vfio-pci.conf /etc/modules-load.d/※ vfio-pci が動かない場合は、uio_pci_generic を試してください。手順4の後で、次のコマンドを実行します。vfio-pci は IOMMU を使うため、BIOS で VT-d / AMD-Vi が無効になっているなど、IOMMU が使えない環境では動きません。
sudo cp /etc/sdplane/uio_pci_generic.conf /etc/modules-load.d/sudo sed -i 's/vfio-pci/uio_pci_generic/' /etc/sdplane/sdplane.conf -
スイッチ構成の最小設定
sdplane-switch.confをダウンロードし、/etc/sdplane/sdplane.confとして置きます。set deviceの PCI アドレスを環境に合わせて書き換えます。PCI アドレスはlspciで確認できます。wget https://www.yasuhironet.net/dist/sdplane-switch.confsudo mv sdplane-switch.conf /etc/sdplane/sdplane.conflspcisudo vi /etc/sdplane/sdplane.conf⚠️ 誤って NVMe SSD の PCI アドレスを指定すると、システムが起動しなくなります。PCI アドレスは十分に確認してください。
-
再起動すると sdplane が起動します。CLI には telnet で接続します。
sudo reboottelnet localhost 9882⚠️ CLI には認証がありません。9882/tcp は localhost からのみ接続できるようにしてください。
起動、停止、無効化
sdplane は systemd のサービス(sdplane.service)として動きます。
sudo systemctl start sdplane- sdplane を起動します。
sudo systemctl stop sdplane- sdplane を停止します。
sudo systemctl restart sdplane- sdplane を再起動します。設定ファイルを変更した後に使います。
systemctl status sdplane- sdplane の動作状態を表示します。
sudo systemctl enable sdplane- OS の起動時に sdplane を自動で起動するようにします。インストール時に有効になっています。
sudo systemctl disable sdplane- OS の起動時に sdplane を自動で起動しないようにします。
最小構成スイッチの設定
sdplane-switch.conf は、sdplane を4ポートのスイッチとして動かす最小の設定です。
※ router ワーカースレッドの実装は L2 スイッチングと L3 フォワーディングの両方をサポートしているので、以下のスイッチ構成例は、router ワーカーを使用してスイッチ構成を実現する例になります。
PCI アドレス 01:00.0、01:00.1、02:00.0、03:00.0 に接続されている4つの NIC を vswitch 10 に接続し、4ポートのスイッチとして動作します。
また、vswitch 10 には port-1-00-0 と capture-1-00-0 という2つの tap インターフェースが作成されます。Linux からは、port-1-00-0 で DHCP によりアドレスを取得して ssh を提供したり、capture-1-00-0 で tcpdump を実行してパケットを監視したりできます。
よく使うコマンド
telnet で CLI に接続して実行します。
telnet localhost 9882
show port- 各ポートのデバイス(PCI アドレス)、リンク状態、速度、ドライバー、アップタイムを一覧表示します。
show port statistics pps- 各ポートの1秒あたりの受信・送信パケット数と、エラー数を表示します。
show thread- 各スレッドが動いている lcore、種類(lthread / dpdk)、機能、1秒あたりのループ回数を表示します。
show vswitch- vswitch の VLAN、接続されているポート、router-if と capture-if の tap インターフェースを表示します。
ルーター構成の設定
sdplane-router.conf は、sdplane を2ポートのルーターとして動かす設定の例です。
port 0(01:00.0)を vswitch 10 に、port 3(03:00.0)を vswitch 20 に接続します。port 1(01:00.1)と port 2(02:00.0)も sdplane にバインドされますが、vswitch には接続しません。
それぞれの vswitch に router-if と capture-if を作成するので、Linux からは port-1-00-0 と port-3-00-0 の2つの router-if が見えます。この2つのインターフェースの間をルーティングできるように、iproute2 や FRR で Linux のアドレスと経路を設定してください。sdplane は Linux のルーティング設定を読み取ってパケット転送をオフロードし、Linux を経由せずにカットスルーで転送します。
この設定を使うには、手順4で sdplane-switch.conf の代わりに sdplane-router.conf を置きます。
wget https://www.yasuhironet.net/dist/sdplane-router.conf
sudo mv sdplane-router.conf /etc/sdplane/sdplane.conf
sudo vi /etc/sdplane/sdplane.conf
iproute2 での設定例です。アドレスは環境に合わせて変更してください。
sudo ip addr add 192.168.10.1/24 dev port-1-00-0
sudo ip addr add 192.168.20.1/24 dev port-3-00-0
ルーター設定の確認方法
Linux で設定した経路は、Linux 上で確認します。
ip route- Linux の経路表を表示します。router-if(port-1-00-0、port-3-00-0)への経路が入っていることを確認します。
sdplane が Linux の設定を取り込んでいることは、sdplane の CLI で確認します。
show rib router-if- 各 router-if の tap 名、MAC アドレス、IPv4 / IPv6 アドレスを表示します。
show rib ipv4 route- sdplane が Linux から取り込んだ IPv4 経路(宛先、ネクストホップ、インターフェース)を表示します。
show fib ipv4 route- router ワーカーが実際の転送に使う IPv4 経路表を表示します。
show neighbor ipv4- ARP テーブル(ネクストホップの MAC アドレス)を表示します。
ドキュメンテーション
English | 日本語 | Français | 中文 | Deutsch | Italiano | 한국어 | ไทย | Español
問い合わせ
sdplane [at] nwlab.org