使用linux用户应用程序中的ethtool来更改网络设置

时间:2016-05-27 19:22:55

标签: linux networking real-time ethercat

我正在使用RT_PREEMPT补丁在Xubuntu上开发EtherCAT Master应用程序,因此我可以通过EtherCAT通信获得实时性能。

我发现默认情况下某些网卡的 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来配置它正在使用的网卡的网络设置?或者执行相同的API?

我的应用程序作为非root用户运行,使用setcap为EtherCAT分配CAP_NET_ADMIN和CAP_NET_RAW功能。这足以将ethtool作为子进程调用,还是我需要其他权限?或者我甚至可以调用ethtool来更改合并设置而不是root用户?

0 个答案:

没有答案