sdplane リリース

最終更新: 2026-10-10

ダウンロード

Ubuntu 24.04 用の Debian パッケージです。libsdplane と sdplane の両方が必要です。

  • 2026-10-09: libsdplane 0.3.37-121 deb sdplane 0.1.3-943 deb

開発プロジェクト

前提条件

  • 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 以上

インストールと前処理

  1. 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.deb
    sudo apt install ./libsdplane_*_amd64.deb ./sdplane_*_amd64.deb

    依存パッケージとして、DPDK 23.11 のライブラリ(librte-*)、liburcu、libpcap と、推奨パッケージの dpdk(NIC ドライバーや dpdk-devbind.py などのツール)が自動でインストールされます。

  2. ヒュージページを設定します。/etc/default/grub に以下を追加し、grub を更新します。

    GRUB_CMDLINE_LINUX="default_hugepagesz=1G hugepagesz=1G hugepages=8"
    sudo update-grub
  3. 起動時に 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
  4. スイッチ構成の最小設定 sdplane-switch.conf をダウンロードし、/etc/sdplane/sdplane.conf として置きます。set device の PCI アドレスを環境に合わせて書き換えます。PCI アドレスは lspci で確認できます。

    wget https://www.yasuhironet.net/dist/sdplane-switch.conf
    sudo mv sdplane-switch.conf /etc/sdplane/sdplane.conf
    lspci
    sudo vi /etc/sdplane/sdplane.conf

    ⚠️ 誤って NVMe SSD の PCI アドレスを指定すると、システムが起動しなくなります。PCI アドレスは十分に確認してください。

  5. 再起動すると sdplane が起動します。CLI には telnet で接続します。

    sudo reboot
    telnet 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 ワーカーを使用してスイッチ構成を実現する例になります。

sdplane-switch.conf の構成図

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ポートのルーターとして動かす設定の例です。

sdplane-router.conf の構成図

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