Driver issue on SiS191 and high interrupts

I have a build with some low-end hardware (Celeron D 340, 2GB RAM, SiS191 Gigabit ethernet adapter on the motherboard and 2x Realtek 8139 PCI-cards). ISP connection is 100/100M fiber (straight DHCP from fiber converter). WAN(red) is connected to the SiS191, green and blue are the Realtek cards.

Out-of-the-box the performance was …underwhelming at the least. I could get maybe 30Mbps before CPU maxing out on software interrupts. Things got better when I changed the WAN card MTU from 1500 to 1492. Now I’m getting about 70Mbps when the CPU is maxed out. My older build was even slower 32-bit machine and it could route the full 100M no problem, so I think this too should be able to do it.

I noticed that ethtool output doesn’t even say that the 1000Mbit speed is supported?

Settings for red0:
	Supported ports: [ TP	 MII ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	Supported pause frame use: No
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	Advertised pause frame use: No
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  10baseT/Half 10baseT/Full
	                                     100baseT/Half 100baseT/Full
	Link partner advertised pause frame use: Symmetric
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: 100Mb/s
	Duplex: Full
	Auto-negotiation: on
	Port: MII
	PHYAD: 1
	Transceiver: internal
        Current message level: 0x00000037 (55)
                               drv probe link ifdown ifup
	Link detected: yes

And yes, I have SiS191, not 190, output from “cat bootlog | grep SiS”

[    5.312344] sis190 0000:00:04.0 eth0: 0000:00:04.0: SiS 191 PCI Gigabit Ethernet adapter at 00000000bc3db2a5 (IRQ: 19)

Modinfo shows that version for the SiS driver is 1.4, which should be the latest.

ilename:       /lib/modules/6.1.45-ipfire/kernel/drivers/net/ethernet/sis/sis190.ko.xz
license:        GPL
version:        1.4
author:         K.M. Liu <kmliu@sis.com>, Ueimor <romieu@fr.zoreil.com>
description:    SiS sis190/191 Gigabit Ethernet driver
srcversion:     532DDE5630B09E58CEF4E60
alias:          pci:v00001039d00000191sv*sd*bc*sc*i*
alias:          pci:v00001039d00000190sv*sd*bc*sc*i*
depends:        mii
retpoline:      Y
intree:         Y
name:           sis190
vermagic:       6.1.45-ipfire SMP preempt mod_unload modversions 
sig_id:         PKCS#7
signer:         Build time autogenerated kernel key
sig_key:        31:79:76:E9:23:3E:10:54:73:7D:A6:B0:EA:22:B8:7E:38:FE:19:50
sig_hashalgo:   sha512
signature:      30:66:02:31:00:82:E2:CA:03:45:C5:A4:F2:EC:15:CE:97:A3:41:C5:
		83:01:72:B0:D6:3A:05:BB:A1:76:2C:C9:B8:57:81:21:78:06:FB:0A:
		72:56:15:BA:65:77:B1:63:9C:2D:19:3B:02:02:31:00:A0:7F:D9:03:
		BE:A9:00:F5:18:03:80:D9:ED:DA:4A:CA:98:65:60:19:C8:FC:40:02:
		B7:4E:5F:34:07:F0:01:94:88:BD:D5:26:D8:B0:63:5E:A6:D5:3E:B3:
		4D:95:15:51
parm:           rx_copybreak:Copy breakpoint for copy-only-tiny-frames (int)
parm:           debug:Debug verbosity level (0=none, ..., 16=all) (int)

ethtool -k red0 shows that the offload options are in a disabled state

Features for red0:
rx-checksumming: off [fixed]
tx-checksumming: off
	tx-checksum-ipv4: off [fixed]
	tx-checksum-ip-generic: off [fixed]
	tx-checksum-ipv6: off [fixed]
	tx-checksum-fcoe-crc: off [fixed]
	tx-checksum-sctp: off [fixed]
scatter-gather: off
	tx-scatter-gather: off [fixed]
	tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: off
	tx-tcp-segmentation: off [fixed]
	tx-tcp-ecn-segmentation: off [fixed]
	tx-tcp-mangleid-segmentation: off [fixed]
	tx-tcp6-segmentation: off [fixed]
generic-segmentation-offload: off [requested on]
generic-receive-offload: on
large-receive-offload: off [fixed]
rx-vlan-offload: off [fixed]
tx-vlan-offload: off [fixed]
ntuple-filters: off [fixed]
receive-hashing: off [fixed]
highdma: off [fixed]
rx-vlan-filter: off [fixed]
vlan-challenged: off [fixed]
tx-lockless: off [fixed]
netns-local: off [fixed]
tx-gso-robust: off [fixed]
tx-fcoe-segmentation: off [fixed]
tx-gre-segmentation: off [fixed]
tx-gre-csum-segmentation: off [fixed]
tx-ipxip4-segmentation: off [fixed]
tx-ipxip6-segmentation: off [fixed]
tx-udp_tnl-segmentation: off [fixed]
tx-udp_tnl-csum-segmentation: off [fixed]
tx-gso-partial: off [fixed]
tx-tunnel-remcsum-segmentation: off [fixed]
tx-sctp-segmentation: off [fixed]
tx-esp-segmentation: off [fixed]
tx-udp-segmentation: off [fixed]
tx-gso-list: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off [fixed]
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
hw-tc-offload: off [fixed]
esp-hw-offload: off [fixed]
esp-tx-csum-hw-offload: off [fixed]
rx-udp_tunnel-port-offload: off [fixed]
tls-hw-tx-offload: off [fixed]
tls-hw-rx-offload: off [fixed]
rx-gro-hw: off [fixed]
tls-hw-record: off [fixed]
rx-gro-list: off
macsec-hw-offload: off [fixed]
rx-udp-gro-forwarding: off
hsr-tag-ins-offload: off [fixed]
hsr-tag-rm-offload: off [fixed]
hsr-fwd-offload: off [fixed]
hsr-dup-offload: off [fixed]

But nothing non-fixed cannot be enabled or disabled. “ethtool -K red0 tx-checksumming on” yields this

Actual changes:
tx-checksum-ipv4: off [requested on]
tx-checksum-ip-generic: off [requested on]
tx-checksum-ipv6: off [requested on]
tx-checksum-fcoe-crc: off [requested on]
tx-checksum-sctp: off [requested on]
Could not change any device features

Any ideas? (beside the obvious “use the realtek card”)

What’s the mainboard model? Have you looked into BIOS settings regarding the onboard LAN?

Mainboard is Asus P5SD1-FM2 (It’s from a Fujitsu Scaleo) with the latest BIOS available (0304).

In BIOS there is only two settings regarding onboard LAN. One is to disable/enable the whole onboard LAN, and other is to disable/enable “Onboard LAN Boot ROM”

This seems to be a bug in the Linux kernel driver where the speed is not reported correctly and therefore some type of collision errors appearing with the other side which shows correct link speed of 1 GBit/s.

The Windows driver doesn’t seem to have this problem.

https://bugzilla.kernel.org/show_bug.cgi?id=9735
https://bugzilla.kernel.org/show_bug.cgi?id=11149

Here is the code, you see the last major code change was in 2005 by Francois Romieu, the last minor change in 2022.

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/drivers/net/ethernet/sis/sis190.c?h=v6.6.1

2 Likes

The driver source has a helpful bit on the comments:

The asic could apparently do vlan, TSO, jumbo (sis191 only) and
* provide two (unused with Linux) Tx queues. No publicly
* available documentation alas.

So yeah… probably the offloads don’t work and I get interrupt trashing due that. I think my best bet is to use the Realtek card as red interface and use the SiS for blue interface with a lot less traffic.

Thanks anyway.

If you can afford it… don’t use at all that network adapter. Disable it from the bios and save resources for other PCI devices.

Unfortunately, SiS chipset and surrounding peripherals simply sucks. Realtek are not perfect but work far better than the one available on the motherboard.

LGA775? Wow! :slight_smile:

I’d look into getting a more modern MB, maybe a fanless Atom, but apart from that even an Asix-based USB NIC will likely be better than that built-in SiS one. With PCI and PCI-E slots available you could also stick pretty much anything there, an old 3COM card or something. I fully agree with @pike_it – disable the SiS NIC in BIOS.