Установка драйвера для NIC Realtek RTL8101E в Linux
Invite pending
Может кому пригодится решение проблемы с низкой производительностью сетевой карты Realtek RTL8101E.
Установил Fedora 19 на ноутбук Samsung X120. В ноутбуке установлена сетевая карта
04:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 02).
Драйвер для нее встал вот такой:
Kernel driver in use: [b]r8169[/b]
Имя файла: /lib/modules/3.11.3-201.fc19.x86_64/kernel/drivers/net/ethernet/realtek/r8169.ko
kernel-3.11.3-201.fc19.x86_64: The Linux kernel
Источник: updates
iperf показывает трансфер порядка полутора мегабит:
[ 3] 0.0-11.9 sec 2.38 MBytes 1.68 Mbits/sec
На сайте производителя ( http://www.realtek.com )
есть исходники родного драйвера ( r8101-1.024.00.tar.bz2 ), который не собирается в новых ядрах из-за двух проблем:
1) константа
теперь называется
2) в функцию
добавлен новый (средний) параметр
решение было найдено в патчах для модуля r8169.ko
после установки нового модуля iperf показывает трансфер почти 100 Мбит/сек
0.0-10.0 sec 113 MBytes 94.1 Mbits/sec
ну и сформируем новый initramfs ( в fedor'е )
К сожалению модуль приходится пересобирать после каждого апдейта пакета с ядром.
patch прилагаю:
Установил Fedora 19 на ноутбук Samsung X120. В ноутбуке установлена сетевая карта
04:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller [10ec:8136] (rev 02).
Драйвер для нее встал вот такой:
Kernel driver in use: [b]r8169[/b]
Имя файла: /lib/modules/3.11.3-201.fc19.x86_64/kernel/drivers/net/ethernet/realtek/r8169.ko
kernel-3.11.3-201.fc19.x86_64: The Linux kernel
Источник: updates
iperf показывает трансфер порядка полутора мегабит:
[ 3] 0.0-11.9 sec 2.38 MBytes 1.68 Mbits/sec
На сайте производителя ( http://www.realtek.com )
есть исходники родного драйвера ( r8101-1.024.00.tar.bz2 ), который не собирается в новых ядрах из-за двух проблем:
1) константа
NETIF_F_HW_VLAN_RX
теперь называется
NETIF_F_HW_VLAN_CTAG_RX
2) в функцию
__vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff))
добавлен новый (средний) параметр
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), swab16(opts2 & 0xffff))
решение было найдено в патчах для модуля r8169.ko
после установки нового модуля iperf показывает трансфер почти 100 Мбит/сек
0.0-10.0 sec 113 MBytes 94.1 Mbits/sec
ну и сформируем новый initramfs ( в fedor'е )
# dracut -f
К сожалению модуль приходится пересобирать после каждого апдейта пакета с ядром.
patch прилагаю:
--- r8101-1.024.00.not-patched/src/r8101_n.c 2013-06-14 10:45:47.000000000 +0400
+++ r8101-1.024.00/src/r8101_n.c 2013-09-25 15:52:22.000000000 +0400
@@ -1906,7 +1906,7 @@
}
#else
if (opts2 & RxVlanTag)
- __vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff));
+ __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), swab16(opts2 & 0xffff));
#endif
desc->opts2 = 0;
@@ -1967,7 +1967,7 @@
else
tp->cp_cmd &= ~RxChkSum;
- if (dev->features & NETIF_F_HW_VLAN_RX)
+ if (dev->features & NETIF_F_HW_VLAN_CTAG_RX)
tp->cp_cmd |= RxVlan;
else
tp->cp_cmd &= ~RxVlan;
@@ -7292,7 +7292,7 @@
#endif
#ifdef CONFIG_R8101_VLAN
- dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
+ dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
dev->vlan_rx_kill_vid = rtl8101_vlan_rx_kill_vid;
#endif//LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
@@ -7305,7 +7305,7 @@
#else
dev->features |= NETIF_F_RXCSUM | NETIF_F_SG;
dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
- NETIF_F_RXCSUM | NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
+ NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
NETIF_F_HIGHDMA;
#endif