Síťový benchmark z jedné IP adresy

tester

Síťový benchmark z jedné IP adresy
« kdy: 14. 01. 2018, 15:41:15 »
Zdravim, testujem routing na Linux-e a dostal som sa na celkom zaujimave cisla - 10Gbps / 14.4 mil. pps.
Problem ale nastava ak generujem pakety z jednej zdrojovej IP na jednu cielovu IP. Vtedy mi nastavaju RX dropy.

Mam to postavene na 16 jadrovom Intely, sietovka ma 16 IRQ ktore som staticky napinoval na jednotlive jadra. Laboval som s ring size, atd. vsetko som odladil a rozdelovanie zataze funguje uplne nadherne ak je aspon 10 zdrojovych adries. Ak je menej zdrojovych adries, vsetko ide na jedno IRQ ktore vytazi jedno jadro na 100% a nastavaju dropy.

Predpokladam, ze je to prave architekturou spracovavania paketov ked sa to nedokaze rozdelit na viacero jadier prave kvoli jednej zdrojovej IP.

Vie niekto potvrdit, ze je to prave mojou teoriou alebo sa to da dalej "tuningovat"?

Dakujem.
« Poslední změna: 15. 01. 2018, 21:24:34 od Petr Krčmář »


navstevnik

Re:Sietovy benchmark
« Odpověď #1 kdy: 14. 01. 2018, 20:39:04 »
Zdravim, testujem routing na Linux-e a dostal som sa na celkom zaujimave cisla - 10Gbps / 14.4 mil. pps.
Problem ale nastava ak generujem pakety z jednej zdrojovej IP na jednu cielovu IP. Vtedy mi nastavaju RX dropy.

Mam to postavene na 16 jadrovom Intely, sietovka ma 16 IRQ ktore som staticky napinoval na jednotlive jadra. Laboval som s ring size, atd. vsetko som odladil a rozdelovanie zataze funguje uplne nadherne ak je aspon 10 zdrojovych adries. Ak je menej zdrojovych adries, vsetko ide na jedno IRQ ktore vytazi jedno jadro na 100% a nastavaju dropy.

Predpokladam, ze je to prave architekturou spracovavania paketov ked sa to nedokaze rozdelit na viacero jadier prave kvoli jednej zdrojovej IP.

Vie niekto potvrdit, ze je to prave mojou teoriou alebo sa to da dalej "tuningovat"?

Dakujem.

Tohle bude asi zbytecny post, predpokladam, ze vetsinu z toho jsi uz zkousel.
Presto zkusim:

https://blog.cloudflare.com/how-to-receive-a-million-packets/
https://blog.cloudflare.com/how-to-achieve-low-latency/
https://01.org/linux-interrupt-moderation
https://www.youtube.com/watch?v=3XG9-X777Jo
https://software.intel.com/en-us/articles/setting-up-intel-ethernet-flow-director

Co jsem pochopil tak prave to linkovani IRQ natvrdo je problem a je potreba dalsi proces, ktery dokaze rozhodit zatez ale zaroven poskladat ty data dokupy.

tester

Re:Sietovy benchmark
« Odpověď #2 kdy: 14. 01. 2018, 23:28:24 »
Dakujem za odpoved. To co si pisal vyssie som uz skusal vsetko. To co simulujem asi realne nikdy nenasatane aby som mal jednu zdrojovy IP + zdrojovy port voci jednej cielovej IP a cielovemu portu. Inak sa to rozklada bezproblemov.

Este pre porovnanie odskusam DPDK.

 ;)

Jozko

Re:Sietovy benchmark
« Odpověď #3 kdy: 15. 01. 2018, 19:24:46 »
Dakujem za odpoved. To co si pisal vyssie som uz skusal vsetko. To co simulujem asi realne nikdy nenasatane aby som mal jednu zdrojovy IP + zdrojovy port voci jednej cielovej IP a cielovemu portu. Inak sa to rozklada bezproblemov.

Este pre porovnanie odskusam DPDK.

 ;)

Nepoznam velmi linux network stack do hlbky, ale malo by to fungovat nejako takto. Mas komunikaciu, ta ma nejake data, z tych dat robis nejaky hash (na zaklade src/dst ip mac, alebo tuple of five) modulo pocet IRQ a dostanes index do IRQ a ten by sa mal pouzivat. Ak si to natiskal surovo, tak ti to nepojde.

DPDK ti nespravi ziaden performance, pokial nechces programovat TCP stack, pozri sa na pktgen (je napisany v DPDK). Ale PKTGEN neobsahuje session ( aspon neobsahoval).




tester

Re:Síťový benchmark z jedné IP adresy
« Odpověď #4 kdy: 15. 01. 2018, 23:46:59 »
Jasne, tomu rozumiem. Ja som staticky jednotlive IRQ sietoveho rozhrania naPINoval na jednotlive jadra aby som mal 1 IRQ = 1 jadro. Tym dokazem dosiahnut idealneho vytazenia CPU. :)


Jozko

Re:Síťový benchmark z jedné IP adresy
« Odpověď #5 kdy: 17. 01. 2018, 14:35:11 »
Jasne, tomu rozumiem. Ja som staticky jednotlive IRQ sietoveho rozhrania naPINoval na jednotlive jadra aby som mal 1 IRQ = 1 jadro. Tym dokazem dosiahnut idealneho vytazenia CPU. :)

Neviem aku mas kartu a ci vie nejaky pokrocily offload, ale ked ano tak sa pozri na offload do urovne L4 -> hashuj cely socket, vtedy by distribucia mala byt rovnomerna pre kazdu session.