1

RT_PREEMPT パッチを適用した Xubuntu で EtherCAT マスター アプリケーションを開発しているので、EtherCAT 通信でリアルタイムのパフォーマンスを実現できます。

一部の NIC では、rx-usecsの「Coalesce パラメータ」がデフォルトで 0 以外の値に設定されていることがわかりました。0 以外の値を設定すると、ネットワーク カードは、ネットワーク パケットの受信後に割り込みを生成する前に、そのマイクロ秒数だけ待機します。しかし、ネットワーク ドライバーはリアルタイム アプリケーションによってプリエンプトされ、アプリケーションがネットワークから EtherCAT IO を受信する際に大幅な遅延が発生します。

ecat@EcatLab:~/SIL/RealTimePlatform/EcMaster$ ethtool -c eth1
Coalesce parameters for eth1:
Adaptive RX: off  TX: off
stats-block-usecs: 0
sample-interval: 0
pkt-rate-low: 0
pkt-rate-high: 0

rx-usecs: 3
rx-frames: 0
rx-usecs-irq: 0
rx-frames-irq: 0

tx-usecs: 0
tx-frames: 0
tx-usecs-irq: 0
tx-frames-irq: 0

rx-usecs-low: 0
rx-frame-low: 0
tx-usecs-low: 0
tx-frame-low: 0

rx-usecs-high: 0
rx-frame-high: 0
tx-usecs-high: 0
tx-frame-high: 0

現在、EtherCAT に使用するすべてのネットワーク カードに対して、sudo を使用して ethtool を手動で実行する必要があります。これはスクリプト化できますが、理想的には、EtherCAT を使用するように実際に構成された NIC でのみ実行する必要があります。これは、アプリケーションの外部で行うのは困難です。

Linux アプリケーション内から ethtool を呼び出して、使用している NIC のネットワーク設定を構成する方法はありますか? または、同じことを実行する API はありますか?

私のアプリケーションは、EtherCAT 用に CAP_NET_ADMIN および CAP_NET_RAW 機能を割り当てる setcap を使用して非 root ユーザーとして実行されます。サブプロセスとして ethtool を呼び出すのにこれで十分ですか? それとも追加のアクセス許可が必要ですか? または、root にならずに ethtool を呼び出して合体設定を変更することもできますか?

4

0 に答える 0