免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 40958 | 回复: 96
打印 上一主题 下一主题

负载过大时,e1000_watchdog 反复 UP、DOWN 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-18 11:48 |只看该作者 |倒序浏览
做 NAT 服务器,当负载过大时,总出现
Oct 17 14:56:04 server kernel: e1000: eth0: e1000_watchdog: NIC Link is Down
Oct 17 14:56:08 server kernel: e1000: eth0: e1000_watchdog: NIC Link is Up 100 Mbps Full Duplex
Oct 17 14:56:09 server kernel: e1000: eth0: e1000_watchdog: NIC Link is Down
Oct 17 14:56:15 server kernel: e1000: eth0: e1000_watchdog: NIC Link is Up 100 Mbps Full Duplex

网卡反复 UP、DOWN,甚至导致系统自动重启
这个 e1000_watchdog 是做什么用的?为何有如此现象?如何不让他自动 UP、DOWN ?

论坛徽章:
5
2 [报告]
发表于 2005-10-18 12:03 |只看该作者

负载过大时,e1000_watchdog 反复 UP、DOWN 的问题


  1. static void
  2. e1000_watchdog(unsigned long data)
  3. {
  4.         struct e1000_adapter *adapter = (struct e1000_adapter *) data;
  5.         struct net_device *netdev = adapter->;netdev;
  6.         struct e1000_desc_ring *txdr = &adapter->;tx_ring;
  7.         unsigned int i;
  8.         uint32_t link;

  9.         e1000_check_for_link(&adapter->;hw);

  10.         if((adapter->;hw.media_type == e1000_media_type_internal_serdes) &&
  11.            !(E1000_READ_REG(&adapter->;hw, TXCW) & E1000_TXCW_ANE))
  12.                 link = !adapter->;hw.serdes_link_down;
  13.         else
  14.                 link = E1000_READ_REG(&adapter->;hw, STATUS) & E1000_STATUS_LU;

  15.         if(link) {
  16.                 if(!netif_carrier_ok(netdev)) {
  17.                         e1000_get_speed_and_duplex(&adapter->;hw,
  18.                                                    &adapter->;link_speed,
  19.                                                    &adapter->;link_duplex);

  20.                         DPRINTK(LINK, INFO, "NIC Link is Up %d Mbps %s\n",
  21.                                adapter->;link_speed,
  22.                                adapter->;link_duplex == FULL_DUPLEX ?
  23.                                "Full Duplex" : "Half Duplex");

  24.                         netif_carrier_on(netdev);
  25.                         netif_wake_queue(netdev);
  26.                         mod_timer(&adapter->;phy_info_timer, jiffies + 2 * HZ);
  27.                         adapter->;smartspeed = 0;
  28.                 }
  29.         } else {
  30.                 if(netif_carrier_ok(netdev)) {
  31.                         adapter->;link_speed = 0;
  32.                         adapter->;link_duplex = 0;
  33.                         DPRINTK(LINK, INFO, "NIC Link is Down\n");
  34.                         netif_carrier_off(netdev);
  35.                         netif_stop_queue(netdev);
  36.                         mod_timer(&adapter->;phy_info_timer, jiffies + 2 * HZ);
  37.                 }

  38.                 e1000_smartspeed(adapter);
  39.         }

  40.         e1000_update_stats(adapter);

  41.         adapter->;hw.tx_packet_delta = adapter->;stats.tpt - adapter->;tpt_old;
  42.         adapter->;tpt_old = adapter->;stats.tpt;
  43.         adapter->;hw.collision_delta = adapter->;stats.colc - adapter->;colc_old;
  44.         adapter->;colc_old = adapter->;stats.colc;
  45.        
  46.         adapter->;gorcl = adapter->;stats.gorcl - adapter->;gorcl_old;
  47.         adapter->;gorcl_old = adapter->;stats.gorcl;
  48.         adapter->;gotcl = adapter->;stats.gotcl - adapter->;gotcl_old;
  49.         adapter->;gotcl_old = adapter->;stats.gotcl;

  50.         e1000_update_adaptive(&adapter->;hw);

  51.         if(!netif_carrier_ok(netdev)) {
  52.                 if(E1000_DESC_UNUSED(txdr) + 1 < txdr->;count) {
  53.                         /* We've lost link, so the controller stops DMA,
  54.                          * but we've got queued Tx work that's never going
  55.                          * to get done, so reset controller to flush Tx.
  56.                          * (Do the reset outside of interrupt context). */
  57.                         schedule_work(&adapter->;tx_timeout_task);
  58.                 }
  59.         }

  60.         /* Dynamic mode for Interrupt Throttle Rate (ITR) */
  61.         if(adapter->;hw.mac_type >;= e1000_82540 && adapter->;itr == 1) {
  62.                 /* Symmetric Tx/Rx gets a reduced ITR=2000; Total
  63.                  * asymmetrical Tx or Rx gets ITR=8000; everyone
  64.                  * else is between 2000-8000. */
  65.                 uint32_t goc = (adapter->;gotcl + adapter->;gorcl) / 10000;
  66.                 uint32_t dif = (adapter->;gotcl >; adapter->;gorcl ?
  67.                         adapter->;gotcl - adapter->;gorcl :
  68.                         adapter->;gorcl - adapter->;gotcl) / 10000;
  69.                 uint32_t itr = goc >; 0 ? (dif * 6000 / goc + 2000) : 8000;
  70.                 E1000_WRITE_REG(&adapter->;hw, ITR, 1000000000 / (itr * 256));
  71.         }

  72.         /* Cause software interrupt to ensure rx ring is cleaned */
  73.         E1000_WRITE_REG(&adapter->;hw, ICS, E1000_ICS_RXDMT0);

  74.         /* Early detection of hung controller */
  75.         i = txdr->;next_to_clean;
  76.         if(txdr->;buffer_info[i].dma &&
  77.            time_after(jiffies, txdr->;buffer_info[i].time_stamp + HZ) &&
  78.            !(E1000_READ_REG(&adapter->;hw, STATUS) & E1000_STATUS_TXOFF))
  79.                 netif_stop_queue(netdev);

  80.         /* Reset the timer */
  81.         mod_timer(&adapter->;watchdog_timer, jiffies + 2 * HZ);
  82. }
复制代码

[ 本帖最后由 platinum 于 2005-11-3 14:24 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2005-10-18 12:19 |只看该作者

负载过大时,e1000_watchdog 反复 UP、DOWN 的问题


  1. if((adapter->;hw.media_type == e1000_media_type_internal_serdes) &&
  2.   !(E1000_READ_REG(&adapter->;hw, TXCW) & E1000_TXCW_ANE))
  3. link = !adapter->;hw.serdes_link_down;
  4. else
  5. link = E1000_READ_REG(&adapter->;hw, STATUS) & E1000_STATUS_LU;
复制代码

这段话什么意思?什么情况会导致 link = 0 ?
如果删除了 else 后面的东西重新编译驱动,会不会有副作用?

论坛徽章:
0
4 [报告]
发表于 2005-10-18 12:56 |只看该作者

负载过大时,e1000_watchdog 反复 UP、DOWN 的问题

watchdog这个好像是检测到坏桢认为可能硬件出现故障复位硬件,不过e1000吃不住流量的情况应该不大,估计是线制作的不合格导致大流量时坏桢严重,或者有电气干扰等。

论坛徽章:
0
5 [报告]
发表于 2005-10-18 12:58 |只看该作者

负载过大时,e1000_watchdog 反复 UP、DOWN 的问题

对了,ifconfig看一下是不是相应网卡出现很多errors的包

论坛徽章:
0
6 [报告]
发表于 2005-10-18 13:11 |只看该作者

负载过大时,e1000_watchdog 反复 UP、DOWN 的问题

很奇怪呢,RX-ERR RX-DRP RX-OVR,这三项都是 0
是这样的,这台机器上还运行其他服务,CPU 一直比较高,会不会是没有过多的 CPU 来负责处理数据包造成的?

还有,我如果修改源代码,注释掉硬件复位那段代码可不可以?会不会有副作用?

论坛徽章:
0
7 [报告]
发表于 2005-10-18 14:38 |只看该作者

负载过大时,e1000_watchdog 反复 UP、DOWN 的问题

cat /proc/interrupts  看下是否和这相似,注释掉硬件复位那段代码没问题,
          CPU0       CPU1       CPU2       CPU3
0:  347275720  347745526  340396987  340996245    IO-APIC-edge  timer
1:        284        789        878        556    IO-APIC-edge  i8042
8:          0          0          0          1    IO-APIC-edge  rtc
9:          0          0          0          0   IO-APIC-level  acpi
14:          1          0         20         19    IO-APIC-edge  ide0
15:      87104     399199       5819     328406    IO-APIC-edge  libata
169:          0          0          0          0   IO-APIC-level  uhci_hcd
177:          0          0          0          0   IO-APIC-level  uhci_hcd
185:          0          0          0          0   IO-APIC-level  ehci_hcd
209:     186220    5466568     211081    5950435   IO-APIC-level  ioc0
217:   27184131          0          0        157   IO-APIC-level  eth0
225:          0          0   51742411         29   IO-APIC-level  eth1
NMI:          0          0          0          0
LOC: 1376397708 1376397707 1376397706 1376397705
ERR:          0
MIS:          0

论坛徽章:
0
8 [报告]
发表于 2005-10-18 14:41 |只看该作者

负载过大时,e1000_watchdog 反复 UP、DOWN 的问题

           CPU0
  0:    5208209    IO-APIC-edge  timer
  1:          2    IO-APIC-edge  keyboard
  4:         30    IO-APIC-edge  serial
  8:          1    IO-APIC-edge  rtc
  9:          0   IO-APIC-level  acpi
15:     108463    IO-APIC-edge  ide1
21:   15700851   IO-APIC-level  eth0
22:   15716884   IO-APIC-level  eth1
NMI:          0
LOC:    5208446
ERR:          0
MIS:          0

这样正常吗?

论坛徽章:
0
9 [报告]
发表于 2005-10-18 15:17 |只看该作者

负载过大时,e1000_watchdog 反复 UP、DOWN 的问题

不会是负载过大的原因.我们单位做iptv,负荷比你重多了吧,也是e1000

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
10 [报告]
发表于 2005-10-18 15:22 |只看该作者

负载过大时,e1000_watchdog 反复 UP、DOWN 的问题

e1000 是千兆的网卡, 100M应该没事呀?
watchdog 好象是用来检测什么东东的一个计时, 我觉得是不是你的 switch 受不了呀? 因为 switch 如果不行了, 网卡一样会认为网络 down 呀.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP