DPDKに関するサイト

# testpmdのコマンドライン
`testpmd`は、EALの引数および、testpmdの引数をとる。引数の仕切りは`--`で区分けする。
例えば下記の場合、EALとtestpmdの引数はそれぞれ以下となる。
- `-l 0-3 -n 4`がEALの引数 ([TAUG 3.1](http://doc.dpdk.org/guides/testpmd_app_ug/run_app.html#eal-command-line-options)参照)
- `-i --portmask=0x1 --nb-cores=2`がtestpmd固有の引数([TAUG 3.2](http://doc.dpdk.org/guides/testpmd_app_ug/run_app.html#testpmd-command-line-options)参照)

```
sudo ./dpdk-testpmd -l 0-3 -n 4 -- -i --portmask=0x1 --nb-cores=2
```
## EAL固有の引数

- `-a` # 利用するPCIデバイスのアドレス指定

## testpmd固有の引数

- `--eth-peer=N,XX:XX:XX:XX:XX:XX` # eth-peerの設定 `set eth-peer`相当
- `--forward-mode=xxxxx` # forwardモードの設定。`set fwd`相当
- `-i` # インターラクティブモードの選択
- `--mbuf-size` # mbufのサイズの設定。これで、`set txpkts`の上限が決まる。
- `--nb-cores=` # 利用するCPUコア数の指定。
- `--no-numa` # numaを使わない場合に設定
- `--port-topology=mode` # ポートトポロジーの設定
- `--rxq=` # 受信キューの数の設定
- `--stats-period` # 統計取得間隔の指定。ただし`-i`を使っていない場合。
- `--tx-first` # tx_firstの設定。`start tx_first`相当
- `--tx-ip=SRC,DST` # (パケットforwardのtxonlyモード限定) パケットのSRCとDSTのIPアドレス設定
- `--txpkts` # パケットサイズの設定。`set txpkts`相当
- `--txq=` # 送信キューの数の指定

## testpmd内のインターラクティブコマンド
起動時にtestpmdのtestpmd固有の引数として`-i`を指定した場合、インターラクティブモードになる。そして、以下のコマンドが使える。
### ドキュメント
interactiveモードでは、タブを打つと選択できるオプションが表示される。
例えば、以下のような操作をするとオプションが表示される。

```
testpmd> show port <TAB>
```
また、以下のコマンドがある

- `help`

### 制御
- `start`
- `start tx_first`
- `stop`
- `quit`
### 設定
- `set`
  - `eth-peer` # peerの設定　(ポート番号と対向MACアドレスの設定)
  - `fwd` # パケット転送モード
    - `io` # デフォルト転送モード
    - `icmpecho` # icmpechoの応答をする
    - `rxonly` # 受信のみ
    - `txonly` # 送信のみ
  - `txpkts` # 一度に送るパケットサイズを設定する。デフォルト64バイト
  - `verbose` # ログの出力モード 0 (default)から3まで

### ポート状態監視
最後の0はポート番号、もしくは引数allを使う

- `show`
  - `config` # 設定状態
    - `fwd` # 転送状態 
  - `port` # ポート状態
    - `info all`
    - `summary all`
    - `stats all`
    - `xstats all`


## ログ出力

`/var/log/syslog`等に出力される。該当行は、`dpdk-testpmd`の文字列が入っている。

```
Feb  7 01:05:35 ip-192-168-158-79 dpdk-testpmd[1511]: EAL: VFIO support initialized
Feb  7 01:05:35 ip-192-168-158-79 dpdk-testpmd[1511]: EAL: Using IOMMU type 8 (No-IOMMU)
Feb  7 01:05:35 ip-192-168-158-79 kernel: [ 3746.818263] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (dpdk-testpmd:1511)
Feb  7 01:05:35 ip-192-168-158-79 dpdk-testpmd[1511]: EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
Feb  7 01:05:36 ip-192-168-158-79 kernel: [ 3747.262723] vfio-pci 0000:00:07.0: vfio-noiommu device opened by user (dpdk-testpmd:1511)
Feb  7 01:05:36 ip-192-168-158-79 dpdk-testpmd[1511]: EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:07.0 (socket -1)
Feb  7 01:05:36 ip-192-168-158-79 dpdk-testpmd[1511]: TELEMETRY: No legacy callbacks, legacy socket not created
Feb  7 01:05:36 ip-192-168-158-79 dpdk-testpmd[1511]: testpmd: create a new mbuf pool <mb_pool_0>: n=171456, size=2176, socket=0
Feb  7 01:05:36 ip-192-168-158-79 dpdk-testpmd[1511]: testpmd: preferred mempool ops selected: ring_mp_mc
Feb  7 01:22:06 ip-192-168-158-79 dpdk-testpmd[1511]: ena_rx_queue_release(): Rx queue 0:0 released
Feb  7 01:22:06 ip-192-168-158-79 dpdk-testpmd[1511]: ena_tx_queue_release(): Tx queue 0:0 released
Feb  7 01:22:06 ip-192-168-158-79 dpdk-testpmd[1511]: ena_rx_queue_release(): Rx queue 1:0 released
Feb  7 01:22:06 ip-192-168-158-79 dpdk-testpmd[1511]: ena_tx_queue_release(): Tx queue 1:0 released
Feb  7 01:22:06 ip-192-168-158-79 kernel: [ 4737.767038] eal-intr-thread[1512]: segfault at 583 ip 00005644e5cbc987 sp 00007f38b841f2e0 error 4 in dpdk-testpmd[5644e4c22000+14d6000]
Feb  7 02:59:11 ip-192-168-158-79 dpdk-testpmd[1670]: EAL: VFIO support initialized
Feb  7 02:59:11 ip-192-168-158-79 dpdk-testpmd[1670]: EAL: Using IOMMU type 8 (No-IOMMU)
Feb  7 02:59:11 ip-192-168-158-79 kernel: [10562.800089] vfio-pci 0000:00:06.0: vfio-noiommu device opened by user (dpdk-testpmd:1670)
Feb  7 02:59:11 ip-192-168-158-79 dpdk-testpmd[1670]: EAL: Probe PCI driver: net_ena (1d0f:ec20) device: 0000:00:06.0 (socket -1)
Feb  7 02:59:11 ip-192-168-158-79 dpdk-testpmd[1670]: TELEMETRY: No legacy callbacks, legacy socket not created
Feb  7 02:59:11 ip-192-168-158-79 dpdk-testpmd[1670]: testpmd: create a new mbuf pool <mb_pool_0>: n=171456, size=2176, socket=0
Feb  7 02:59:11 ip-192-168-158-79 dpdk-testpmd[1670]: testpmd: preferred mempool ops selected: ring_mp_mc
Feb  7 03:02:02 ip-192-168-158-79 dpdk-testpmd[1670]: ena_rx_queue_release(): Rx queue 0:0 released
Feb  7 03:02:02 ip-192-168-158-79 dpdk-testpmd[1670]: ena_tx_queue_release(): Tx queue 0:0 released
Feb  7 03:02:02 ip-192-168-158-79 kernel: [10733.966442] eal-intr-thread[1671]: segfault at 443 ip 000056519d78c987 sp 00007f05136762e0 error 4 in dpdk-testpmd[56519c6f2000+14d6000]
```

# 文書

- [dpdk.org](https://www.dpdk.org/)
  - 様々なドキュメントはここから 
- [Getting Started Guide for Linux](https://doc.dpdk.org/guides/linux_gsg/index.html)
  - [9. EAL parameters](https://doc.dpdk.org/guides/linux_gsg/linux_eal_parameters.html) # EALの引数
- [Sample Applications User Guides](https://doc.dpdk.org/guides/sample_app_ug/index.html)
- [Testpmd Application User Guide (TAUG)](https://doc.dpdk.org/guides/testpmd_app_ug/)
   - [3. Running the Application](http://doc.dpdk.org/guides/testpmd_app_ug/run_app.html) # コマンド引数
   - [4. Testpmd Runtime Functions](https://doc.dpdk.org/guides/testpmd_app_ug/testpmd_funcs.html) # インタープリター内でのコマンド



# 開発関連レポジトリ

- [Bugzilla – Main Page](https://bugs.dpdk.org/)
   - Bugを検索する時
- [git.dpdk.org/dpdk](http://git.dpdk.org/dpdk/)
    - 開発レポジトリを確認する時 
   - [PatchWork](https://patches.dpdk.org/)
      - 投稿されているパッチを確認する場合 

# メーリングリスト

- [dev -- DPDK patches and discussions](https://mails.dpdk.org/listinfo/dev)
- [users -- DPDK usage discussions](https://mails.dpdk.org/listinfo/users)

# QA サイト

- [Questions tagged [dpdk]](https://stackoverflow.com/questions/tagged/dpdk)