{"id":21057,"date":"2026-08-27T11:49:04","date_gmt":"2026-08-27T09:49:04","guid":{"rendered":"https:\/\/webhosting.de\/receive-side-scaling-rss-10g-25g-linux-server-optimierung-bitrate\/"},"modified":"2026-08-27T11:49:04","modified_gmt":"2026-08-27T09:49:04","slug":"skalowanie-po-stronie-odbiorczej-rss-10g-25g-optymalizacja-serwera-linux-przeplywnosc","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/receive-side-scaling-rss-10g-25g-linux-server-optimierung-bitrate\/","title":{"rendered":"Receive Side Scaling przy pr\u0119dko\u015bciach 10 i 25 Gbit\/s: optymalizacja wydajno\u015bci nowoczesnych sieci serwerowych z systemem Linux"},"content":{"rendered":"<p><strong>Skalowanie po stronie odbiorczej<\/strong> rozdziela ruch sieciowy na \u0142\u0105czach 10 i 25 Gbit\/s mi\u0119dzy kilka rdzeni, dzi\u0119ki czemu serwery z systemem Linux mog\u0105 osi\u0105ga\u0107 wysok\u0105 przepustowo\u015b\u0107 przy niskim op\u00f3\u017anieniu. Poka\u017c\u0119 w praktyce, jak aktywuj\u0119 RSS, kt\u00f3re <strong>Wskaz\u00f3wki<\/strong> w mapie rdzeni, unikaj\u0105c w ten spos\u00f3b w\u0105skich garde\u0142 zwi\u0105zanych z przerwaniami i trafieniami w pami\u0119\u0107 podr\u0119czn\u0105.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<p>Kr\u00f3tko podsumuj\u0119 najwa\u017cniejsze kwestie, aby\u015b m\u00f3g\u0142 szybko zaplanowa\u0107 kolejne kroki.<\/p>\n<ul>\n  <li><strong>Rozk\u0142ad obci\u0105\u017cenia<\/strong>: Pakiety trafiaj\u0105 do wielu rdzeni poprzez kilka kolejek.<\/li>\n  <li><strong>Lokalizacja pami\u0119ci podr\u0119cznej<\/strong>: Przep\u0142yw pozostaje niezmienny w tej samej kolejce.<\/li>\n  <li><strong>Hashing<\/strong>: Funkcja skr\u00f3tu czw\u00f3rkowego r\u00f3wnomiernie rozdziela przep\u0142ywy mi\u0119dzy kolejkami.<\/li>\n  <li><strong>Affinit\u00e4t<\/strong>: Precyzyjne mapowanie IRQ zmniejsza op\u00f3\u017anienia.<\/li>\n  <li><strong>Skalowanie<\/strong>: Od 10\/25 Gbit\/s technologia RSS zapewnia wysok\u0105 przepustowo\u015b\u0107.<\/li>\n<\/ul>\n<p>Te kwestie s\u0105 ze sob\u0105 powi\u0105zane i stanowi\u0105 podstaw\u0119 <strong>Wydajno\u015b\u0107<\/strong> w oparciu o rzeczywiste obci\u0105\u017cenia. Najpierw skupiam si\u0119 na ustaleniu w\u0142a\u015bciwej liczby kolejek, a nast\u0119pnie na <strong>CPU<\/strong>-Zgodno\u015b\u0107. Nast\u0119pnie sprawdzam parametry skr\u00f3tu i ustawienia zaawansowane.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/servernetzwerk-performance-2947.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Jak dzia\u0142a Receive Side Scaling<\/h2>\n\n<p>RSS dzieli proces odbioru pakiet\u00f3w na kilka etap\u00f3w <strong>Kolejki odbiorcze<\/strong>, kt\u00f3re przypisuj\u0119 do konkretnych rdzeni procesora, aby \u017caden pojedynczy rdze\u0144 nie sta\u0142 si\u0119 w\u0105skim gard\u0142em. Zmniejsza to gwa\u0142towne skoki liczby przerwa\u0144 twardych i wyr\u00f3wnuje przetwarzanie za pomoc\u0105 przerwa\u0144 mi\u0119kkich (SoftIRQ), co ogranicza skoki op\u00f3\u017anie\u0144 i zwi\u0119ksza przepustowo\u015b\u0107. Ka\u017cda kolejka wyzwala w\u0142asne przerwania, kt\u00f3re na sta\u0142e przypisuj\u0119 do rdzeni, aby zapewni\u0107 sp\u00f3jno\u015b\u0107 \u015bcie\u017cek danych. Ta sp\u00f3jno\u015b\u0107 sprzyja <strong>Schowek<\/strong>-Lokalizacja, poniewa\u017c przep\u0142yw zawsze napotyka ten sam rdze\u0144. W\u0142a\u015bnie ta wsp\u00f3\u0142dzia\u0142anie przek\u0142ada si\u0119 bezpo\u015brednio na wymiern\u0105 wydajno\u015b\u0107 przy wysokich wska\u017anikach PPS.<\/p>\n\n<h2>Tak dzia\u0142a RSS z technicznego punktu widzenia<\/h2>\n\n<p>NIC tworzy na podstawie adresu IP \u017ar\u00f3d\u0142owego i docelowego oraz portu \u017ar\u00f3d\u0142owego i docelowego <strong>Hash<\/strong> i wykorzystuje go jako indeks dla tablicy po\u015bredniej, kt\u00f3ra wskazuje na kolejki. W ten spos\u00f3b pakiety z danego przep\u0142ywu zawsze trafiaj\u0105 do tej samej kolejki i pozostaj\u0105 w ten spos\u00f3b przypisane do tego samego j\u0105dra. R\u00f3\u017cne przep\u0142ywy rozk\u0142adaj\u0105 si\u0119 r\u00f3wnomiernie, o ile klucze skr\u00f3tu i pola protoko\u0142u s\u0105 odpowiednio skonfigurowane. W ten spos\u00f3b praca przebiega blisko <strong>Sprz\u0119t<\/strong>, dzi\u0119ki czemu j\u0105dro musi wykonywa\u0107 mniej operacji r\u00f3wnowa\u017cenia, a obci\u0105\u017cenie systemowe maleje. W\u0142a\u015bnie tego potrzebuj\u0119, aby przy pr\u0119dko\u015bciach 10G\/25G utrzyma\u0107 niskie obci\u0105\u017cenie ka\u017cdego j\u0105dra zwi\u0105zane z przetwarzaniem pakiet\u00f3w.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linuxnetzwerke_tuning4683.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Dlaczego RSS ma znaczenie przy pr\u0119dko\u015bciach od 10 do 25 Gbit\/s<\/h2>\n\n<p>Przy pr\u0119dko\u015bci 1 Gbit\/s cz\u0119sto wystarcza jeden <strong>Rdze\u0144<\/strong> obci\u0105\u017cenie pakietami, jednak ju\u017c przy 10 Gbit\/s r\u00f3wnowaga szybko si\u0119 zachwiewa. Ma\u0142e pakiety powoduj\u0105 wzrost liczby PPS, przez co rdze\u0144 szybko osi\u0105ga 100-procentowe obci\u0105\u017cenie i pojawiaj\u0105 si\u0119 utraty pakiet\u00f3w. W\u0142a\u015bnie wtedy RSS dzia\u0142a jak mno\u017cnik u\u017cytecznej przepustowo\u015bci. Rozk\u0142adam obci\u0105\u017cenie na kilka <strong>Rdzenie<\/strong>, ograniczaj\u0105 zmiany kontekstu i zapewniaj\u0105 wi\u0119ksz\u0105 stabilno\u015b\u0107 krzywych op\u00f3\u017anie\u0144. Wynik: rzeczywista przepustowo\u015b\u0107 zbli\u017ca si\u0119 do szybko\u015bci \u0142\u0105cza dopiero przy czystym RSS.<\/p>\n\n<h2>Konfiguracja RSS na serwerze z systemem Linux<\/h2>\n\n<p>W systemie Linux zarz\u0105dzam kana\u0142ami RSS przede wszystkim za pomoc\u0105 <strong>narz\u0119dzie<\/strong>, opcje sterownika i sysfs, aby w pe\u0142ni wykorzysta\u0107 mo\u017cliwo\u015bci karty sieciowej. Najpierw odczytuj\u0119 maksymaln\u0105 liczb\u0119 kana\u0142\u00f3w odbiorczych (RX), a nast\u0119pnie ustawiam liczb\u0119 kolejek dostosowan\u0105 do procesora. Nast\u0119pnie sprawdzam skr\u00f3t RSS dla protoko\u0142\u00f3w TCP\/UDP oraz opcjonalnie dla sieci VLAN lub tunelowania, aby profile obci\u0105\u017cenia pozostawa\u0142y prawid\u0142owo roz\u0142o\u017cone. W przypadku podstawowego szumu zwi\u0105zanego z rozdzielaniem przerwa\u0144 pomaga mi <a href=\"https:\/\/webhosting.de\/pl\/konfiguracja-rownowazenia-irq-w-systemie-linux-na-serwerze\/\">R\u00f3wnowa\u017cenie IRQ<\/a>, cho\u0107 krytyczne kolejki wol\u0119 przypina\u0107 r\u0119cznie. W ten spos\u00f3b \u0142\u0105cz\u0119 <strong>Wskaz\u00f3wki<\/strong> \u015bci\u015ble dostosowa\u0107 si\u0119 do topologii hosta i zapobiega\u0107 niepo\u017c\u0105danym przemieszczeniom.<\/p>\n\n<h2>Tabela po\u015bredniczenia, klucz RSS i precyzyjne dostosowywanie skr\u00f3tu: konkretne polecenia<\/h2>\n\n<p>Najpierw sprawdzam aktualny rozk\u0142ad i klucz karty sieciowej:<\/p>\n<pre><code>ethtool -x eth0 # Wy\u015bwietl tabel\u0119 po\u015brednictwa (kolejki odbiorcze) i klucz RSS\nethtool -n eth0 rx-flow-hash tcp4\nethtool -n eth0 rx-flow-hash udp4\n<\/code><\/pre>\n<p>Aby zapewni\u0107 r\u00f3wnomierny rozk\u0142ad, ustawiam tablic\u0119 po\u015brednicz\u0105c\u0105 na \u017c\u0105dan\u0105 liczb\u0119 kolejek. W przypadku 16 kolejek wybieram r\u00f3wnomierne przyporz\u0105dkowanie:<\/p>\n<pre><code>ethtool -X eth0 equal 16  Rozk\u0142ad # r\u00f3wnomiernie na 16 kolejek\n<\/code><\/pre>\n<p>W razie potrzeby dostosowuj\u0119 pola skr\u00f3tu. Dla TCP4 z czw\u00f3rkami (s = adres IP \u017ar\u00f3d\u0142owy, d = adres IP docelowy, f = port \u017ar\u00f3d\u0142owy, n = port docelowy):<\/p>\n<pre><code>ethtool -N eth0 rx-flow-hash tcp4 sdfn\nethtool -N eth0 rx-flow-hash udp4 sdfn\nethtool -N eth0 rx-flow-hash tcp6 sdfn\nethtool -N eth0 rx-flow-hash udp6 sdfn\n<\/code><\/pre>\n<p>Niekt\u00f3re sterowniki umo\u017cliwiaj\u0105 r\u00f3wnie\u017c ustawienie w\u0142asnego klucza RSS (np. w celu lepszego rozproszenia w szczeg\u00f3lnych przypadkach):<\/p>\n<pre><code>ethtool -X eth0 hkey   # \u2013 tylko je\u015bli obs\u0142uguj\u0105 to sterowniki\/karta sieciowa\n<\/code><\/pre>\n\n<h2>Prawid\u0142owe ustawienie afinicji procesora i NUMA<\/h2>\n\n<p>Mapuj\u0119 ka\u017cd\u0105 kolejk\u0119 RX za pomoc\u0105 <strong>Powinowactwo IRQ<\/strong> przypisuj je do dedykowanych rdzeni, uwzgl\u0119dniaj\u0105c architektur\u0119 NUMA, aby dane przechodzi\u0142y przez kontroler pami\u0119ci na kr\u00f3tkim odcinku. Je\u015bli karta sieciowa dzia\u0142a na w\u0119\u017ale 0, przypisuj\u0119 r\u00f3wnie\u017c g\u0142\u00f3wne kolejki do rdzeni na w\u0119\u017ale 0 i umieszczam obci\u0105\u017cenia w pobli\u017cu. Ta blisko\u015b\u0107 ogranicza dost\u0119py zdalne i znacznie zmniejsza op\u00f3\u017anienia pami\u0119ci. Przydatny jest w tym celu profil dla kolejek produkcyjnych, a tak\u017ce oddzielne rdzenie dla zada\u0144 zwi\u0105zanych z zarz\u0105dzaniem i odci\u0105\u017caniem. Osoby, kt\u00f3re chc\u0105 zag\u0142\u0119bi\u0107 si\u0119 w ten temat, znajd\u0105 wskaz\u00f3wki dotycz\u0105ce precyzyjnego dostosowania pod adresem <a href=\"https:\/\/webhosting.de\/pl\/serwer-irq-affinity-wielordzeniowy-optymalizacja-sieci-wydajnosc\/\">Powinowactwo IRQ<\/a>, je\u015bli chodzi o planowanie na <strong>Rdze\u0144<\/strong> uproszczone.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-server-network-tuning-2478.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Podr\u0119cznik dotycz\u0105cy powinowactwa IRQ: od IRQ do stabilnego przypisania do rdzeni<\/h2>\n\n<p>Najpierw sprawdzam, kt\u00f3re sygna\u0142y IRQ nale\u017c\u0105 do kolejek odbiorczych (RX), a nast\u0119pnie przypisuj\u0119 je na sta\u0142e:<\/p>\n<pre><code>grep -E \"eth0.*Rx\" \/proc\/interrupts\ncat \/sys\/class\/net\/eth0\/device\/numa_node\n<\/code><\/pre>\n<p>Przypisanie ustawiam za pomoc\u0105 <code>smp_affinity_list<\/code>, \u017cebym nie musia\u0142 oblicza\u0107 masek Hex. Przyk\u0142ad: kolejki RX 0\u20137 na rdzeniach 2\u20139:<\/p>\n<pre><code>Przyk\u0142ad #: Przypisanie sygna\u0142\u00f3w IRQ do rdzeni 2\u20139 (jedna linia na ka\u017cdy sygna\u0142 IRQ)\necho 2  &gt; \/proc\/irq\/\/smp_affinity_list\necho 3  &gt; \/proc\/irq\/\/smp_affinity_list\necho 4  &gt; \/proc\/irq\/\/smp_affinity_list\n...\necho 9  &gt; \/proc\/irq\/\/smp_affinity_list\n<\/code><\/pre>\n<p>Wa\u017cne: funkcja MSI-X musi by\u0107 w\u0142\u0105czona, aby ka\u017cda kolejka mia\u0142a w\u0142asne przerwania. Je\u015bli stosuj\u0119 r\u0119czne przypisywanie pin\u00f3w, blokuj\u0119 <code>irqbalance<\/code> dla tych IRQ (np. poprzez czarn\u0105 list\u0119) lub wy\u0142\u0105cz t\u0119 us\u0142ug\u0119 selektywnie na hostach o statycznym uk\u0142adzie. Dodatkowo sprawdzam NUMA za pomoc\u0105 <code>lscpu<\/code> oraz przypisania PCIe, aby nie tworzy\u0107 \u015bcie\u017cek mi\u0119dzy w\u0119z\u0142ami.<\/p>\n\n<h2>Konfiguracja funkcji skr\u00f3tu i protoko\u0142y<\/h2>\n\n<p>Pola skr\u00f3tu definiuj\u0119 w taki spos\u00f3b, aby prawdziwe <strong>Ruch uliczny<\/strong>-Rozprowadza\u0107 wzorce r\u00f3wnomiernie, zamiast skupia\u0107 je w kilku kolejkach. W przypadku protoko\u0142\u00f3w TCP\/UDP stosuj\u0119 czw\u00f3rk\u0119, podobnie w przypadku IPv6, natomiast w przypadku VXLAN lub GRE uwzgl\u0119dniam dodatkowe pola kapsu\u0142kowania. Niekt\u00f3re karty sieciowe oferuj\u0105 konfigurowalne klucze skr\u00f3tu, kt\u00f3re dostosowuj\u0119 do dominuj\u0105cego obci\u0105\u017cenia. Gdy tylko zauwa\u017c\u0119 skupienie obci\u0105\u017cenia w poszczeg\u00f3lnych kolejkach, koryguj\u0119 wyb\u00f3r skr\u00f3tu. Ten krok zajmuje niewiele czasu, ale zapobiega <strong>niewywa\u017cenie<\/strong> przy du\u017cej liczbie po\u0142\u0105cze\u0144.<\/p>\n\n<h2>\u0141\u0105czenie przerwa\u0144 i PPS<\/h2>\n\n<p>\u0141\u0105cz\u0119 RSS z umiarkowanym <strong>Koalescencja przerwa\u0144<\/strong>, aby pogrupowa\u0107 ruch generuj\u0105cy du\u017ce obci\u0105\u017cenie PPS w \u0142atwe do opanowania partie. Zmniejsza to obci\u0105\u017cenie zwi\u0105zane z przerwaniami, ale nie mo\u017ce pogorszy\u0107 op\u00f3\u017anie\u0144 w us\u0142ugach wra\u017cliwych. Dlatego mierz\u0119 czasy przesy\u0142u w obie strony i stopniowo dostosowuj\u0119 warto\u015bci koalescencji. W przypadku obci\u0105\u017ce\u0144 zwi\u0105zanych z pami\u0119ci\u0105 masow\u0105 lub tworzeniem kopii zapasowych mo\u017cna stosowa\u0107 bardziej intensywne grupowanie ni\u017c w przypadku interfejs\u00f3w API warstwy 7 lub VoIP. Podsumowuj\u0105c, r\u00f3wnowa\u017c\u0119 <strong>Op\u00f3\u017anienie<\/strong> w stosunku do przepustowo\u015bci, a\u017c obie warto\u015bci b\u0119d\u0105 zgodne.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/performance_tuning_linux_1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Koalescencja w praktyce: profile i punkty pomiarowe<\/h2>\n\n<p>Zaczynam od umiarkowanych ustawie\u0144 domy\u015blnych i stopniowo dostosowuj\u0119 je do optymalnych warto\u015bci dla poszczeg\u00f3lnych obci\u0105\u017ce\u0144. Trzy sprawdzone profile wyj\u015bciowe:<\/p>\n<ul>\n  <li>API\/niskie op\u00f3\u017anienie: <code>rx-usecs 2\u20136<\/code>, <code>ramki rx 16\u201332<\/code>, adaptacyjne wy\u0142\u0105czone<\/li>\n  <li>Wszechstronno\u015b\u0107: <code>rx-usecs 8\u201316<\/code>, <code>ramki rx 32\u201364<\/code>, adaptacyjne do<\/li>\n  <li>Towary luzem\/magazynowanie: <code>24\u201348 rx-usecs<\/code>, <code>ramki rx 128\u2013256<\/code>, adaptacyjne do<\/li>\n<\/ul>\n<pre><code>ethtool -c eth0\nethtool -C eth0 rx-usecs 12 rx-frames 64 adaptive-rx on\n<\/code><\/pre>\n<p>W tym celu mierz\u0119 op\u00f3\u017anienia p95\/p99, PPS, obci\u0105\u017cenie procesora na rdze\u0144 oraz liczb\u0119 retransmisji. Gdy tylko zauwa\u017c\u0119 rosn\u0105c\u0105 wariancj\u0119 w przypadku API\/VoIP, przechodz\u0119 do <code>rx-mikrosekund<\/code> z powrotem w d\u00f3\u0142. W przypadku pami\u0119ci masowej wol\u0119 skalowa\u0107 w g\u00f3r\u0119 za pomoc\u0105 klatek, aby oszcz\u0119dza\u0107 przerwania.<\/p>\n\n<h2>RSS w \u015brodowiskach 10 Gb\/s<\/h2>\n\n<p>Na kartach sieciowych 10G zazwyczaj pracuj\u0119 z pr\u0119dko\u015bci\u0105 od 8 do 16 <strong>Wskaz\u00f3wki<\/strong> na port, o ile procesor udost\u0119pnia wystarczaj\u0105c\u0105 liczb\u0119 rdzeni. Dzi\u0119ki temu serwery WWW, bramy pami\u0119ci masowej i hosty wirtualizacji skaluj\u0105 si\u0119 p\u0142ynnie przy wielu po\u0142\u0105czeniach r\u00f3wnoleg\u0142ych. Przypisuj\u0119 g\u0142\u00f3wne kolejki do wolnych rdzeni, a nast\u0119pnie mierz\u0119 liczb\u0119 pakiet\u00f3w na sekund\u0119 (PPS), op\u00f3\u017anienie oraz liczb\u0119 retransmisji. Je\u015bli wyst\u0119puj\u0105 utraty pakiet\u00f3w, sprawdzam koalescencj\u0119, hash oraz wykorzystanie poszczeg\u00f3lnych kolejek. Nast\u0119pnie dostosowuj\u0119 <strong>Affinit\u00e4t<\/strong>, a\u017c obci\u0105\u017cenie b\u0119dzie wygl\u0105da\u0142o na r\u00f3wnomierne.<\/p>\n\n<h2>RSS w konfiguracjach 25 Gbit oraz Multi-25G<\/h2>\n\n<p>Przy pr\u0119dko\u015bci 25 Gbit\/s wzrastaj\u0105 warto\u015bci PPS i obci\u0105\u017cenie magistrali, dlatego <strong>NUMA<\/strong>- zwracam wi\u0119ksz\u0105 uwag\u0119 na \u015bwiadomo\u015b\u0107, wystarczaj\u0105c\u0105 liczb\u0119 kolejek i mechanizm\u00f3w odci\u0105\u017cania. Funkcje Large Receive Offload (LRO) lub RSC mog\u0105 zmniejszy\u0107 obci\u0105\u017cenie stosu pakietami, o ile aplikacje to toleruj\u0105. Ponadto sprawdzam linie PCIe, aby wykluczy\u0107 w\u0105skie gard\u0142a poza sieci\u0105. W hostach z wieloma \u0142\u0105czami 25G \u015bci\u015ble rozdzielam kolejki i powinowactwo w zale\u017cno\u015bci od zada\u0144 i w\u0119z\u0142\u00f3w. W ten spos\u00f3b wykorzystuj\u0119 <strong>Szeroko\u015b\u0107 pasma<\/strong> oraz j\u0105dra w spos\u00f3b wydajny, bez powodowania ruchu mi\u0119dzyw\u0119z\u0142owego.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linuxnetztuning_7234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Szczeg\u00f3\u0142y dotycz\u0105ce sprz\u0119tu i sterownik\u00f3w: na co zwracam uwag\u0119<\/h2>\n\n<p>Nie ka\u017cda karta sieciowa dzia\u0142a tak samo. Generacje procesor\u00f3w Intel (np. ixgbe, i40e, ice) oferuj\u0105 funkcje takie jak Flow Director\/ATR, kt\u00f3re w spos\u00f3b ukierunkowany przypisuj\u0105 strumienie do kolejek \u2013 jest to pomocne, gdy chc\u0119 wyr\u00f3wna\u0107 obci\u0105\u017cenia w newralgicznych punktach. Karta Mellanox mlx5 mo\u017ce obs\u0142ugiwa\u0107 aRFS na poziomie sprz\u0119towym, co zmniejsza obci\u0105\u017cenie procesora, gdy stos obs\u0142uguje wiele gniazd. W zale\u017cno\u015bci od sytuacji decyduj\u0119, czy w\u0142\u0105czy\u0107 te funkcje, i sprawdzam, czy poprawiaj\u0105 one rozk\u0142ad obci\u0105\u017cenia. W systemach routingu\/NAT cz\u0119sto wy\u0142\u0105czam LRO i stosuj\u0119 GRO, aby zachowa\u0107 sp\u00f3jno\u015b\u0107 nag\u0142\u00f3wk\u00f3w; w przypadku czysto serwerowych obci\u0105\u017ce\u0144 LRO\/GRO mo\u017ce pom\u00f3c w z\u0142agodzeniu presji PPS. Wa\u017cne s\u0105 r\u00f3wnie\u017c wystarczaj\u0105ca liczba wektor\u00f3w MSI-X na ka\u017cd\u0105 kolejk\u0119 oraz prawid\u0142owe wersje oprogramowania uk\u0142adowego.<\/p>\n\n<h2>RSS w wirtualizacji i kontenerach<\/h2>\n\n<p>W hiperwizorze \u0142\u0105cz\u0119 fizyczne <strong>RSS<\/strong>-Kolejki z kartami sieciowymi vNIC obs\u0142uguj\u0105cymi wiele kolejek, np. virtio-net, aby go\u015bcie nie napotykali sztucznych w\u0105skich garde\u0142. Zwracam uwag\u0119 na przypisanie procesor\u00f3w (CPU-Pinning) maszyn wirtualnych i ustalam ich blisko\u015b\u0107 vCPU-NUMA wzgl\u0119dem fizycznej karty sieciowej. Dzi\u0119ki temu dane pozostaj\u0105 lokalnie, a host ponosi mniejsze koszty zwi\u0105zane z dost\u0119pem do pami\u0119ci. W przypadku kontener\u00f3w przypisuj\u0119 krytyczne pody do odpowiednich rdzeni i utrzymuj\u0119 kolejki hosta wolne od obci\u0105\u017cenia zak\u0142\u00f3caj\u0105cego. Taki porz\u0105dek zwi\u0119ksza <strong>Wydajno\u015b\u0107<\/strong> w przypadku mikrous\u0142ug, gdzie powstaje wiele ma\u0142ych przep\u0142yw\u00f3w.<\/p>\n\n<h2>Jak prawid\u0142owo korzysta\u0107 z SR-IOV i VF-RSS<\/h2>\n\n<p>Dzi\u0119ki SR-IOV przypisuj\u0119 maszynom wirtualnym w\u0142asne VF, kt\u00f3re z kolei mog\u0105 udost\u0119pnia\u0107 wiele kolejek i RSS. Planuj\u0119 wystarczaj\u0105c\u0105 liczb\u0119 VF na ka\u017cdy port, zwracam uwag\u0119 na pojemno\u015b\u0107 MSI-X i przypisuj\u0119 sygna\u0142y IRQ VF w maszynie wirtualnej odpowiednio do jej procesor\u00f3w vCPU. W systemach-go\u015bciach opartych na Linuksie wyra\u017anie w\u0142\u0105czam obs\u0142ug\u0119 wielu kolejek, w przeciwnym razie karta vNIC cz\u0119sto pozostaje jednostopniowa:<\/p>\n<pre><code># w trybie go\u015bcia (przyk\u0142ad virtio-net)\nethtool -l eth0\nethtool -L eth0 combined 4\n<\/code><\/pre>\n<p>Serwery z wieloma partycjami wirtualnymi (VF) rozdzielam \u015bci\u015ble wed\u0142ug w\u0119z\u0142\u00f3w NUMA i obci\u0105\u017ce\u0144, aby maszyny wirtualne nie zak\u0142\u00f3ca\u0142y sobie nawzajem pracy w tych samych fizycznych \u015bcie\u017ckach odbiorczych (RX).<\/p>\n\n<h2>Monitorowanie i rozwi\u0105zywanie problem\u00f3w<\/h2>\n\n<p>Monitoruj\u0119 obci\u0105\u017cenie na <strong>Kolejka<\/strong>, poszczeg\u00f3lne j\u0105dra, utrat\u0119 pakiet\u00f3w i retransmisje, aby wcze\u015bnie wykry\u0107 nieprawid\u0142owo\u015bci. Je\u015bli jedno j\u0105dro si\u0119 wyr\u00f3\u017cnia, a pozosta\u0142e pozostaj\u0105 wolne, cz\u0119sto oznacza to, \u017ce nie jest prawid\u0142owa warto\u015b\u0107 powinowactwa lub liczba kolejek. W takich przypadkach sprawdzam kolejno pola hash, maski IRQ i warto\u015bci koalescencji. Ponadto sprawdzam <a href=\"https:\/\/webhosting.de\/pl\/softirq-cpu-hosting-optymalizacja-przepustowosci-sieci-centrum-danych\/\">Obci\u0105\u017cenie SoftIRQ<\/a>, poniewa\u017c dostarcza ona wskaz\u00f3wek dotycz\u0105cych efekt\u00f3w wypierania. Dopiero gdy sygna\u0142y te wydaj\u0105 si\u0119 stabilne, zwi\u0119kszam ruch lub rozszerzam <strong>Wskaz\u00f3wki<\/strong> kontynuowa\u0107.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/servernetzwerk-optimierung-4721.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>RPS, RFS i XPS: rozszerzenia oprogramowania do RSS<\/h2>\n\n<p>Je\u015bli karta sieciowa ma tylko kilka kolejek lub korzystam z funkcji \u0142\u0105czenia kart sieciowych (bonding) lub tunelowania, uzupe\u0142niam RSS o <strong>RPS<\/strong> (kierowanie odbiorem pakiet\u00f3w) oraz <strong>RFS<\/strong> (Receive Flow Steering). RPS rozdziela sygna\u0142y SoftIRQ mi\u0119dzy rdzenie, a RFS przypisuje strumienie do rdzenia, na kt\u00f3rym aktywny jest odpowiedni gniazdo. Aktywuj\u0119 obie te funkcje w spos\u00f3b ukierunkowany:<\/p>\n<pre><code># Zwi\u0119kszenie globalnej liczby wpis\u00f3w przep\u0142ywu (RFS)\necho 32768 &gt; \/proc\/sys\/net\/core\/rps_sock_flow_entries\n\n# Ustawienie liczby procesor\u00f3w dla RPS na ka\u017cd\u0105 kolejk\u0119 odbiorcz\u0105 (przyk\u0142adowa maska, dostosowa\u0107!)\nfor f in \/sys\/class\/net\/eth0\/queues\/rx-*\/rps_cpus; do echo ffff &gt; \"$f\"; done\n\nUstawienie tabeli przep\u0142yw\u00f3w dla kolejki odbiorczej # Pro w systemie RFS\nfor f in \/sys\/class\/net\/eth0\/queues\/rx-*\/rps_flow_cnt; do echo 4096 &gt; \"$f\"; done\n<\/code><\/pre>\n<p>Po stronie TX korzystam z <strong>XPS<\/strong> (Transmit Packet Steering), aby pakiety wychodz\u0105ce by\u0142y wysy\u0142ane z tego rdzenia, kt\u00f3ry je wygenerowa\u0142:<\/p>\n<pre><code>for f in \/sys\/class\/net\/eth0\/queues\/tx-*\/xps_cpus; do echo ffff &gt; \"$f\"; done\n<\/code><\/pre>\n<p>RPS\/RFS\/XPS zu\u017cywaj\u0105 nieco mocy procesora, ale s\u0105 pomocne, gdy brakuje mi kolejek po stronie sprz\u0119towej lub gdy chc\u0119 \u015bci\u015ble przestrzega\u0107 lokalizacji gniazd.<\/p>\n\n<h2>Wydajno\u015b\u0107 w trybie Single-Flow, GRO\/TSO i Busy-Polling<\/h2>\n\n<p>Pojedynczy strumie\u0144 pozostaje powi\u0105zany z jednym rdzeniem z wa\u017cnego powodu. Je\u015bli chc\u0119 zwi\u0119kszy\u0107 przepustowo\u015b\u0107 pojedynczego strumienia, stawiam na odci\u0105\u017canie (GRO\/TSO), wysok\u0105 cz\u0119stotliwo\u015b\u0107 rdzenia i odpowiednie scalanie. W przypadku \u015bcie\u017cek, w kt\u00f3rych op\u00f3\u017anienie ma kluczowe znaczenie, mo\u017cna <strong>Zaj\u0119te odpytywanie<\/strong> pom\u00f3c:<\/p>\n<pre><code>Ustawi\u0107 nisk\u0105 warto\u015b\u0107 # i dokona\u0107 pomiaru\nsysctl -w net.core.busy_read=25\nsysctl -w net.core.busy_poll=25\n<\/code><\/pre>\n<p>Metoda \u201ebusy-polling\u201d ogranicza zmiany kontekstu, ale zajmuje czas procesora. W\u0142\u0105czam j\u0105 tylko tam, gdzie licz\u0105 si\u0119 op\u00f3\u017anienia p99, i zawsze sprawdzam jej wp\u0142yw na og\u00f3lne obci\u0105\u017cenie oraz op\u00f3\u017anienie ogonowe. Zazwyczaj wy\u0142\u0105czam GRO na serwerach, a LRO stosuj\u0119 w zale\u017cno\u015bci od roli; w przypadku urz\u0105dze\u0144 po\u015brednicz\u0105cych zachowuj\u0119 ostro\u017cno\u015b\u0107, aby nie zak\u0142\u00f3ca\u0107 przetwarzania nag\u0142\u00f3wk\u00f3w i sp\u00f3jno\u015bci skr\u00f3t\u00f3w.<\/p>\n\n<h2>Zalecenia i przyk\u0142ady: kolejki, powinowactwo, polecenia<\/h2>\n\n<p>Jako punkt wyj\u015bcia wybieram liczb\u0119 kolejek, kt\u00f3ra odpowiada <strong>CPU<\/strong> dopasuj, a nast\u0119pnie obserwuj obci\u0105\u017cenie w poszczeg\u00f3lnych kolejkach i dostosowuj je stopniowo. W przypadku 10G cz\u0119sto wystarcza 8\u201316 kolejek, przy 25G cz\u0119sto ustalam wy\u017csz\u0105 liczb\u0119, o ile dost\u0119pne s\u0105 odpowiednie j\u0105dra. W przypadku powinowactwa stosuj\u0119 przejrzyste maski dla poszczeg\u00f3lnych IRQ, aby p\u00f3\u017aniej \u0142atwiej analizowa\u0107 \u015bcie\u017cki. Poni\u017csza tabela zawiera zwi\u0119z\u0142e warto\u015bci orientacyjne, kt\u00f3re nast\u0119pnie weryfikuj\u0119 poprzez pomiary. Dopiero wyniki pomiar\u00f3w decyduj\u0105 o tym, czy <strong>wi\u0119cej<\/strong> zwi\u0119kszy\u0107 lub zmniejszy\u0107.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Pr\u0119dko\u015b\u0107 \u0142\u0105cza<\/th>\n      <th>Typowe kolejki RX<\/th>\n      <th>Przyk\u0142adowe polecenia<\/th>\n      <th>Uwagi<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>10 Gbit\/s<\/td>\n      <td>8-16<\/td>\n      <td><code>ethtool -l eth0<\/code> | <code>ethtool -L eth0 rx 16<\/code><\/td>\n      <td><strong>Koalescencja<\/strong> utrzymywa\u0107 na umiarkowanym poziomie, sprawdzi\u0107 op\u00f3\u017anienie L7<\/td>\n    <\/tr>\n    <tr>\n      <td>25 Gbit\/s<\/td>\n      <td>16\u201332+<\/td>\n      <td><code>grep . \/proc\/interrupts<\/code> | Maski IRQ za pomoc\u0105 <code>echo<\/code><\/td>\n      <td><strong>NUMA<\/strong> nale\u017cy zwr\u00f3ci\u0107 uwag\u0119, sprawdzi\u0107 linie PCIe<\/td>\n    <\/tr>\n    <tr>\n      <td>Multi-25G<\/td>\n      <td>Osobno za ka\u017cd\u0105 porcj\u0119<\/td>\n      <td>W\u0142\u0105cz funkcj\u0119 vNIC Multi-Queue (np. virtio)<\/td>\n      <td>Kole na rdzenie i <strong>Obci\u0105\u017cenia<\/strong> podzia\u0142<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<p>Te warto\u015bci orientacyjne stanowi\u0105 jedynie punkt wyj\u015bcia, a nie cel, poniewa\u017c obci\u0105\u017cenia znacznie si\u0119 od siebie r\u00f3\u017cni\u0105. Rejestruj\u0119 zmiany, dokonuj\u0119 pomiar\u00f3w przed i po dostosowaniu, a poza tym nie wprowadzam \u017cadnych zmian w \u015brodowisku. Gdy tylko system zachowa stabilno\u015b\u0107 pod obci\u0105\u017ceniem produkcyjnym, zamra\u017cam konfiguracj\u0119. P\u00f3\u017aniej ponawiam pomiary po aktualizacjach j\u0105dra lub sterownik\u00f3w. W ten spos\u00f3b trzymam si\u0119 <strong>RSS<\/strong> precyzyjne dzia\u0142anie i pewne, powtarzalne wyniki.<\/p>\n\n<h2>Typowe przeszkody i sposoby ich pokonywania<\/h2>\n\n<p>Zbyt ma\u0142o <strong>Wskaz\u00f3wki<\/strong> Prze\u0142adowuj\u0105 poszczeg\u00f3lne rdzenie, a zbyt du\u017ca ich liczba zwi\u0119ksza nak\u0142ad administracyjny i obni\u017ca wsp\u00f3\u0142czynnik trafie\u0144 w pami\u0119ci podr\u0119cznej. Niew\u0142a\u015bciwa afinno\u015b\u0107 powoduje przekierowywanie przerw do rdzeni, kt\u00f3re s\u0105 ju\u017c obci\u0105\u017cone, lub do niew\u0142a\u015bciwych w\u0119z\u0142\u00f3w NUMA. R\u00f3wnie\u017c nieodpowiedni hash prowadzi do tego, \u017ce dominuj\u0105ce przep\u0142ywy zatykaj\u0105 kolejki. Rozwi\u0105zuj\u0119 to krok po kroku: dostosowuj\u0119 liczb\u0119 kolejek, koryguj\u0119 przynale\u017cno\u015b\u0107, rozszerzam pola haszuj\u0105ce, precyzyjnie dostrajam koalescencj\u0119. Ka\u017cd\u0105 zmian\u0119 dokumentuj\u0119 za pomoc\u0105 <strong>Metryki<\/strong>, zanim przejd\u0119 do nast\u0119pnej d\u017awigni.<\/p>\n\n<h2>Scenariusze oparte na praktyce<\/h2>\n\n<p>Serwer pami\u0119ci masowej z \u0142\u0105czem 10G szybko czerpie korzy\u015bci z 8\u201312 <strong>Wskaz\u00f3wki<\/strong> oraz umiarkowanym koalescowaniem, aby zapewni\u0107 p\u0142ynn\u0105 realizacj\u0119 transfer\u00f3w masowych. Serwer API obs\u0142uguj\u0105cy du\u017c\u0105 liczb\u0119 po\u0142\u0105cze\u0144 cz\u0119sto wymaga bardziej precyzyjnych p\u00f3l hashowych i mniejszych op\u00f3\u017anie\u0144 przy przerwaniach. Hosty wirtualizacyjne zyskuj\u0105 znacznie, gdy funkcja vNIC Multi-Queue jest aktywna po stronie go\u015bcia i pasuje do uk\u0142adu hosta. Obci\u0105\u017cenia kontenerowe dzia\u0142aj\u0105 p\u0142ynniej, gdy krytyczne pody dzia\u0142aj\u0105 blisko karty sieciowej i pami\u0119ci NUMA. W zale\u017cno\u015bci od sytuacji rozszerzam te wzorce, stosuj\u0105c <strong>PPS<\/strong>, por\u00f3wnaj retransmisje i rozdzielanie kolejek.<\/p>\n\n<h2>Wydajne platformy jako atut<\/h2>\n\n<p>Konfiguracje hostingowe z konsekwentnie skonfigurowanym <strong>RSS<\/strong>, karty sieciowe z obs\u0142ug\u0105 wielu kolejek oraz prawid\u0142owo skonfigurowana afinno\u015b\u0107 zapewniaj\u0105 odczuwalne rezerwy wydajno\u015bci w okresach szczytowego obci\u0105\u017cenia. Osoby oceniaj\u0105ce oferty serwerowe powinny celowo pyta\u0107 o obs\u0142ug\u0119 wielu kolejek, przypisanie NUMA oraz monitorowanie. Dostawca, kt\u00f3ry w widoczny spos\u00f3b wdra\u017ca te rozwi\u0105zania, cz\u0119sto osi\u0105ga zauwa\u017calnie lepsze krzywe przepustowo\u015bci. Je\u015bli chodzi o wydajne rozwi\u0105zania serwerowe i hostingowe, zdecydowanie polecam tutaj webhoster.de. Takie podej\u015bcie op\u0142aca si\u0119 w <strong>Wydajno\u015b\u0107<\/strong> oraz stabilno\u015b\u0107, zw\u0142aszcza przy du\u017cej liczbie r\u00f3wnoleg\u0142ych przep\u0142yw\u00f3w.<\/p>\n\n<h2>Podsumowanie dla praktyki<\/h2>\n\n<p>Aktywuj\u0119 <strong>Odbi\u00f3r<\/strong> Skalowanie boczne: ustal rozs\u0105dn\u0105 liczb\u0119 kolejek, przypisz sygna\u0142y IRQ do odpowiednich rdzeni i sprawd\u017a konfiguracj\u0119 funkcji hash. Nast\u0119pnie optymalizuj\u0119 koalescencj\u0119 pod k\u0105tem op\u00f3\u017anienia, zwracam uwag\u0119 na blisko\u015b\u0107 w architekturze NUMA i sp\u00f3jnie rozdzielam obci\u0105\u017cenia. W wirtualizacji stosuj\u0119 obs\u0142ug\u0119 wielu kolejek a\u017c do poziomu system\u00f3w-go\u015bci oraz synchronizuj\u0119 pinning i powinowactwo. Pomiary dotycz\u0105ce PPS, obci\u0105\u017cenia kolejek, retransmisji i op\u00f3\u017anie\u0144 decyduj\u0105 o kolejnym kroku. Kto post\u0119puje w ten spos\u00f3b, w pe\u0142ni wykorzystuje przepustowo\u015b\u0107 10G i 25G oraz utrzymuje <strong>Op\u00f3\u017anienie<\/strong> w ramach tego i niezawodnie osi\u0105ga zysk z sieci.<\/p>","protected":false},"excerpt":{"rendered":"<p>Funkcja Receive Side Scaling (RSS) optymalizuje dzia\u0142anie sieci 10G i 25G poprzez rozdzielanie pakiet\u00f3w mi\u0119dzy wiele rdzeni procesora. Dowiedz si\u0119, jak skonfigurowa\u0107 RSS na serwerze z systemem Linux, aby uzyska\u0107 maksymaln\u0105 wydajno\u015b\u0107 swojej konfiguracji. Temat: Receive Side Scaling w \u015brodowiskach o du\u017cej pr\u0119dko\u015bci.<\/p>","protected":false},"author":1,"featured_media":21050,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-21057","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server_vm"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"153","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"receive side scaling","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"21050","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/21057","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/comments?post=21057"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/21057\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/21050"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=21057"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=21057"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=21057"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}