You are not logged in.

#1 2020-12-27 16:55:46

Jubijub
Member
From: Lausanne, Switzerland
Registered: 2018-04-04
Posts: 21
Website

[SOLVED] Change NIC advertised speed using ethtool / systemd services

Hello everyone,

I use an Intel X550-T2 NIC card, which supports 100/1000/2500/5000/10000 modes. For some reasons, 2500 mode is not advertised by default, which means that the card connects to 1000 mode by default.
I use NetworkManager for network config.

If I do :

ethtool -s enp11s0f0 speed 2500 duplex full autoneg on

it does switch the card to 2500 mode, but it's will go away after a reboot.
i haven't found any way to make this permanent in NetworkManager conf

I tried to use systemd-networkd with the following config in /etx/systemd/network/99-default.link

[Match]
MACAddress=<my mac address>

[Link]
Duplex=Full
AutoNegotiation=yes
Advertise=2500basex-full
Name=enp11s0f0 //I had to put this otherwise the eth gets renamed as eth0

I got the syntax here : https://jlk.fjfi.cvut.cz/arch/manpages/ … emd.link.5

After enabling systemd-networkd.service, and rebooting, nothing works.

Any idea how I can make the setting persistant ?

Last edited by Jubijub (2020-12-29 16:55:36)

Offline

#2 2020-12-28 13:22:35

Lone_Wolf
Member
From: Netherlands, Europe
Registered: 2005-10-04
Posts: 8,912

Re: [SOLVED] Change NIC advertised speed using ethtool / systemd services

This looks like a low level issue that originates long before high level tools like systemd-networkd and NetworkManager play  a role.

Please post output of ip addr show and (as root) output of ethtool your-interface .

Also lspci -k so we can see which kernel module your NIC uses.

For clarity : You are running latest firmware for your motherboard, have configured microcode loading and also use linux-firmware ?


Disliking systemd intensely, but not satisfied with alternatives so focusing on taming systemd.

(A works at time B)  && (time C > time B ) ≠  (A works at time C)

Offline

#3 2020-12-28 15:23:48

Jubijub
Member
From: Lausanne, Switzerland
Registered: 2018-04-04
Posts: 21
Website

Re: [SOLVED] Change NIC advertised speed using ethtool / systemd services

Lone_Wolf wrote:

This looks like a low level issue that originates long before high level tools like systemd-networkd and NetworkManager play  a role.

Please post output of ip addr show and (as root) output of ethtool your-interface .

Also lspci -k so we can see which kernel module your NIC uses.

For clarity : You are running latest firmware for your motherboard, have configured microcode loading and also use linux-firmware ?

This is an expected behaviour of X550 intel NIC (cf file:///D:/Downloads/X550_SpecUpdate_Rev2.9.pdf, page 9 point 2. NBASE-T Speed Advertisement : it has to be enabled by the driver, the card by default only advertises 100/1000/10000 )

Basically I know how to enable it ad hoc, using ethtool -s enp11s0f0 speed 2500 duplex full autoneg on . This works, but only for the current session, if I reboot the setting is lost.
What I would like is to enable it permanently.

To your questions

ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 18:c0:4d:0b:b9:6b brd ff:ff:ff:ff:ff:ff
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether da:da:6a:d7:d4:ff brd ff:ff:ff:ff:ff:ff permaddr a4:b1:c1:d6:75:f9
4: enp11s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether a0:36:9f:28:75:80 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.120/24 brd 192.168.1.255 scope global dynamic noprefixroute enp11s0f0
       valid_lft 86303sec preferred_lft 86303sec
    inet6 2a02:1205:34cd:91a0:3ab5:2f73:6892:616f/64 scope global dynamic noprefixroute 
       valid_lft 292sec preferred_lft 52sec
    inet6 fe80::8ec7:2bf5:f1bc:14f6/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
5: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether a0:36:9f:28:75:82 brd ff:ff:ff:ff:ff:ff

ehtool enp11s0f0 : note how 2500baseT/Full is Supported, but not Advertised

Settings for enp11s0f0:
	Supported ports: [ TP ]
	Supported link modes:   100baseT/Full
	                       1000baseT/Full
	                       10000baseT/Full
	                       2500baseT/Full
	                       5000baseT/Full
	Supported pause frame use: Symmetric
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  100baseT/Full
	                       1000baseT/Full
	                       10000baseT/Full
	Advertised pause frame use: Symmetric
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Auto-negotiation: on
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: internal
	MDI-X: Unknown
netlink error: Operation not permitted
        Current message level: 0x00000007 (7)
                               drv probe link
	Link detected: yes

Same after I have launched

sudo ethtool -s enp11s0f0 speed 2500 duplex full autoneg on

. Note that after this the card operates as 2500Mbps as shown by NetworkManager for instance

Settings for enp11s0f0:
	Supported ports: [ TP ]
	Supported link modes:   100baseT/Full
	                       1000baseT/Full
	                       10000baseT/Full
	                       2500baseT/Full
	                       5000baseT/Full
	Supported pause frame use: Symmetric
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  2500baseT/Full
	Advertised pause frame use: Symmetric
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Speed: Unknown!
	Duplex: Unknown! (255)
	Auto-negotiation: on
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: internal
	MDI-X: Unknown
netlink error: Operation not permitted
        Current message level: 0x00000007 (7)
                               drv probe link
	Link detected: no

lshw -C network

*-network                 
       description: Wireless interface
       product: Wi-Fi 6 AX200
       vendor: Intel Corporation
       physical id: 0
       bus info: pci@0000:05:00.0
       logical name: wlan0
       version: 1a
       serial: da:da:6a:d7:d4:ff
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress msix bus_master cap_list ethernet physical wireless
       configuration: broadcast=yes driver=iwlwifi driverversion=5.9.14-arch1-1 firmware=55.d9698065.0 cc-a0-55.ucode latency=0 link=no multicast=yes wireless=IEEE 802.11
       resources: irq:146 memory:fc700000-fc703fff
  *-network
       description: Ethernet interface
       product: I211 Gigabit Network Connection
       vendor: Intel Corporation
       physical id: 0
       bus info: pci@0000:06:00.0
       logical name: eth0
       version: 03
       serial: 18:c0:4d:0b:b9:6b
       capacity: 1Gbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm msi msix pciexpress bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=igb driverversion=5.9.14-arch1-1 firmware=0. 6-1 latency=0 link=no multicast=yes port=twisted pair
       resources: irq:24 memory:fc600000-fc61ffff ioport:f000(size=32) memory:fc620000-fc623fff
  *-network:0
       description: Ethernet interface
       product: Ethernet Controller 10G X550T
       vendor: Intel Corporation
       physical id: 0
       bus info: pci@0000:0b:00.0
       logical name: enp11s0f0
       version: 01
       serial: a0:36:9f:28:75:80
       capacity: 10Gbit/s
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi msix pciexpress bus_master cap_list rom ethernet physical tp 100bt-fd 1000bt-fd 10000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=ixgbe driverversion=5.9.14-arch1-1 duplex=full firmware=0x8000134e, 1.2829.0 ip=192.168.1.120 latency=0 link=yes multicast=yes port=twisted pair
       resources: iomemory:ff0-fef iomemory:ff0-fef irq:144 memory:fff2800000-fff2bfffff memory:fff2c04000-fff2c07fff memory:c0000000-c007ffff memory:c0100000-c01fffff memory:c0200000-c02fffff
  *-network:1
       description: Ethernet interface
       product: Ethernet Controller 10G X550T
       vendor: Intel Corporation
       physical id: 0.1
       bus info: pci@0000:0b:00.1
       logical name: eth2
       version: 01
       serial: a0:36:9f:28:75:82
       capacity: 10Gbit/s
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi msix pciexpress bus_master cap_list rom ethernet physical tp 100bt-fd 1000bt-fd 10000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=ixgbe driverversion=5.9.14-arch1-1 firmware=0x8000134e, 1.2829.0 latency=0 link=no multicast=yes port=twisted pair
       resources: iomemory:ff0-fef iomemory:ff0-fef irq:196 memory:fff2400000-fff27fffff memory:fff2c00000-fff2c03fff memory:c0080000-c00fffff memory:c0300000-c03fffff memory:c0400000-c04fffff

lspci -k

0b:00.0 Ethernet controller: Intel Corporation Ethernet Controller 10G X550T (rev 01)
	Subsystem: Intel Corporation Ethernet Converged Network Adapter X550-T2
	Kernel driver in use: ixgbe
	Kernel modules: ixgbe
0b:00.1 Ethernet controller: Intel Corporation Ethernet Controller 10G X550T (rev 01)
	Subsystem: Intel Corporation Ethernet Converged Network Adapter X550-T2
	Kernel driver in use: ixgbe
	Kernel modules: ixgbe
  • Latest motherboard firmware : aye, running F31q from December (https://www.gigabyte.com/Motherboard/X570-AORUS-MASTER-rev-11-12/support#support-dl-driver )

  • Microcode : yep, running amd-ucode 20201218.646f159-1, loaded via initrd    /amd-ucode.img in my arch.conf using systemd-bootctl (this is a fresh install from yesterday)

  • Linux-firmware : yep, running linux-firmware 20201218.646f159-1


Update from my investigations : systemd-networkd does seem to load my config, because all other interfaces got renamed eth*, except the one for which I specified the name. It just seems it either ignores the Speed directive, or I entered the value incorrectly, or something overrides it afterwards. I have no idea how to investigate that.

Last edited by Jubijub (2020-12-28 15:40:02)

Offline

#4 2020-12-28 16:19:00

Lone_Wolf
Member
From: Netherlands, Europe
Registered: 2005-10-04
Posts: 8,912

Re: [SOLVED] Change NIC advertised speed using ethtool / systemd services

This is an expected behaviour of X550 intel NIC (cf file:///D:/Downloads/X550_SpecUpdate_Rev2.9.pdf, page 9 point 2. NBASE-T Speed Advertisement : it has to be enabled by the driver, the card by default only advertises 100/1000/10000 )

Online i've found the 2.0 revision, but that doesn't seem to mention the issue at all. I'll accept your word for it.

I had hoped the kernel module would allow advertising that speed, but modinfo ixgbe doesn't show an option for that.


network interface naming : systemd-udev uses what they call "Predictable Network Interface Names" by default but you can set them yourself or let the kernel name them.
https://wiki.archlinux.org/index.php/Ne … and_tricks, section 4.1 and 4.2 have more info .

Even if systemd-networkd is able to enable the desired speed if you switch to any other network management tool it will not be set.
That indicates running a specific ethtool command early in boot process is the best solution available.

On archlinux the usual way to achieve that is to write a custom systemd service that executes the command.
(Please change the title to reflect this has to do with writing a systemd service now,)

I am not good with systemd services, but can help to get you started[1] .
Since the service needs to be run before network tools run, it should probably use network-pre.target .
listing network-pre.target as Before and Wants seems to be the way to go.
[2] has more details.


[1] https://wiki.archlinux.org/index.php/Sy … unit_files
[2] https://www.freedesktop.org/wiki/Softwa … orkTarget/

Last edited by Lone_Wolf (2020-12-28 16:20:12)


Disliking systemd intensely, but not satisfied with alternatives so focusing on taming systemd.

(A works at time B)  && (time C > time B ) ≠  (A works at time C)

Offline

#5 2020-12-29 17:00:16

Jubijub
Member
From: Lausanne, Switzerland
Registered: 2018-04-04
Posts: 21
Website

Re: [SOLVED] Change NIC advertised speed using ethtool / systemd services

Victory ! Thanks Lone_Wolf, the service way works like a charm smile

I create a service called ethtool@.service in /etc/systemd/system

[Unit]
Description=ethtool configuration to enable 2500mbps speed for the specified card
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/bin/ethtool -s %i  speed 2500 duplex full autoneg on
Type=oneshot

[Install]
WantedBy=multi-user.target

I enabled it with sudo systemctl enable ethtool@enp11s0f0.service

Result :

Settings for enp11s0f0:
	Supported ports: [ TP ]
	Supported link modes:   100baseT/Full
	                       1000baseT/Full
	                       10000baseT/Full
	                       2500baseT/Full
	                       5000baseT/Full
	Supported pause frame use: Symmetric
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  2500baseT/Full
● ethtool@enp11s0f0.service - ethtool configuration to enable 2500mbps speed for the specified card
     Loaded: loaded (/etc/systemd/system/ethtool@.service; enabled; vendor preset: disabled)
     Active: inactive (dead) since Tue 2020-12-29 17:52:48 CET; 4min 19s ago
    Process: 1175 ExecStart=/usr/bin/ethtool -s enp11s0f0 speed 2500 duplex full autoneg on (code=exited, status=0/SUCCESS)
   Main PID: 1175 (code=exited, status=0/SUCCESS)

déc 29 17:52:48 fastlearner systemd[1]: Starting ethtool configuration to enable 2500mbps speed for the specified card...
déc 29 17:52:48 fastlearner systemd[1]: ethtool@enp11s0f0.service: Succeeded.
déc 29 17:52:48 fastlearner systemd[1]: Finished ethtool configuration to enable 2500mbps speed for the specified card.

Offline

Board footer

Powered by FluxBB