Gigabit ethernet working at 100Mbps

I have two computers, both openSUSE 13.1 (Bottle) (x86_64) with motherboard gigabi ethernet cards.

They are connected trough a linksys se2800 gigabit switch, and the lights at the switch show that it is connected to 1000Mbps capable ports, but connection runs at 100Mbps.

On one computer, with Asus M4A77TD motherboard “Realtek® 8112L, 1 x Gigabit LAN Controller(s), featuring AI NET2”

andromeda:/home/fernando # ethtool eth0
Settings for eth0:
        Supported ports:  TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Half 1000baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Half 1000baseT/Full 
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Link partner advertised link modes:  10baseT/Half 10baseT/Full 
                                             100baseT/Half 100baseT/Full 
        Link partner advertised pause frame use: Symmetric Receive-only
        Link partner advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: pumbg
        Wake-on: g                                                                                                                                                                 
        Current message level: 0x00000033 (51)                                                                                                                                     
                               drv probe ifdown ifup                                                                                                                               
        Link detected: yes


on the other computer with Asrock FM2A55M-VG3+ motherboard with Realtek RTL8111FR

aldebaran:/home/fernando # ethtool eth1
Settings for eth1:                                                                                                                                                                 
        Supported ports:  TP MII ]                                                                                                                                                
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Half 1000baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Half 1000baseT/Full 
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Link partner advertised link modes:  10baseT/Half 10baseT/Full 
                                             100baseT/Half 100baseT/Full 
        Link partner advertised pause frame use: Symmetric Receive-only
        Link partner advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000033 (51)
                               drv probe ifdown ifup
        Link detected: yes


Yast says its using module r8169 on both of them.
How can I kwno why are they working at 100Mbps and change it in order to reach 1000Mbps?

regards

The ethtool output reports the attached device (the switch) only advertises the following

Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                             100baseT/Half 100baseT/Full

so that is the reason that 100Mbps FD is chosen.

One thing you can do is configure your machine to “gulp” larger amounts of data at a time. By default, Linux in general is tuned to support machines of all sizes, and defaults must support small machines with limited resources which of course is very unlike your network.

Take a look at what I wrote years ago for an older version of openSUSE but still applies and perhaps is more relevant as the years go by as old, 10/100 wired (802.3) becomes more rare all the time. You’ll note that you can change the TCP/IP Congestion Control algorithm to do things like intelligently manage TCP/IP window sizes, expiration, drops, and more across unusually and extremely fast reliable connections, unreliable connections, connections over distance, unusually large number of simultaneous connections, more.

https://sites.google.com/site/4techsecrets/optimize-and-fix-your-network-connection

HTH,
TSU

Why may the OS or the driver detect a 100Mbps capable device if the device (the switch) is 1000Mpbs capable and it detects the network card as 1000Mbps capable?

It does seem to be an issue with no certain answer
Googled “Link partner advertised link mode” and got plenty of hits.

Skimming those results…

  • One or two suggested inadequate hardware, either the switch or the cable. All hardware must support GigE.
  • None I saw tried simply turning off auto-negotiation and trying to force 1000 bits.

I still highly recommend changing to an appropriate TCP/IP congestion control algorithm and enlarging your network TCP/IP buffers if you have adequate RAM to do so without affecting running applications.

TSU

I thought about it, but it seems higly unlikely the same error on both cables

I still highly recommend changing to an appropriate TCP/IP congestion control algorithm and enlarging your network TCP/IP buffers if you have adequate RAM to do so without affecting running applications.

TSU

Trying…

before

andromeda:/home/fernando # sysctl -a | egrep "rmem|wmem|tcp_congestion|reordering|metrics"| egrep -v "default|udp|lowmem"
net.core.rmem_max = 212992
net.core.wmem_max = 212992
net.ipv4.tcp_congestion_control = cubic
net.ipv4.tcp_no_metrics_save = 0
net.ipv4.tcp_reordering = 3
net.ipv4.tcp_rmem = 4096        87380   6291456
net.ipv4.tcp_wmem = 4096        16384   4194304
andromeda:/home/fernando # cat /proc/sys/net/ipv4/tcp_congestion_control 
cubic
andromeda:/home/fernando #  ls /lib/modules/`uname -r`/kernel/net/ipv4/
ah4.ko   inet_diag.ko  ipip.ko       netfilter    tcp_highspeed.ko  tcp_illinois.ko  tcp_scalable.ko  tcp_westwood.ko  udp_diag.ko              xfrm4_mode_tunnel.ko
esp4.ko  ipcomp.ko     ip_tunnel.ko  tcp_bic.ko   tcp_htcp.ko       tcp_lp.ko        tcp_vegas.ko     tcp_yeah.ko      xfrm4_mode_beet.ko       xfrm4_tunnel.ko
gre.ko   ip_gre.ko     ip_vti.ko     tcp_diag.ko  tcp_hybla.ko      tcp_probe.ko     tcp_veno.ko      tunnel4.ko       xfrm4_mode_transport.ko
andromeda:/home/fernando #

Then

andromeda:/home/fernando # sysctl -w net.ipv4.tcp_congestion_control=highspeed
net.ipv4.tcp_congestion_control = highspeed
andromeda:/home/fernando # cat /proc/sys/net/ipv4/tcp_congestion_control
highspeed
andromeda:/home/fernando #sysctl -w net.ipv4.tcp_wmem="8192 87380 16777216"
net.ipv4.tcp_wmem = 8192 87380 16777216
andromeda:/home/fernando # sysctl -w net.ipv4.tcp_rmem="8192 87380 16777216"
net.ipv4.tcp_rmem = 8192 87380 16777216
andromeda:/home/fernando # ethtool eth0
Settings for eth0:
        Supported ports:  TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Half 1000baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Half 1000baseT/Full 
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Link partner advertised link modes:  10baseT/Half 10baseT/Full 
                                             100baseT/Half 100baseT/Full 
        Link partner advertised pause frame use: Symmetric Receive-only
        Link partner advertised auto-negotiation: Yes
        Speed: 100Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000033 (51)
                               drv probe ifdown ifup
        Link detected: yes
andromeda:/home/fernando # 


It does not seem to change anything.

I don’t know why the switch does not advertise 1000Mbps FD, but I don’t see that as a Linux issue or a hardware issue with your laptop NICs either. With regards to the cabling, how long are your device cables, and are they screened? As a quick test, you could connect both laptops to each end of a given cable and see how the negotiation is then reported.

Because switch says it is not capable of 1000Mbs.

it seems higly unlikely the same error on both cables

Which simply means that both your cables are not 1GbE capable. 100mbs cables use 4 wires (2 pairs); 1GbE cables use all 8 wires (all 4 pairs). They are different cables.