Linux 用のオープンソース・ソフトウェア・ツール『ethtool』を利用することでイーサネット・ドライバの動作やパフォーマンスをチューニングすることが可能です。SoC FPGA 用の Linux ソフトウェア・リファレンス環境(Golden Software Reference Design (GSRD))には、初めから ethtool がインストールされているので、ターミナル上で ethtool コマンドを入力することで簡単にパラメータ変更の効果が確認できます。

この記事では、ethtool によるパラメータ変更の方法と、イーサネットのパフォーマンスの変化を実験した結果を掲載します。

実験は、下記の機器構成で行いました。
Cyclone V SoC を搭載した 2台の評価ボードの Ethernet を 1本の LAN ケーブルで直結。ネットワークを構成する別の機器の影響を受けない構成としました。使用した評価ボード「Atlas-SoC Development Platform(Terasic DE0-Nano-SoC)」の仕様については、Rocketboards.org の 該当ボードのページ(下記リンク先)を参照してください。

Atlas-SoC Development Platform

Article header library 119741 pic01  5

ethtool によるパラメータ変更方法

ethtool は、Linux の UART ターミナル上で "ethtool" とコマンド入力して利用します。
イーサネット・ドライバの動作に関わるパラメータはコマンドラインに -c(小文字)オプションを指定することで "表示"、-C(大文字)オプションを指定することで "変更" が可能です。(-c / -C オプションで扱うパラメータ群は、coalesce パラメータと呼ばれるようです。)

今回の実験で利用するコマンドラインは以下の2種類です。

  • coalesce パラメータを表示(-c(小文字)を指定)

『ethtool -c <ネットワークデバイス名>』(例:ethtool -c eth0)

  • coalesce パラメータを変更(-C(大文字)を指定)

『ethtool -C <ネットワークデバイス名> <パラメータ名> <設定値>』(例:ethtool -C eth0 rx-usecs 40)

その他の操作については、『ethtool --help』で表示されるヘルプ画面を参照してください。

coalesce パラメータの内、以下のパラメータがネットワークの性能に関わるようです。

  • rx-usecs ... パケット到着~受信割り込み発行までの遅延時間(usec)
  • tx-usecs ... パケット送信~送信割り込み発行までの遅延時間(usec)
  • tx-frames ... 送信割り込み発行までの最大送信パケット数


この記事の実験でも上記のパラメータを編集しています。初期設定値(変更前)の状態に加えて、2パターンのパラメータ変更を加えた環境(設定変更1、設定変更2)で実験を行いました。その際、設定変更1、設定変更2 のパラメータ変更は 2台の評価ボードの両方にそれぞれ同じ設定を行っています。なお、rx-usecs の設定値には下限値が設けられているようでしたが、ドライバのソースコードを変更することでより小さな値をセットすることが可能でした。(設定変更2で実施)

具体的なパラメータ設定値およびドライバの変更箇所は、下図を参照してください。

Article header library 119741 pic02  6

実験結果

ping レスポンス

ping コマンド実行時に表示されるレスポンス時間(time= XXX ms)を比較してみましたが、ping レスポンスには rx-usecs の設定値が大きく影響するようです。rx-usecs を小さくすることでレスポンス時間の大幅改善が確認できました。
別途、送信側の遅延設定(tx-usecs, tx-frames)の値も変更してみましたが、送信側のパラメータを変更してもレスポンス時間は大きく変わらない結果でした。

Article header library 119741 pic03  5

iperf スループット

iperf によるスループット計測結果も比較しました。iperf は、ethtool と同様に別途インストールが必要なソフトウェアとなりますが、こちらも SoC FPGA 用の Linux ソフトウェア・リファレンス環境には初めからインストールされているので、そのまま利用可能です。

iperf の結果からは、ping レスポンス時間のように明確な傾向は読み取れませんでしたが、最大スループットには rx-usecs だけでなく送信側の遅延設定も影響するという結果が得られました。
設定変更1(rx-usecs のみ初期設定値より小さく変更)により、パケット・サイズを指定した場合のスループットの改善が見えましたが、設定変更2(rx-usecs を最小化しつつ、送信側の遅延設定も小さい値に変更)を行うと逆にスループットが下がってしまう結果でした。おそらく、送信側の遅延設定値を小さい値に変更したことによる影響と考えられます。

Article header library 119741 pic04  3

まとめ

実験の結果より、ethtool の coalesce パラメータの設定値を変更することで、ping レスポンス時間や iperf の結果が大きく変わることが確認できました。これにより、ethtool の利用(coalesce パラメータの設定変更)がイーサネットのパフォーマンス・チューニングが必要となった際に有効な手段となり得るということが言えると思います。
イーサネットのパケット送受信の遅延時間やスループットが期待した性能を満たさない場合には、まずは ethtool を利用して coalesce パラメータのチューニングを行ってみてください。

最後に、ethtool にて coalesce パラメータの設定変更を行う場合には次の事にも注意してください。

注意点
rx-usecs、 tx-usecs などの設定値は、イーサネット・ドライバの送受信処理に対して、ある程度の遅延時間を設けることで、パケットの送受信が Linux システム全体のパフォーマンスへ悪影響を与えないようにする役目を持ちます。遅延時間を最小化する方向で coalesce パラメータを変更する場合は、送受信割り込みの頻度が多くなるため、他の処理(Linux システム全体)への影響も考慮頂いたうえで最適値を検討する必要があります。