I recently noticed I am only getting 100Mbit/s of througput on my gigabit home network.
When looking into it with
ethtool I found my ArchLinux Box was using
100baseT/Half as link speed instead of
1000baseT/Full which its NIC and the switch connected to it support.I am not sure why but the NIC seems to not be advertising its link-modes according to
Settings for enp0s31f6: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: No Supports auto-negotiation: Yes Advertised link modes: Not reported Advertised pause frame use: No Advertised auto-negotiation: No Speed: 100Mb/s Duplex: Half Port: Twisted Pair PHYAD: 1 Transceiver: internal Auto-negotiation: off MDI-X: on (auto) Supports Wake-on: pumbg Wake-on: g Current message level: 0x00000007 (7) drv probe link Link detected: yes
When enabling auto-negotioation explicitly by running
ethtool --change enp0s31f6 autoneg on it seems to advertise all its modes to the switch and uses
That only works most of the time and for a while though. When I unplug the cable and pluggin it back in switches autoneg off most of the time, but not always. Also, sometimes setting autoneg to on immediately disables it again. Rebooting also disables it again.
Note that auto-negotiation does not get disabled when unplugging but when replugging.
dsmeg logs this when autoneg was enabled and I plug in a cable:
[153692.029252] e1000e: enp0s31f6 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx [153699.577779] e1000e: enp0s31f6 NIC Link is Up 100 Mbps Half Duplex, Flow Control: None [153699.577782] e1000e 0000:00:1f.6 enp0s31f6: 10/100 speed: disabling TSO
I am using the intel NIC of my asrock motherboard (from ~2015) and an unmanaged switch (Netgear GS208).