admin管理员组文章数量:1535803
2024年4月1日发(作者:)
浅谈watchdogtimeout出现的原因Unix系统-电脑资料
[code:1:2d85a50892]浅谈watchdogtimeout出现的原因 最近
有比较多的人谈到网卡的”watchdogtimeout“问题,究竟是什么原
因造成的,大多数人都 把网卡的 性能 不佳做为问题的根源所在,。我
认为网卡的性能只是一方面的因素,他还涉及到缓冲的 大
[code:1:2d85a50892]浅谈"watchdog timeout"出现的原因
最近有比较多的人谈到网卡的”watchdog timeout“问题,究
竟是什么原因造成的,大多数人都
把网卡的性能不佳做为问题的根源所在。我认为网卡的性能只是
一方面的因素,他还涉及到缓冲的
大小、单位时间内的包的数量、及网卡驱动程序等一系列因素。
以下将从源代码的角度来对他进行
分析。
首先,我们看看到底是哪个函数发出了“watchdog timeout”
字符串,只要你查一下源代码
不难看出,在各网卡的驱动程序里的XX_watchdog(XX是各网
卡的名称,如:8139是rl,AMD7990
是pcn,Inter是fxp等等)函数发出的。函数比较简单:
static void rl_watchdog(ifp)
struct *ifp;/*申明ifp是一个ifnet结构,结构存放了该网卡
的输入输
出的函数指针和一些重要参数,当然也包括rl_watchdog函数的
指针*/
{
struct rl_softc *sc;
sc = ifp->if_softc; /*ifnet是softc结构的一个子集,softc包含
了更多的该网卡的参数*/
printf("rl%d: watchdog timeoutn", sc->rl_unit);/*打印出是哪
块网卡出现问题。
sc->rl_unit代办该种网卡的第几快。我们知道在一个机器里同样
的网卡可能有几块,当然此参数是由网卡驱动程序的初始化程序
填充*/
ifp->if_oerrors++; /*累计输出出现的错误包数量(o代表输出)
*/
rl_txeof(sc);/*这里是每个驱动程序不同的,此处为8139的,不
过我觉得用rl_stop(sc)更好*/
rl_rxeof(sc);/*这里也是每个驱动程序不同。我觉得来一个
rl_reset(sc)也不错。*/
rl_init(sc);/*这里大家都一样,重新初始芯片。*/
return;
}
好了,到这我们知道是XX_watchdog函数发出了
watchdog timeout信息。那么是谁来调用该函数呢?
我们接着来看另一个函数:if_slowtimo函数,该函数在if.c中。
if.c是interface(接口)的简称,
即系统在启动过程中初始化时必须调用其中的一些函数。ifinit函
数是其中被调用的一个,这个函数很
简单:
void
ifinit()
{
static struct timeout if_slowtim;
timeout_set(&if_slowtim, if_slowtimo, &if_slowtim);/*简单的
说就是设置一定时器*/
if_slowtimo(&if_slowtim);/*哈哈,等不急了,先调用了再说*/
}
这样一来,if_slowtimo就成了一个一定时间内就要执行的一个函
数了,此时候,大家应该能猜到if_slowtimo
的大概功能,无非是定时查看各网卡的发送数据的情况,如果没
版权声明:本文标题:浅谈watchdogtimeout出现的原因Unix系统-电脑资料 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1711967256a336484.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论