Intel i218/i219 NIC lähetysnopeuden ongelmat Linux-kernelillä 4.19 (4.15 alkaen)

Aloin kummastelemaan miksi palvelimella tulee sisään täydellä Gigabit-nopeudella ja ulos lähtee vain puolikkaalla.
Niinpä tein tukipyynnön Hetznerille ja sain melko pian vastauksen; ehkä kyse olisi tästä https://wiki.hetzner.de/index.php/Low_performance_with_Intel_i218/i219_NIC/en.

Kyllä. Tästä oli kyse ja suorituskyky palautui normaaliksi.
Linux-ytimestä 4.15 alkaen näiden Intelin verkkokorttien ajurissa (e1000e) on ollut DMA-käsittelyä hidastava korjaus puskurin ylivuodon bugiin, joka jättää koko laitteen jumiin mikäli palvelin on runsaasti kuormitettu UDP-liikenteellä ja verkkokaapelia irroitetaan muutamia kertoja.

I219LM and I219V devices can fall into unrecovered Tx hang under very stressfully UDP traffic and multiple reconnection of Ethernet cable. This Tx hang of the LAN Controller is only recovered if the system is rebooted. Slightly slow down DMA access by reducing the number of outstanding requests. This workaround could have an impact on TCP traffic performance on the platform. Disabling TSO eliminates performance loss for TCPtraffic without a noticeable impact on CPU performance. (https://github.com/torvalds/linux/commit/b10effb92e272051dd1ec0d7be56bf9ca85ab927)

Ok, konesalissa kaapelia ei juurikaan kiskota ja DDoS-suojatussa ympäristössä olisi aika harvinaista kärsiä tällaisesta tilanteesta. Näinpä tuo ”korjaus” on vain suorituskykyä heikentävä haitta.

Paremman TCP-läpäisyn saavuttamiseksi ongelman voi kiertää poistamalla TCP segmentation offloading -ominaisuuden käytöstä:
ethtool -K <verkkokortin nimi> tso off gso off
Luonnollisesti lisäsin tämän /etc/rc.local, jotta uudelleenkäynnistyksessä ongelman ohitus ei unohtuisi.

Muokkauksia: vuoden 2020 loppupuolella Debian-jakelun Kernel versio 4.19.0-13-amd64 kykeni parempaan eli suorituskyky pysyi yli 800 Mbit/s lähetysnopeusluokasssa myös tso on gso on. Vuonna 2021 tuli kuitenkin Kernel-version 5.10 mukana jälleen heikompi suorituskyky takaisin, joten palvelin saa hieman enemmän CPU-keskeytyskuormaa, mutta näin pysytään valikoidusti hw offload sammutettuna järkevässä suorituskyvyssä. Lueskelin jostakin, että monille Intelin palvelinratkaisuille ehdotetaan muidenkin offload-parametrien asettamista pois päältä. Tuossa ympäristössä ei kuitenkaan ole hyötyä muokata muita asetuksia tältä osin.

Vastaa