Compiler les Drivers Intel 82579V
Ayant récemment changé mon NAS et transférant des données dessus, j’ai eu la désagréable surprise de voir les vitesses de transfert en cifs (samba) plafonner à 45 Mo/s (soit <400 Mbps) depuis mon linux. Un petit tour sur le Windows (vive le dual boot) qui tournait lui sans problème à 100 Mo/s ( ~ 800 Mbps) sur le même type de fichiers m'a confirmé que le problème venait du linux. J'ai donc décidé de mettre à jour les drivers du contrôleur Ethernet (Intel 82579V) intégré à la carte mère.
Compilation des Drivers
Après avoir récupéré les derniers drivers du contrôleur sur le site d’intel, il suffit de les décompresser et de suivre les instruction du README.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | philippe@home:~/Desktop/e1000e-drivers$ tar xvzf ./e1000e-3.1.0.2.tar.gz philippe@home:~/Desktop/e1000e-drivers$ cd ./e1000e-3.1.0.2/src/ philippe@home:~/Desktop/e1000e-drivers/e1000e-3.1.0.2/src$ make make -C /lib/modules/3.13.0-32-generic/build SUBDIRS=/home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src modules make[1]: Entering directory `/usr/src/linux-headers-3.13.0-32-generic' CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/netdev.o CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/ethtool.o CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/param.o CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/82571.o CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/ich8lan.o CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/80003es2lan.o CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/mac.o CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/nvm.o CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/phy.o CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/manage.o CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/kcompat.o CC [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/ptp.o LD [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/e1000e.o Building modules, stage 2. MODPOST 1 modules CC /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/e1000e.mod.o LD [M] /home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src/e1000e.ko make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-32-generic' philippe@home:~/Desktop/e1000e-drivers/e1000e-3.1.0.2/src$ sudo make install [sudo] password for philippe: make -C /lib/modules/3.13.0-32-generic/build SUBDIRS=/home/philippe/Desktop/e1000e-drivers/e1000e-3.1.0.2/src modules make[1]: Entering directory `/usr/src/linux-headers-3.13.0-32-generic' Building modules, stage 2. MODPOST 1 modules make[1]: Leaving directory `/usr/src/linux-headers-3.13.0-32-generic' # remove all old versions of the driver find /lib/modules/3.13.0-32-generic -name e1000e.ko -exec rm -f {} \; || true find /lib/modules/3.13.0-32-generic -name e1000e.ko.gz -exec rm -f {} \; || true install -D -m 644 e1000e.ko /lib/modules/3.13.0-32-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko /sbin/depmod -a 3.13.0-32-generic || true install -D -m 644 e1000e.7.gz /usr/share/man/man7/e1000e.7.gz man -c -P'cat > /dev/null' e1000e || true e1000e. |
Tester les Drivers
Les anciens drivers /lib/modules/3.13.0-32-generic/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko
viennent d’être remplacés. Il faut maintenant sortir les anciens du noyau et charger les nouveaux.
1 2 | philippe@home:~/Desktop/e1000e-drivers/e1000e-3.1.0.2/src$ sudo rmmod e1000e philippe@home:~/Desktop/e1000e-drivers/e1000e-3.1.0.2/src$ sudo modprobe e1000e |
Normalement, ubuntu redémarre la carte réseau immédiatement, si ce n’est pas le cas, il suffit de passer les deux commandes suivantes :
1 2 | philippe@home:~$ sudo ifconfig eth0 up philippe@home:~$ sudo dhclient eth0 |
Si tout fonctionne bien, un listing du hardware donne :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | philippe@home:~$ sudo lshw -c network *-network description: Ethernet interface product: 82579V Gigabit Network Connection vendor: Intel Corporation physical id: 19 bus info: pci@0000:00:19.0 logical name: eth0 version: 06 serial: 30:85:a9:96:85:fe size: 1Gbit/s capacity: 1Gbit/s width: 32 bits clock: 33MHz capabilities: pm msi bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation configuration: autonegotiation=on broadcast=yes driver=e1000e driverversion=3.1.0.2-NAPI duplex=full firmware=0.13-4 ip=192.168.0.200 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s resources: irq:83 memory:fbf00000-fbf1ffff memory:fbf28000-fbf28fff ioport:f040(size=32) |
Le driverversion=3.1.0.2-NAPI indique que les drivers que nous venons de compiler sont bien utilisés par le noyau linux.
Rendre « permanents » les changements
Si les nouveaux drivers fonctionnent bien, il ne reste plus qu’à régénérer une image initramfs afin qu’ils soient bien utilisés à chaque démarrage du système.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | philippe@home:~$ update-initramfs -h Usage: /usr/sbin/update-initramfs [OPTION]... Options: -k [version] Specify kernel version or 'all' -c Create a new initramfs -u Update an existing initramfs -d Remove an existing initramfs -t Take over a custom initramfs with this one -b Set alternate boot directory -v Be verbose -h This message philippe@home:~$ sudo update-initramfs -k 3.13.0-32-generic -u update-initramfs: Generating /boot/initrd.img-3.13.0-32-generic |
Par contre, ce n’est en réalité que semi-permanent, il faudra tout refaire à chaque nouvelle mise à jour du noyau linux.
Résultats
Si la mise à jour s’est passée sans problème, cela n’a pas amélioré pour autant les débits cifs. Il ne me reste donc plus qu’à bidouiller les configurations du client cifs du linux. En attendant, je me suis dit que cela pourrait toujours intéresser quelqu’un.
sudo mount.cifs //192.168.0.5/Movies /mnt/Movies -o user=philippe,uid=philippe,gid=philippe,file_mode=0640,dir_mode=0750
.Qu'est-ce qui a changé ? La MAJ du Synology 1813+ (DSM 5.1) peut-être. Sinon je n'ai pas touché au sysctl.conf. En même temps, j'utilise un switch Netgear GS108Tv2, il est plus cher, mais il a 2 Gbps de débit par port en full duplex. Contrairement au routeur wifi Netgear WNDR3700 qui ne dépasse pas vraiment les 500Mbps ! Ça peut expliquer.