Category Archives: intel

Updating Intel’s i40e driver in Ubuntu 18.10

No, Canonical does not provide the latest stable Intel i40e driver in the latest version of Ubuntu Server. In fact it’s 12 months old.

No, Intel does not keep the most current version of the i40e driver on Intel.com. It’s on SourceForge.

/HeadDesk

Let’s look at all of the REALLY IMPORTANT changes made to the i40e driver since version 2.3.2 that’s installed by default in Ubuntu 18.10:

Changelog for i40e 2.7.11
===========================================================================
Implement ADq feature
Add support for configuring VFs through sysfs
Add XDP support
Add support Forward Error Correction (FEC) on 25G links
Allow disabling FW LLDP (requires updated firmware)
Fix bug where link could be forced down after MTU change
Add support for new kernel APIs
Fix WARN_ON() if MSI-X not available
Fix issue with lost link when forcing link mode on some adapters
Add support to allow the FW update tool to upgrade/downgrade from any FW version to any other FW version
   Note: this may require a power cycle as an intermediate step.
Fix kernel panic with repeated quick enable/disable of VFs
Fix possible TX timeout with DCB on some kernels
Re-enable TSO after MTU change
Fix potential panic on shutdown with many MSI-X vectors
Add VEB stats to ethtool
Fix panic on suspend with RDMA client driver active
Fix timing issue with assigning VFs to VMs using virsh
Restore TCPv4 input set when re-enabling ATR
Performance fixes with Adaptive ITR
Code cleanups
Minor bug fixes
Add support for RHEL 7.5
Add support for SLES12SP3

Source: README.txt, updated 2018-10-26
Changelog for i40e 2.4.10
===========================================================================
Add support for RHEL 7.5
Fix synchronization issue with simultaneous resets on multiple ports

Source: README.txt, updated 2018-06-08
Changelog for i40e 2.4.6
===========================================================================
- fix unnecessary PF resets issue
- update Flow Director User documentation
- fix compilation error on kernel 4.15.1

Source: README.txt, updated 2018-04-03
Changelog for i40e 2.4.3
===========================================================================
- fix issue on X722 with netdev close removing RDMA instance
- performance updates
- fix some issues with link reporting
- fix issue with tx timeouts on systems with > 128 cores
- fix issue with promiscuous mode disappearing across resets
- fix issue with flow director filters not working on fragmented IPv4
- fix issue with duplicate flow director filters not being updated to HW

Source: README.txt, updated 2017-12-07
Changelog for i40e-linux-2.3.6
===========================================================================

- Fix mac filter removal timing issue
- Sync i40e_ethtool.c with upstream
- Fixes for TX hangs
- Some fixes for reset of VFs
- Fix build error with packet split disabled
- Fix memory leak related to filter programming status
- Add and modify branding strings
- Fix kdump failure
- Implement an ethtool private flag to stop LLDP in FW
- Add delay after EMP reset for firmware to recover
- Fix incorrect default ITR values on driver load
- Fixes for programming cloud filters
- Some performance improvements
- Enable XPS with QoS on newer kernels
- Enable support for VF VLAN tag stripping control
- Build fixes to force perl to load specific ./SpecSetup.pm file
- Fix the updating of pci.ids
- Use 16 byte descriptors by default
- Fixes for DCB
- Don't close client in debug mode
- Add change MTU log in VF driver
- Fix for adding multiple ethtool filters on the same location
- Add new branding strings for OCP XXV710 devices
- Remove X722 Support for Destination IP Cloud Filter
- Allow turning off offloads when the VF has VLAN set

Source: README.txt, updated 2017-10-31

/HeadDesk

I have already updated the X710-DA4 firmware (to 6.01) prior to updating the driver, but I have not read anywhere that updating the firmware first is necessary.

I started by looking at my installed drivers, but this is not needed, and does not show the versions of the driver:

ls -R /lib/modules/`uname -r`/kernel/ > drivers.log

Show current i40e driver:

ethtool -i enp1s0f0

Output:

driver: i40e
version: 2.3.2-k
firmware-version: 6.01 0x800035ce 1.1747.0
expansion-rom-version:
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes

Install dependencies:

sudo apt install make gcc

Download the latest driver:

wget https://cfhcable.dl.sourceforge.net/project/e1000/i40e%20stable/2.7.11/i40e-2.7.11.tar.gz

Unzip:

tar -xf i40e-2.7.11.tar.gz

Instructions are in the README — read them:

vim i40e-2.7.11/README

Install. This was performed while my X710-DA4 was not being used nor had assigned IPs:

sudo su
cd i40e-2.7.11/src/
make install
rmmod i40e; modprobe i40e
update-initramfs -u
exit

Confirm updated driver:

ethtool -i enp1s0f0

Output:

driver: i40e
version: 2.7.11
firmware-version: 6.01 0x800035ce 1.1747.0
expansion-rom-version:
bus-info: 0000:01:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes

Don’t forget to read the included README for performance tuning options, and the over 2 year old Intel Ethernet Controller X710/XL710 and Intel Ethernet Converged Network Adapter X710/XL710 Family Linux Performance Tuning Guide from March 2016:

https://www.intel.com/content/dam/www/public/us/en/documents/reference-guides/xl710-x710-performance-tuning-linux-guide.pdf

Oh and:

sudo vim /etc/default/grub

Like this:

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=2
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on iommu=pt pcie_aspm=off"
GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt pcie_aspm=off"
sudo update-grub
sudo shutdown -r now