分享

Linux e1000e 网卡驱动

 sk神棍 2012-03-31

用于英特尔? 千兆位适配器的 e1000e Linux* 驱动程序:英特尔网络适配器用户指南

概述
支持的适配器
编译和安装
命令行参数
额外配置
已知问题


e1000e 概述

此文件描述用于基于英特尔? 82571EB 和 82572EI 的千兆位英特尔? 网络连接的 Linux* 基础驱动程序。此驱动程序支持 2.6.x 内核。

此驱动程序仅作为可载入模块得到支持。英特尔不会针对内核源码供应补丁程序来允许驱动程序的静态联结。与硬件要求有关的问题,请参阅系统要求。所有列出的硬件要求均适用于 Linux。

以下功能在受支持的内核中可用:

  • 本地 VLAN
  • 通道组合(分组)
  • SNMP

现在适配器分组使用本地 Linux 通道组合模块实施。这包含在受支持的 Linux 内核中。可从 Linux 内核源中找到有关通道组合的文档:/documentation/networking/bonding.txt

使用 Ethtool、lspci 或 ifconfig 获得驱动程序信息。更新 ethtool 的指导位于本页稍后的额外配置章节。


e1000e Linux 基础驱动程序支持的适配器

下列英特尔网络适配器与本发行版中的 e1000e 驱动程序兼容:

控制器适配器名称板 ID
82571EB英特尔 PRO/1000 PT 双端口服务器适配器C57721-xxx
82572EI英特尔 PRO/1000 PT 服务器适配器D28777-xxx
82572EI英特尔 PRO/1000 PF 服务器适配器D28779-xxx

要确定适配器是否受支持,找到适配器上的板 ID 号。寻找印有条型码和 123456-001 格式数字(6 位数字、连字符、3 位数字)的标签。在上列板号中匹配此数字。

要获得辨认适配器的以及用于 Linux* 的网络适配器最新驱动程序的更多信息,访问客户支持


编译和安装

安装 e1000e 驱动程序有两种方法:

  • 从源代码安装
  • 从 DKMS RPM 安装

从源代码安装

要编译该驱动程序的二进制 RPM* 包,运行 rpmbuild -tb <文件名.tar.gz>。用该驱动程序的具体文件名代替 <文件名.tar.gz>。

注意:要使编译结果正确运行,极为重要的是当前运行的内核与安装的内核源的版本和配置相符。如果刚重新编译了内核,应重新引导系统并选择正确的内核来引导。
注意:RPM 功能仅在 Red Hat 发布上测试过。
  1. 从驱动程序 CD 的 Linux/Source/base_driver/e1000e-<x.x.x>tar.gz(其中 <x.x.x> 是驱动程序 tar 文件的版本号码)将基础驱动程序 tar 文件复制到您选定的目录。例如,使用 '/home/username/e1000e' 或 '/usr/local/src/e1000e'。 http:///projects/e1000/files/e1000e%20stable/ 
     
  2. 解压缩该档案文件,其中 <x.x.x> 是驱动程序压缩文件的版本号:
    tar zxf e1000e-<x.x.x>.tar.gz
  3. 切换到驱动程序 src 目录下,其中 <x.x.x> 是驱动程序tar文件的版本号:
    cd e1000e-<x.x.x>/src/
  4. 编译驱动程序模块:
    # make install
    二进制文件将安装为:
    /lib/modules/<KERNEL VERSION>/kernel/drivers/net/e1000e/e1000e.ko
    以上列出的安装位置为默认位置。各种 Linux 发布版本的安装位置可能不同。有关更多信息,请参见驱动程序 tar 中的 ldistrib.txt 文件。
     
  5. 使用 insmod 或 modprobe 命令安装模块:
    modprobe e1000e
    insmod e1000e
    注意:对 2.6 内核,如果指定了驱动程序的完整路径,则可以使用 insmod 命令。例如:
    insmod /lib/modules/<KERNEL VERSION>/kernel/drivers/net/e1000e/e1000e.ko

    对基于 2.6 的内核,确保先从内核移除旧的 e1000e 驱动程序,然后再加载新模块:
    rmmod e1000e; modprobe e1000e
  6. 用下列命令指派 IP 地址至以太网接口卡并予以激活,其中,<x> 是接口卡号:
    ifconfig eth<x> <IP 地址>
  7. 验证接口卡正常工作。输入以下命令。其中,<IP 地址>是与被测接口卡位于同一子网的另一台计算机的 IP 地址:
    ping <IP 地址>
注意:有些系统不能很好支持 MSI 和(或)MSI-X 中断。如果您的系统需禁用此类中断,可用以下命令编译和安装该驱动程序:
  #make CFLAGS_EXTRA=-DDISABLE_PCI_MSI install
通常,该驱动程序每两秒钟生成一个中断。如果 ethX e1000e 设备的 cat /proc/interrupts 没有接收到中断,可能必须采用此变通办法。

从 DKMS RPM 安装

在安装 CD 上,DKMS RPM 位于:/Linux/DKMS/base_driver/。否则,巡航到包含要安装的 RPM 的目录。参见以下表格以确定用于您的 Red Hat 发布的 RPM。依照以下指示来安装或卸载 RPM。

注意:试图安装 DKMS RPM 之前必须先安装 DKMS(2.0 或更高)框架。可从此网址获取 DKMS:http://linux./dkms/

DKMS RPM 向对受支持的 Linux 发布提供,并命名为 e1000e-<驱动程序版本>-<类型>.noarch.rpm

<驱动程序版本>和<类型>因使用的驱动程序版本而各异:

  • <驱动程序版本>是驱动程序版本号码,如:6.2.xy。
  • <类型> 或者是 sb_dkms(用于包含源和二进制的信息包),或者是 bo_dkms(用于仅包含二进制模块的信息包)

包含的 KDMS RPM 的命名常规是:

<组件名称>-<组件版本>-<类型>.noarch.rpm

例如,e1000e-5.6.1-sb_dkms.noarch.rpm:e1000e 是组件名称;5.6.1 是组件版本;而 sb_dkms 是类型。

注意:如果已装有前一版本的 RPM,必须先将其卸装,再安装新的 RPM。要确定是否装有前一版本的 RPM,输入 rpm -q e1000e。

若要安装 DKMS RPM,使用此命令:

rpm -i <文件名>

若要卸装 RPM,使用此命令:

rpm -e <软件包>

使用 KMP RPM 安装

KMP RPM 更新系统上当前安装的现有 e1000e RPM。这些更新由 SuSE 在 SLES 发行版中提供。如果系统上当前没有 RPM,KMP 不会安装。

RPM 针对支持的 Linux 分发版提供。所包含的 RPM 的命名常规是:

intel-<组件名>-<组件版本>.<体系结构类型>.rpm

例如,intel-e1000e-1.3.8.6-1.x86_64.rpm:e1000e 是组件名称;1.3.8.6-1 是组件版本;而 x86_64 是体系结构类型。

KMP RPM 针对支持的 Linux 分发版提供。包含的 KMP RPM 的命名常规是:

intel-<组件名>-kmp-<内核类型>-<组件版本>_<内核版本>.<体系结构类型>.rpm

例如,intel-e1000e-kmp-default-1.3.8.6_2.6.27.19_5-1.x86_64.rpm:e1000e 是组件名;default 是内核类型;1.3.8.6 是组件版本;2.6.27.19_5-1 是内核版本;而 x86_64 是体系结构类型。

要安装 KMP RPM,键入以下两条命令:

rpm -i <rpm 文件名>
rpm -i <kmp rpm 文件名>

例如,要安装 e1000e KMP RPM 包,键入以下命令:

rpm -i intel-e1000e-1.3.8.6-1.x86_64.rpm
rpm -i intel-e1000e-kmp-default-1.3.8.6_2.6.27.19_5-1.x86_64.rpm

命令行参数

使用下列选项参数的方法是将其以 modprobe 或 insmod 命令输入至命令行中,使用的语法如下:

modprobe e1000e [<选项>=<值1>,<值2>,...] 

insmod e1000e [<选项>=<值1>,<值2>,...]

各个参数的默认值通常就是推荐使用的设置(另行说明的除外)。

以下表格包含用于 insmod 和 modprobe 命令的参数和可能的值:

参数名称有效范围/设置默认值说明
InterruptThrottleRate0, 1, 3, 100-100000(0=关闭, 1=动态, 3=动态保守)

InterruptThrottleRate受基于英特尔 82542、82543、或 82544 的适配器的支持。

3此驱动程序能限制适配器每秒钟为进入信息包生成的中断数量。做到这点的方法是:将基于适配器每秒钟最多能为进入信息包生成的中断数量的一个值写入适配器。

将 InterruptThrottleRate 的值设为大于或等于 100 将指示适配器在每秒钟内最多送出这个数量的中断,即使有更多的信息包进入。这将降低系统的中断负载,而且能在负载较大的情况下减少对 CPU 的使用,但是会延长等候时间,因为信息包的处理会减慢。

驱动程序的默认行为先前假设静态的 InterruptThrottleRate 值 8000,为所有通信量类型提供了一个较好的后退值,但是在小型信息包性能和等候时间方面有所不足。硬件能在每秒处理多得多的小型信息包,因此实现了一个适应性中断调节算法。

驱动程序有两种适应性模式(设置 1 或 3),在这些模式中驱动程序根据收到的通信量动态调整 InterruptThrottleRate 值。在确定了最后时间的进入通信量类型后,它将 InterruptThrottleRate 调整到适合该通信量的值。

此算法将每个阶段的进入通信量归类。一旦确定类别,InterruptThrottleRate 被调整到最适宜该通信量的值。定义的类别有三个:“大通信量”, 用于大量正常大小的信息包;“低延迟”,用于小量通信量和/或大部分为小信息包的通信量;和“最低延迟”,用于几乎全部是小信息包的通信量或最低通信量。

在动态保守模式中,InterruptThrottleRate 值设为 4000 以用于属“大通信量”类的通信量。如果通信量属于“低延迟”或“最低延迟”类,InterruptThrottleRate 将增至 20000。这一默认模式适用于绝大多数的应用程序。

在低延迟很关键的情况下(如集群或网格计算),如果将 InterruptThrottleRate 设为模式 1,则这种算法能进一步降低延迟。在此模式中(模式 3 亦然),InterruptThrottleRate 对“最低延迟”类别的通信量的步进将增至 70000。

将 InterruptThrottleRate 设为 0 将关闭一切中断调节,并可能改善小信息量延迟,但是这通常不适用于大吞吐量通信。

注意:当 e1000e 以默认设置加载以及多个适配器同时使用时,CPU 的使用量会非线性增大。要限制 CPU 的使用量而不影响总体吞吐量,依照下列加载驱动程序:

insmod e1000e.o InterruptThrottleRate=3000,3000,3000

这将驱动程序第一、第二和第三实例的 InterruptThrottleRate 设为 3000 中断/秒。每秒 2000 到 3000 中断的范围在大多数系统上有效,而且是一个良好的起点,但是最佳值则应根据平台而具体设置。如果 CPU 使用量不是问题的话,则使用 RX_POLLING (NAPI) 和默认驱动程序设置。
注意:InterruptThrottleRate 优先于 TxAbsIntDelay 和 RxAbsIntDelay 参数。换句话说,缩短接收和/或传输的绝对延迟不会强制控制器生成大于 Interrupt Throttle Rate(中断节流率)允许的中断量。
RxIntDelay0-65535(0=关)0该值以 1.024 微秒为单位延迟接收中断的生成。如果针对特定的网络交通量调整,减少接收中断可提高 CPU 效率。增大该值会为帧接收添加额外的等待时间,可能导致 TCP 交通吞吐量降低。如果系统报告接收信息包被丢弃,该值可能设置得太高,导致驱动程序用尽了可用的接收描述符。

小心:在某种网络情况下,将 RxIntDelay 设置为 0 以外的值会导致挂起(停止传输)。如发生此情况,系统事件日志中会记入一条 NETDEV WATCHDOG 消息。此外,控制器会自动重置,恢复网络连接。要避免发生挂起,确保将 RxIntDelay 设为零。
RxAbsIntDelay0-65535(0=关)8此值以 1.024 微秒为单位,它限制生成接收中断的延迟。此值仅在 RxIntDelay 为非零时才有用。它确保初始信息包在一定时间内被接收后便生成一个中断。恰当的微调,加上 RxIntDelay,将可能在特定的网络状态下提高通信吞吐量。

(仅在英特尔 82540、82545 和更新的适配器上受支持。)

TxIntDelay0-65535(0=关)8该值以 1.024 微秒为单位延迟传输中断的生成。如果针对特定的网络交通量调整,减少传输中断可提高 CPU 效率。如果系统报告传输信息包被丢弃,该值可能设置得太高,导致驱动程序用尽了可用的传输描述符。
TxAbsIntDelay0-65535(0=关)32

此值以 1.024 微秒为单位,它限制生成传输中断的延迟。此值仅在 TxIntDelay 为非零时才有用。它确保初始信息包在一定时间内被通过线路传输以后便生成一个中断 。恰当的微调,加上 TxIntDelay,将可能在特定的网络状态下提高通信吞吐量。

(仅在英特尔 82540、82545 和更新的适配器上受支持。)

copybreak0-xxxxxxx(0=关)256

用法:insmod e1000e.ko copybreak=128

驱动程序将所有等于或小于此大小的信息包复制至全新的接收缓冲区,然后再将其提交给堆栈。

此参数与其它参数不同之处在于这是一个应用于所有驱动程序实例的单一参数(不是 1, 1, 1, 等),而且在运行时也可从 /sys/module/e1000e/parameters/copybreak 引用。

SmartPowerDownEnable0-10(禁用)此值允许 PHY 在更低电源状态时关闭。在支持的芯片组中,可关闭此参数。
KumeranLockLoss0-11(启用)对 ICH8 系统的最初硅发布,此值在关机时跳过重置 PHY。
IntMode0-2
(0=传统, 1=MSI, 2=MSI-X)
2 (MSI-X)IntMode 允许在模块加载的时候更改中断模式,而不需要重新编译。如果驱动程序未能启用特定中断模式,该驱动程序将尝试其他中断模式,从最不兼容模式至最兼容模式依次尝试。中断的顺序是 MSI-X、MSI、传统。如果指定了 MSI 中断 (IntMode=1),则只尝试 MSI 和传统。
CrcStripping0-11(启用)此命令先从接收到的信息包剥离 CRC,然后再将其送往网络堆栈。如果您的系统启用了 BMC,但在加载或启用该驱动程序后无法接收 IPMI 通信量,尝试禁用 BMC 功能。

额外配置

配置不同发布上的驱动程序

配置网络驱动程序使之在系统启动时正确载入的方式,随分发版本而异。典型情况是配置进程在 /etc/modules.conf 或 /etc/modprobe.conf 中增加一行 alias(别名)行,以及编辑其它系统启动脚本和(或)配置文件。许多 Linux 分发版本随带可进行这些更改的工具。要了解为您的系统配置网络设备的正确方法,参阅您的分发版本的文档。如果在此过程中向您询问驱动程序或模块名称,则用于英特尔千兆位系列适配器的 Linux 基础驱动程序的名称是 e1000e。

例如,您为两个英特尔千兆位适配器(eth0 和 eth1)安装 e1000e 驱动程序,并将速度和双工设置为 10 Full(全双工)和 100 Half(半双工),则将以下行添加至 modules.conf:

alias eth0 e1000e
alias eth1 e1000e
options e1000e IntMode=2,1

查看链接消息

如果该分发版限制系统消息,则链接消息将不显示至控制台。为能在控制台看到网络驱动器链接消息,输入以下命令将 dmesg 设为 8:

dmesg -n 8
注意:这一设置并不跨引导保存。

巨帧

通过将 Maximum Transmission Unit(MTU,最大传输单元)值更改为大于默认的 1500 字节来启用巨帧支持。使用 ifconfig 命令来增加 MTU 的大小。例如:

ifconfig eth<x> mtu 9000 up

这一设置并不跨引导保存。在 Red Hat 发布上,将 MTU = 9000 添加至文件 /etc/sysconfig/network- scripts/ifcfg-eth<x> 可使设置更改永久化。其他分发版本可能将此设置保存至不同位置。

注意
  • 以 10 或 100 Mbps 使用巨帧将导致性能变差或链接丢失。
  • 要启用巨帧,在界面上将 MTU 的大小增加到 1500 以上。
  • 巨帧的最大大小为 9238 字节,与其相应的 MTU 大小为 9216 字节。有此限制的适配器均基于英特尔? 82571EB 和 82572EI LAN 控制器。它们和以下产品名称一一相对:
    英特尔 PRO/1000 PT 双端口服务器适配器
    英特尔 PRO/1000 PT 服务器适配器
    英特尔 PRO/1000 PF 服务器适配器

Ethtool

此驱动程序将 Ethtool 界面用于驱动程序配置和诊断,以及显示统计信息。Ethtool 版本 3.0 或更新版本为此功能之必需,然而我们强烈建议从以下网址下载最新的版本:http:///projects/gkernel。 

速度和双工模式

速度和双工通过 Ethtool 实用程序配置。所有 Red Hat 7.2 或以上的版本都包括 Ethtool。对其他 Linux 发布,请从以下网站下载并安装 Ethtool:http:///projects/gkernel。 

启用 Wake on LAN*(局域网唤醒)。

Wake on LAN (WOL) 通过 Ethtool* 实用程序配置。Red Hat 7.2 之后的所有 Red Hat 版本都包括 Ethtool。对其他 Linux 发布,请从以下网站下载并安装 Ethtool:http:///projects/gkernel。 

有关以 Ethtool 启用 WOL 的指令,请访问以上列出的网站。

WOL 将在下次关机或重新引导时启用。对这一驱动程序版本,为了启用 WOL ,必须在关机或挂起系统之前加载 igb 驱动程序。

注意
  • 局域网唤醒仅在多端口设备的端口 A 上受支持。
  • 英特尔? 千兆位 VT 四端口服务器适配器不支持局域网唤醒。

NAPI

NAPI(Rx 轮流检测模式)受 e1000e 驱动程序的支持。NAPI 默认启用。若要覆盖默认设置,使用以下编译时间标志。

若要禁用 NAPI,在编译驱动程序模块时指定此额外的编译标志:

# make CFLAGS_EXTRA=-DE1000E_NO_NAPI install

若要启用 NAPI,在编译驱动程序模块时指定此额外的编译标志:

# make CFLAGS_EXTRA=-DE1000E_NAPI install

参见 http://www./~hadi/usenix-paper.tgz 获取有关 NAPI 的更多信息。

为 TX 启用一个独立矢量

# make CFLAGS_EXTRA=-DCONFIG_E1000E_SEPARATE_TX_HANDLER

这允许传输清理拥有一个独立的句柄。如果有许多重负荷的 CPU 内核且想分散处理负荷,此选项可能有用。

采用此选项,使用三个 MSI-X 矢量:一个用于 TX、一个用于 RX,一个用于链接。


已知问题

注意:安装驱动程序之后,如果英特尔网络连接不工作,请确保安装了正确的驱动程序。

在四端口适配器检测到 Tx 单位挂起

在有些情况下,端口 3 和端口 4 不让通信量通过,而报告“检测到 Tx 单挂起”,然后是:“NETDEV WATCHDOG:ethX:transmit timed out(传输超时)” 错误。端口 1 和端口 2 不显示任何错误,允许通信量通过。

更新到最新内核和 BIOS 可能会解决此问题。鼓励用户运行完全支持 MSI 中断的操作系统。从 http://www./ 下载 Linux Firmware Developer Kit,可用以核实系统的 BIOS。

位于 PCIe 网桥后的四端口适配器

位于 PCIe 网桥后的四端口适配器可能与有些系统不兼容。用户应当运行从 http://www./ 下载的 Linux 固件包来测试其 BIOS 是否有中断或“missing interface”(界面丢失)问题,尤其是较旧的内核。

在半双工 10/100 网络上丢弃的接收信息包

如果您有以 10 Mbps 或 100 Mbps,半双工模式运行的英特尔 PCI Express 适配器,您可能会观察到偶尔被丢弃的信息包。在这个网络配置中尚无变通办法。网络必须更新到仅以全双工和/或 1000 Mbps 操作。

编译驱动程序

在试图运行 make install 以编译该驱动程序时,可能发生以下错误:

"Linux kernel source not configured - missing version.h"(Linux 内核源未配置 - 丢失 version.h)

要解决此问题,创建 version.h 文件,方法是进入 Linux 源树并输入:

# make include/linux/version.h

使用巨帧时性能下降

在有些巨帧环境中可能观察到吞吐量性能下降。如果发生此种情况,增加应用程序的套接字缓冲大小并(或)增大 /proc/sys/net/ipv4/tcp_*mem 条目的值可能有帮助。要了解更多信息,请参阅特定应用程序手册及文本文件 (/usr/src/linux*/Documentation/networking/ip-sysctl.txt)。

Foundry BigIron 8000 交换器上的巨帧

在连接到 Foundry BigIron 8000 交换器时使用巨帧有一个已知问题。这与第三方限制有关。如果发现信息包丢失,降低 MTU 大小。

使用巨帧时分配 Rx Allocating Rx Buffer

在 2.6.x 内核上使用巨帧时,如果在可用内存在太多碎片的情况下分配 Rx Buffer,则可能会失败。这种问题可能发生在 PCI-X 适配器上或禁用信息包分裂的情况下。可以通过更改对接收缓冲区分配可用的内存量,或者增大 /proc/sys/vm/min_free_kbytes 来减少或避免这种问题的发生。

同一个以太网广播网络上多个接口卡

由于 Linux 上的默认 ARP 行为,不可能让位于同一个以太网广播域(非分区交换器)的两个 IP 网络上的一个系统像期望的那样表现。所有以太网接口卡对任何指派给该系统的 IP 地址的 IP 通信均有响应。这导致不平衡的接收通信量。

如果服务器上有多个接口卡,输入以下命令启动 ARP 过滤:

echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter

(这种方法只在内核版本高于 2.4.5 时才有作用。)

注意:这一设置并不跨引导保存。但是可以通过以下方法之一将此配置更改永久化:
  • 将下一行添加到 /etc/sysctl.conf

net.ipv4.conf.all.arp_filter = 1

  • 在不同的广播域(或者在不同的交换器中,或者在分区到 VLAN 上的一个交换器中)安装接口。

以 Ethtool 禁用 Rx 流量控制

必须关闭同一命令行中的自动协商,方能要使用 Ethtool 禁用接收流量控制。例如:

ethtool -A eth? autoneg off rx off

在 ethtool -p 正在运行时拔出网络电缆

在内核版本 2.5.50 和更新(包括 2.6 内核)中,在 ethtool -p 正在运行的时候拔出网络电缆会导致系统停止对键盘命令作出反应(control-alt-delete 除外)。重新启动系统似乎是唯一的解决方法。

版本 2.6.19 与 2.6.21(含)之间的内核的 MSI-X 问题

如果对版本 2.6.19 与 2.6.21 之间的内核使用 irqbalance,在任何 MSI-X 硬件可能观察到内核错乱和不稳定等现象。如果遇到此类问题,可禁用 irqbalance daemon 或升级至较新内核。

Rx 页面分配错误

使用内核 2.6.25 或以上版本时,在压力下可能发生页面分配失败顺序:0 错误。这是由 Linux 内核报告此种压力情况的方式所致。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多