Intel i225/i226 2.5G NIC Information/Issue Tracking Thread

Started by CJ, January 11, 2024, 03:21:38 PM

Previous topic - Next topic
EDIT: This thread is intended to cover i225 and i226 but I only found the pdf for i225.

I know a lot of people are using i225 NICs with OPNsense with varying degrees of success.  While working on something else, I came across this document from Intel.

https://cdrdv2-public.intel.com/621661/621661-Intel%C2%AE%20Ethernet%20Controller%20I225-Public%20External%20Specification%20Update-v1.2.pdf

There are two things I'd like to call attention to in the document.  The first is the Part Identification Summary.  Using this we can more accurately determine what type and revision of the i225 that each person has.  For example, I have a SLNNJ which is listed as an i225-LM v3.  But if I run pciconf, it only shows as I225-LM.

The second thing I'd like to call attention to is the Errata.  There's more to it but this is the relevant section.  Intel states that the problem was fixed in the v2 hardware but doesn't mention what the v3 solves nor why the release of the i226.

QuotePackets received by the I225 v1 product link partner (the switch, router, or back-to-back
controller it is connected to) that are received with a smaller IPG than 8 bytes on the MAC/PHY
interface are dropped. When this occurs, the network connectivity is reduced from 2.5Gpbs to
below 1Gpbs operation. In some scenarios with certain link partners, the operation can be as
low as 1-10Mbps.

If everyone who is using an i225(whether in OPNsense or not) can post the following information then maybe we can make it easier for people to get a working configuration.


OS: OPNsense
Spec Code: SLNNJ
Part #: I225-LM v3
Connected to: S33 Cable Modem
Link Speed: 2.5G
Speed Test: 1.2G (connection limited)


My speed test is limited by the speed of my internet connection but I'm confident it would support a full 2.5G.  I've had none of the typical issues reported by other i225/i226 users.

Interesting idea,

I know the topic mentioned 225 but you mentioned in the thread as well 226. Are you only interested on 225 or as well 226?

Regards,
S.
Networking is love. You may hate it, but in the end, you always come back to it.

OPNSense HW
APU2D2 - deceased
N5105 - i226-V | Patriot 2x8G 3200 DDR4 | L 790 512G - VM HA(SOON)
N100   - i226-V | Crucial 16G  4800 DDR5 | S 980 500G - PROD

Quote from: Seimus on January 31, 2024, 06:24:11 PM
Interesting idea,

I know the topic mentioned 225 but you mentioned in the thread as well 226. Are you only interested on 225 or as well 226?

Regards,
S.

Absolutely.  I've edited the title and post to make that clearer as I didn't realize I hadn't included them originally.  i226 is really just another revision of i225 and Intel's attempt to get away from the stigma regarding the i225 name.

Happy to hear that,

I will try to keep the same format as you did



Device: N5105
OS: OPNsense
Spec Code: Intel S2353L29/SRKTV
Device: 0x125c
Subvendor: 0x8086
Part #: I226-V rev.4
Queues: 4 Rx/Tx

#1
Connected to: Telco Cable modem
Link Speed: 1G
Speed Test: 500M (connection limited)

#2
Connected to: Zyxel GS1900-24E
Link Speed: 2x1G (LAGG)
Speed Test: 2G



$ pciconf -lv | grep -A1 -B3 network
igc0@pci0:2:0:0: class=0x020000 rev=0x04 hdr=0x00 vendor=0x8086 device=0x125c subvendor=0x8086 subdevice=0x0000
    vendor     = 'Intel Corporation'
    device     = 'Ethernet Controller I226-V'
    class      = network
    subclass   = ethernet


igc0: Using 1024 TX descriptors and 1024 RX descriptors
igc0: Using 4 RX queues 4 TX queues


Sadly I don't have a 2.5G switch yet to test 2x2.5G LAGGs. Personally my experience was flawless, I am able to utilize the full capacity of my LAGG. OPNsense and NICs hashes and balances the traffic accordingly between ports in LAGG

I have as well a N100 on which I currently run and test OPNsense


Device: N100
OS: OPNsense
Spec Code: Intel S2363L58/SRKTU
Device: 0x125c
Subvendor: 0x8086
Part #: I226-V rev.4
Queues: 4 Rx/Tx



$ pciconf -lv | grep -A1 -B3 network
igc0@pci0:1:0:0: class=0x020000 rev=0x04 hdr=0x00 vendor=0x8086 device=0x125c subvendor=0x8086 subdevice=0x0000
    vendor     = 'Intel Corporation'
    device     = 'Ethernet Controller I226-V'
    class      = network
    subclass   = ethernet



igc0: Using 1024 TX descriptors and 1024 RX descriptors
igc0: Using 4 RX queues 4 TX queues


Regards,
S.
Networking is love. You may hate it, but in the end, you always come back to it.

OPNSense HW
APU2D2 - deceased
N5105 - i226-V | Patriot 2x8G 3200 DDR4 | L 790 512G - VM HA(SOON)
N100   - i226-V | Crucial 16G  4800 DDR5 | S 980 500G - PROD

Quote from: Seimus on January 31, 2024, 06:58:29 PM
Happy to hear that,

I will try to keep the same format as you did



OS: OPNsense
Spec Code: N/A (Cant find the proper specification documentation from Intel)
Part #: I226-V rev.4
Queues: 4 Rx/Tx

#1
Connected to: Telco Cable modem
Link Speed: 1G
Speed Test: 500M (connection limited)

#2
Connected to: Zyxel GS1900-24E
Link Speed: 2x1G (LAGG)
Speed Test: 2G



Sadly I don't have a 2.5G switch yet to test 2x2.5G LAGGs. Personally my experience was flawless, I am able to utilize the full capacity of my LAGG. OPNsense and NICs hashes and balances the traffic accordingly between ports in LAGG

Regards,
S.

If you're able to, it would be helpful to post the code that's on the NIC chip.  The pdf I linked shows an example of how it should look.  That way we can at least tell which i226 you're using even if we don't have the appropriate documentation.

I tried to look at the output to find similar code, but the output of the pciconf show HEX values and there is nothing that is similar to the SPEC CODEs mentioned in the sheet.

However I updated my post with the output.

Regards,
S.
Networking is love. You may hate it, but in the end, you always come back to it.

OPNSense HW
APU2D2 - deceased
N5105 - i226-V | Patriot 2x8G 3200 DDR4 | L 790 512G - VM HA(SOON)
N100   - i226-V | Crucial 16G  4800 DDR5 | S 980 500G - PROD

One of my i226. These interfaces are passed through to the OPN virtual machine running on Proxmox:
penguin@OPNsense:~ $ sudo pciconf -llcvVBa igc0
drv selector class    rev  hdr  vendor device subven subdev
igc0@pci0:6:16:0: 020000   04   00   8086   125c   8086   0000
    vendor     = 'Intel Corporation'
    device     = 'Ethernet Controller I226-V'
    class      = network
    subclass   = ethernet
    cap 01[40] = powerspec 3  supports D0 D3  current D0
    cap 05[50] = MSI supports 1 message, 64 bit, vector masks
    cap 11[70] = MSI-X supports 5 messages, enabled
                 Table in map 0x1c[0x0], PBA in map 0x1c[0x2000]

Running fine on OPN ver 23.7. Also on 23.1 until recently. I'm unsure this is the info you wanted added.

Two FWs on 24.1

Quote from: Protectli FW4Croot@OPNsense:~ # pciconf -llcvVBa igc0
drv     selector        class    rev  hdr  vendor device subven subdev
igc0@pci0:1:0:0:        020000   03   00   8086   15f3   8086   0000
    vendor     = 'Intel Corporation'
    device     = 'Ethernet Controller I225-V'
    class      = network
    subclass   = ethernet
    cap 01[40] = powerspec 3  supports D0 D3  current D0
    cap 05[50] = MSI supports 1 message, 64 bit, vector masks
    cap 11[70] = MSI-X supports 5 messages, enabled
                 Table in map 0x1c[0x0], PBA in map 0x1c[0x2000]
    cap 10[a0] = PCI-Express 2 endpoint max data 128(512) FLR RO NS
                 max read 512
                 link x1(x1) speed 5.0(5.0) ASPM disabled(L1)
    ecap 0001[100] = AER 2 0 fatal 0 non-fatal 1 corrected

    ecap 0018[1c0] = LTR 1
    ecap 001f[1f0] = Precision Time Measurement 1
    ecap 001e[1e0] = L1 PM Substates 1

Quote from: N5105root@OPNsense:~ # pciconf -llcvVBa igc0
drv     selector        class    rev  hdr  vendor device subven subdev
igc0@pci0:2:0:0:        020000   04   00   8086   125c   8086   0000
    vendor     = 'Intel Corporation'
    device     = 'Ethernet Controller I226-V'
    class      = network
    subclass   = ethernet
    cap 01[40] = powerspec 3  supports D0 D3  current D0
    cap 05[50] = MSI supports 1 message, 64 bit, vector masks
    cap 11[70] = MSI-X supports 5 messages, enabled
                 Table in map 0x1c[0x0], PBA in map 0x1c[0x2000]
    cap 10[a0] = PCI-Express 2 endpoint max data 256(512) FLR RO NS
                 max read 512
                 link x1(x1) speed 5.0(5.0) ASPM disabled(L1)
    ecap 0001[100] = AER 2 0 fatal 0 non-fatal 0 corrected
   
    ecap 0018[1c0] = LTR 1
    ecap 001f[1f0] = Precision Time Measurement 1
    ecap 001e[1e0] = L1 PM Substates 1

From my firewall running 23.7.12_5

hush@hush:~ % sudo pciconf -llcvVBa igc0
drv     selector        class    rev  hdr  vendor device subven subdev
igc0@pci0:1:0:0:        020000   03   00   8086   15f3   8086   0000
    vendor     = 'Intel Corporation'
    device     = 'Ethernet Controller I225-V'
    class      = network
    subclass   = ethernet
    cap 01[40] = powerspec 3  supports D0 D3  current D0
    cap 05[50] = MSI supports 1 message, 64 bit, vector masks
    cap 11[70] = MSI-X supports 5 messages, enabled
                 Table in map 0x1c[0x0], PBA in map 0x1c[0x2000]
    cap 10[a0] = PCI-Express 2 endpoint max data 256(512) FLR RO NS
                 max read 512
                 link x1(x1) speed 5.0(5.0) ASPM disabled(L1)
    ecap 0001[100] = AER 2 0 fatal 0 non-fatal 0 corrected
   
    ecap 0018[1c0] = LTR 1
    ecap 001f[1f0] = Precision Time Measurement 1
    ecap 001e[1e0] = L1 PM Substates 1

Quote from: Seimus on February 03, 2024, 10:59:34 PM
I tried to look at the output to find similar code, but the output of the pciconf show HEX values and there is nothing that is similar to the SPEC CODEs mentioned in the sheet.

However I updated my post with the output.

Regards,
S.

What I'm referring to is the code that's directly printed on the chip.  You would have to physically look at it in order to determine that.  Here is the reference image Intel uses in the PDF.  The Spec Code would be QVKX, which amusingly isn't anywhere in their chart of I225 codes.

As far as I know, it's not possible to get the Spec Code from software.  But if someone figures out a method I'll be happy to update the first post with it.

BTW, just the pciconf isn't particularly helpful.  According to the Intel PDF, the issue is only seen when connected to certain equipment.  This is why I posted what I was connected to along with what speeds I observed and if I was having any problems.

Uff, currently I can not find any pictures of my unit for the internals. But I will soon do a maintenance, re-pasting and cleaning so I will take a photo of the chip.

In regards of the issue, interesting so there is some dependency between H/W that is causing this?

As I mentioned the NIC that I have is performing very well.

Regards,
S.
Networking is love. You may hate it, but in the end, you always come back to it.

OPNSense HW
APU2D2 - deceased
N5105 - i226-V | Patriot 2x8G 3200 DDR4 | L 790 512G - VM HA(SOON)
N100   - i226-V | Crucial 16G  4800 DDR5 | S 980 500G - PROD

Quote from: Seimus on February 08, 2024, 10:11:34 PM
Uff, currently I can not find any pictures of my unit for the internals. But I will soon do a maintenance, re-pasting and cleaning so I will take a photo of the chip.

I don't believe the chip requires any sort of heat sink.  I certainty didn't remove one to check mine.

Quote from: Seimus on February 08, 2024, 10:11:34 PM
In regards of the issue, interesting so there is some dependency between H/W that is causing this?

As I mentioned the NIC that I have is performing very well.

Regards,
S.

Why do I feel like none of you read the linked PDF?  It lays out the details in there, including what they think the problem is, what issues it causes, and why only some people see it.  It also has the version table and the information of how to check your model.

Quote from: CJ on February 09, 2024, 09:57:15 PM
I don't believe the chip requires any sort of heat sink.  I certainty didn't remove one to check mine.

I am not saying anything about a heatsink or maintenance on the Intel chip. I am just stating that I plan to do a maintenance on the box as whole and repaste it's CPU. Thus I will have the space to take proper pictures of the chip and it's SPEC CODE  ;)

Quote from: CJ on February 09, 2024, 09:57:15 PM
Why do I feel like none of you read the linked PDF?  It lays out the details in there, including what they think the problem is, what issues it causes, and why only some people see it.  It also has the version table and the information of how to check your model.

You are right I didn't had time to read it whole as I was mainly looking at the Codes and trying to find a way how to obtain the code without disconnecting and disassembling the device. I tread thru it now 2.1 in the PDF as stated there Intel believes issue could be related to received IPG lower that 8B.

Regards,
S.
Networking is love. You may hate it, but in the end, you always come back to it.

OPNSense HW
APU2D2 - deceased
N5105 - i226-V | Patriot 2x8G 3200 DDR4 | L 790 512G - VM HA(SOON)
N100   - i226-V | Crucial 16G  4800 DDR5 | S 980 500G - PROD

Hello All.
This is my first post on the forums and I am wondering if anyone else has noticed this. I just converted to OPNSense this last weekend and so far seems to be alright except for some throughput issues. I am on a FTTH connection at 1Gbps and routinely only pull around 350-400Mbps (speedtest.net and iperf3 public servers). My current opnsense setup is as follows:

Intel i3-530 @ 2.93GHz
Intel H55 Chipset
8GB RAM
On-board Gigabit NIC (em0/WAN)
Intel I225-V 4 Port (igc0-3)
OPNSense 24.1.1

I have read a lot on the previous issues that have popped up with this controller since it was baked into FreeBSD and I have been researching kernel tunables to try and increase throughput. I have noticed in my pursuit that it seems like opnsense is not loading the igc driver. When I run kldstat, I am not seeing a module loaded for the card but somehow the card is still identified:
# kldstat
Id Refs Address                Size Name
1   46 0xffffffff80200000  216c2e0 kernel
2    1 0xffffffff8236d000     3b18 pflog.ko
3    3 0xffffffff82371000    78aa0 pf.ko
4    1 0xffffffff823ea000     aa70 if_gre.ko
5    1 0xffffffff823f5000    16148 if_lagg.ko
6    2 0xffffffff8240c000     3538 if_infiniband.ko
7    1 0xffffffff82410000     e8f8 if_bridge.ko
8    2 0xffffffff8241f000     8958 bridgestp.ko
9    1 0xffffffff82428000     f4c8 pfsync.ko
10    1 0xffffffff82438000     4b58 if_enc.ko
11    1 0xffffffff8243e000     f858 carp.ko
12    1 0xffffffff828e5000     3250 ichsmb.ko
13    1 0xffffffff828e9000     2180 smbus.ko
14    1 0xffffffff828ec000     4700 nullfs.ko
15    2 0xffffffff828f1000    27198 ipfw.ko
16    1 0xffffffff82919000    12520 dummynet.ko
17    1 0xffffffff8292c000     39c0 ng_socket.ko
18    1 0xffffffff82930000     aac8 netgraph.ko


# sysctl -a | grep -E 'dev.igc.*.%desc'
dev.igc.3.%desc: Intel(R) Ethernet Controller I225-V
dev.igc.2.%desc: Intel(R) Ethernet Controller I225-V
dev.igc.1.%desc: Intel(R) Ethernet Controller I225-V
dev.igc.0.%desc: Intel(R) Ethernet Controller I225-V


# pciconf -llv igc0
drv selector class    rev  hdr  vendor device subven subdev
igc0@pci0:3:0:0: 020000   03   00   8086   15f3   8086   0000
    vendor     = 'Intel Corporation'
    device     = 'Ethernet Controller I225-V'
    class      = network
    subclass   = ethernet


When I run 'pciconf -a igc0', it only shows that it is attached and no driver information. Am I missing something here? I know that the freebsd man page for IGC4 says that the driver was not implemented until 14.0, but how is this card working under freebsd 13.2 base? The reason I am asking about this is that I found a driver pack that references the I225-V card that was updated on 12/23/2023 here (https://www.intel.com/content/www/us/en/download/15084/intel-ethernet-adapter-complete-driver-pack.html) and was wondering if maybe this could be helpful to alleviate the rampant issues with this controller. Other reason that I am curious is because I found this paper "Tuning FreeBSD for routing and firewalling" (https://papers.freebsd.org/2018/asiabsdcon/cochard-tuning_freebsd_for_routing_and_firewalling.files/cochard-tuning_freebsd_for_routing_and_firewalling-paper.pdf referenced in another post under this forum and it makes mention of setting the receive process limit to unlimited on Intel controllers; however, 'sysctl -a | grep rx_process_limit' only returns an oid of "hw.vtnet.rx_process_limit: 1024".
Am I missing something on this whole thing?