我在运行Red Had Enterprise Linux的实时系统上维护代码。我担心有时候,尽管以最高优先级运行东西,网络设法使计算机速度降低,我想禁用该卡,以便我可以使用CPU的全部功能。我需要在网络功能开始时使用一些文件,但在某一点之后,我可以有效地禁用网络直到程序完成。有没有办法通过某种API调用来禁用网络?
答案 0 :(得分:3)
希望有人可以对此进行扩展,但是可能值得研究ifconfig如何禁用网络设备。您可能可以在界面上执行ioctl以禁用它。根据驱动程序/ nic,内核可能会导致网络硬件丢弃数据包而不是cpu。
ifconfig的源代码在这里:
Iproute2,也可以执行与ifconfig相同的操作:
我发现iproute2的源代码比ifconfig更容易理解,但是应该相对容易地看到它们如何与网络堆栈连接以禁用接口。
答案 1 :(得分:1)
系统执行此操作的方式是发布ip link set dev ${DEVICE} down 2> null
。查看ip.c的代码,例如here你可以自己检查一下它是如何完成的。关键是netif.h,它通过调用net_if_set_down()
来关闭网络。我认为它只是设置了一面旗帜。
netif->flags &= ~NETIF_FLAG_UP
你可以自己从这里继续,但请记住netif.h是内核的一部分......
答案 2 :(得分:0)
网络是内核的一部分,而不是用户空间进程。假设您已启用模块支持,您可以执行相当于调用rmmod
以从内核中删除网络驱动程序模块的操作;或者您可以将所有netfilter规则设置为DROP
,看看是否加快了速度。我可能更喜欢在启动器脚本(使用现成的iptables-save
/ iptables-restore
)中执行此操作,而不是在C ++中对其进行编码。或者你甚至可以将接口关闭。
答案 3 :(得分:-1)
您说的是“API”,但未提及您的程序/脚本的语言,也未提及您的操作系统。
在Linux变体上,如CentOS,RHEL,SuSE和Fedora,来自bash / Bourne shell脚本:
/sbin/service network stop
rc=$?
if [ "$rc" -ne 0 ]; then
echo "***** Failed to stop networking service"
exit $rc
fi
# Do your thing
/sbin/service network start