{"id":19745,"date":"2026-06-06T15:03:33","date_gmt":"2026-06-06T13:03:33","guid":{"rendered":"https:\/\/webhosting.de\/server-irq-affinity-multicore-netzwerkoptimierung-performance\/"},"modified":"2026-06-06T15:03:33","modified_gmt":"2026-06-06T13:03:33","slug":"serwer-irq-affinity-wielordzeniowy-optymalizacja-sieci-wydajnosc","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/server-irq-affinity-multicore-netzwerkoptimierung-performance\/","title":{"rendered":"Server IRQ Affinity i wielordzeniowa optymalizacja sieci dla maksymalnej wydajno\u015bci"},"content":{"rendered":"<p>Optymalizuj\u0119 \u015bcie\u017cki sieciowe serwera poprzez <strong>Przynale\u017cno\u015b\u0107 IRQ<\/strong> i mapuj\u0105 kolejki RX\/TX na rdzenie, aby kontrolowa\u0107 op\u00f3\u017anienia, przepustowo\u015b\u0107 i jitter p99. Ci, kt\u00f3rzy u\u017cywaj\u0105 procesor\u00f3w wielordzeniowych, konsekwentnie organizuj\u0105 przerwania, SoftIRQ, NAPI i NUMA w taki spos\u00f3b, \u017ce przep\u0142ywy pozostaj\u0105 niezale\u017cne od rdzeni, prze\u0142\u0105czanie kontekstu jest ograniczone, a aplikacja reaguje znacznie szybciej.<\/p>\n\n<h2>Punkty centralne<\/h2>\n<ul>\n  <li><strong>Dystrybucja IRQ<\/strong> okre\u015bla, kt\u00f3re rdzenie obs\u0142uguj\u0105 przerwania sprz\u0119towe i zapobiega hotspotom.<\/li>\n  <li><strong>Blisko\u015b\u0107 NUMA<\/strong> zmniejsza zdalny dost\u0119p i obni\u017ca szczyty op\u00f3\u017anie\u0144.<\/li>\n  <li><strong>SoftIRQ i NAPI<\/strong> kontrolowa\u0107 przetwarzanie wsadowe i zmniejsza\u0107 obci\u0105\u017cenie rdzeni.<\/li>\n  <li><strong>RPS\/RFS<\/strong> utrzymuje przep\u0142ywy blisko w\u0105tk\u00f3w konsumuj\u0105cych.<\/li>\n  <li><strong>Pomiar i przypinanie<\/strong> sprawia, \u017ce wydajno\u015b\u0107 jest bardziej deterministyczna.<\/li>\n<\/ul>\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\/06\/serverraum-optimierung-4761.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Dlaczego powinowactwo IRQ ma znaczenie w dzia\u0142aniu serwera?<\/h2>\n\n<p>Wysokie szybko\u015bci pakiet\u00f3w szybko obci\u0105\u017caj\u0105 poszczeg\u00f3lne rdzenie, je\u015bli wszystkie przerwania trafiaj\u0105 na kilka procesor\u00f3w, wi\u0119c rozk\u0142adam obci\u0105\u017cenie selektywnie, aby <strong>Hotspoty<\/strong> aby tego unikn\u0105\u0107. Przypisuj\u0119 kolejki RX\/TX do odpowiednich rdzeni, aby \u015bcie\u017cki danych by\u0142y kr\u00f3tkie, a pami\u0119ci podr\u0119czne ciep\u0142e. Zmniejsza to op\u00f3\u017anienia p95\/p99, poniewa\u017c unikam niepotrzebnych migracji i utrzymuj\u0119 etapy przetwarzania na tych samych rdzeniach. Bior\u0119 pod uwag\u0119 fizyczn\u0105 blisko\u015b\u0107 NIC, kana\u0142\u00f3w pami\u0119ci i gniazd CPU, aby \u015bcie\u017cka od pakietu do pracownika aplikacji pozostawa\u0142a niezmiennie szybka. To pokrewie\u0144stwo rdzeni zapewnia wymiern\u0105 stabilno\u015b\u0107 podczas szczyt\u00f3w ruchu bez konieczno\u015bci natychmiastowej aktualizacji sprz\u0119tu.<\/p>\n\n<h2>R\u00f3wnowa\u017cenie IRQ a sta\u0142e powinowactwo<\/h2>\n\n<p>Standardowa us\u0142uga <strong>irqbalance<\/strong> automatycznie dystrybuuje przerwania, ale nie zna logiki mojej aplikacji, cel\u00f3w NUMA i bud\u017cet\u00f3w op\u00f3\u017anie\u0144. Wi\u0105\u017c\u0119 krytyczne sieciowe IRQ z wybranymi rdzeniami, podczas gdy ha\u0142a\u015bliwe lub mniej wa\u017cne przerwania s\u0105 przenoszone do innych rdzeni. To powi\u0105zanie harmonizuje z przypinaniem proces\u00f3w aplikacji, dzi\u0119ki czemu potok na przep\u0142yw pozostaje sp\u00f3jny. Przy du\u017cym nat\u0119\u017ceniu ruchu unikam redystrybucji, kt\u00f3re generuj\u0105 dodatkowy narzut i os\u0142abiaj\u0105 efekt pami\u0119ci podr\u0119cznej. Je\u015bli chcesz zag\u0142\u0119bi\u0107 si\u0119 w temat, mo\u017cesz znale\u017a\u0107 praktyczne informacje w tym przewodniku: <a href=\"https:\/\/webhosting.de\/pl\/rownowazenie-irq-serwera-optymalizacja-wydajnosci-sieci-centrum-danych\/\">R\u00f3wnowa\u017cenie IRQ w centrum danych<\/a>.<\/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\/06\/netzwerkoptimierung_meeting_4827.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Pokrewie\u0144stwo procesor\u00f3w, NUMA i kr\u00f3tka \u015bcie\u017cka danych<\/h2>\n\n<p>Preferuj\u0119 przypinanie pracownik\u00f3w aplikacji i sieciowych IRQ do tego samego <strong>NUMA<\/strong>-aby dost\u0119p do pami\u0119ci pozosta\u0142 lokalny. Je\u015bli karta NIC zawiesza si\u0119 na w\u0119\u017ale 0, ustawiam tam r\u00f3wnie\u017c powi\u0105zane kolejki RX i wi\u0105\u017c\u0119 odpowiednie procesy z tymi rdzeniami. W ten spos\u00f3b unikam kosztownych zdalnych dost\u0119p\u00f3w do pami\u0119ci, kt\u00f3re maj\u0105 du\u017cy wp\u0142yw na op\u00f3\u017anienia przy wysokich pr\u0119dko\u015bciach pakiet\u00f3w. Uwzgl\u0119dniam r\u00f3wnie\u017c pary hiperw\u0105tkowo\u015bci, aby siostrzane w\u0105tki nie kolidowa\u0142y ze sob\u0105. Ten tr\u00f3jk\u0105t przypinania proces\u00f3w, powinowactwa IRQ i topologii NUMA sprawia, \u017ce \u015bcie\u017cki sieciowe s\u0105 bardziej przewidywalne i zwi\u0119kszaj\u0105 przepustowo\u015b\u0107.<\/p>\n\n<h2>Zrozumienie SoftIRQs, NAPI i projektowania kolejek<\/h2>\n\n<p>Po przerwaniu sprz\u0119towym, j\u0105dro przejmuje przetwarzanie w <strong>SoftIRQs<\/strong>, cz\u0119sto na tym samym rdzeniu, kt\u00f3ry otrzyma\u0142 IRQ. Gdy obci\u0105\u017cenie jest wysokie, \u015bwiadomie rozk\u0142adam obci\u0105\u017cenie SoftIRQ, aby z\u0142agodzi\u0107 w\u0105skie gard\u0142a bez niepotrzebnej fragmentacji \u015bcie\u017cki danych. Karty sieciowe z wieloma kolejkami pomagaj\u0105, poniewa\u017c mog\u0119 przypisa\u0107 jasno zdefiniowane rdzenie do ka\u017cdej kolejki, a tym samym osi\u0105gn\u0105\u0107 prawdziw\u0105 r\u00f3wnoleg\u0142o\u015b\u0107. U\u017cywam NAPI do przetwarzania pakiet\u00f3w w partiach, dzi\u0119ki czemu nie wyst\u0119puj\u0105 burze przerwa\u0144, a czas procesora jest efektywnie wykorzystywany. Ten artyku\u0142 zawiera podstawow\u0105 wiedz\u0119 na temat tej \u015bcie\u017cki: <a href=\"https:\/\/webhosting.de\/pl\/softirq-cpu-hosting-optymalizacja-przepustowosci-sieci-centrum-danych\/\">SoftIRQ i przepustowo\u015b\u0107 sieci<\/a>.<\/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\/06\/maxperformance-network-optimization-6742.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>RPS\/RFS i lokalno\u015b\u0107 przep\u0142ywu<\/h2>\n\n<p>U\u017cywam RPS do szerszej dystrybucji pakiet\u00f3w i u\u017cywam <strong>RFS<\/strong> dzi\u0119ki czemu przep\u0142ywy trafiaj\u0105 do zu\u017cywaj\u0105cych w\u0105tk\u00f3w. Dzi\u0119ki temu dost\u0119p do pami\u0119ci podr\u0119cznej jest wydajny, a aplikacja korzysta ze sta\u0142ych czas\u00f3w odpowiedzi. Harmonizuj\u0119 strategi\u0119 hashowania karty sieciowej, liczb\u0119 kolejek i zestawy procesor\u00f3w RPS, aby \u017cadna kolejka j\u0105dra nie zosta\u0142a przepe\u0142niona. Pokrewie\u0144stwo przep\u0142yw\u00f3w jest szczeg\u00f3lnie skuteczne w przypadku wielu kr\u00f3tkich \u017c\u0105da\u0144, takich jak te generowane przez interfejsy API i mikrous\u0142ugi. W ten spos\u00f3b buduj\u0119 potok, w kt\u00f3rym ka\u017cdy przep\u0142yw dotyka tego samego rdzenia tak cz\u0119sto, jak to mo\u017cliwe, i unikam niepotrzebnych migracji.<\/p>\n\n<h2>RSS, tablica po\u015brednicz\u0105ca i XPS: ukierunkowana kontrola haszowania<\/h2>\n\n<p>Aby upewni\u0107 si\u0119, \u017ce dystrybucja rozpoczyna si\u0119 czysto w NIC, dostosowuj\u0119 <strong>RSS<\/strong> (Receive Side Scaling) i tabel\u0119 przekierowa\u0144, aby kolejki RX by\u0142y przypisane dok\u0142adnie do rdzeni, kt\u00f3re p\u00f3\u017aniej b\u0119d\u0105 obs\u0142ugiwa\u0107 w\u0105tki aplikacji. Upewniam si\u0119, \u017ce liczba kolejek odpowiada liczbie u\u017cywanych rdzeni i \u017ce klucze hash pozostaj\u0105 stabilne, aby przep\u0142ywy nie w\u0119drowa\u0142y nieoczekiwanie. Je\u015bli algorytm hashowania ulegnie zmianie lub tabela przekierowa\u0144 zostanie dynamicznie nadpisana, spowoduje to utrat\u0119 lokalno\u015bci przep\u0142ywu i przyczyni si\u0119 do pomini\u0119\u0107 pami\u0119ci podr\u0119cznej.<\/p>\n\n<p>Na \u015bcie\u017cce TX dodatkowo aktywuj\u0119 <strong>XPS<\/strong> (Transmit Packet Steering), aby pakiety wychodz\u0105ce by\u0142y wysy\u0142ane przez rdze\u0144, kt\u00f3ry przetwarza aplikacj\u0119. Utrzymuje to r\u00f3wnie\u017c pami\u0119\u0107 podr\u0119czn\u0105 TX blisko pracownika, a \u015bcie\u017cka od kolejki gniazda do kolejki NIC pozostaje kr\u00f3tka. Utrzymuj\u0119 sp\u00f3jne mapowania RX i TX, dokumentuj\u0119 je dla ka\u017cdego interfejsu i definiuj\u0119 je w skryptach startowych, aby ponowne uruchomienie nie rozmy\u0142o architektury.<\/p>\n\n<h2>Koalescencja przerwa\u0144: por\u00f3wnanie op\u00f3\u017anie\u0144 i przepustowo\u015bci<\/h2>\n\n<p>Z <strong>Koalescencja<\/strong> Podsumowuj\u0119 przerwania, aby zmniejszy\u0107 narzut, ale zwracam uwag\u0119 na limity op\u00f3\u017anie\u0144 mojej aplikacji. W przypadku przesy\u0142ania strumieniowego i VoIP zwykle utrzymuj\u0119 kr\u00f3tkie interwa\u0142y, podczas gdy transfery masowe dobrze toleruj\u0105 d\u0142u\u017csze partie. Testuj\u0119 krok po kroku, mierz\u0119 p95\/p99 i sprawdzam spadki, retransmisje i wykorzystanie procesora na rdze\u0144. Dopiero wtedy zapisuj\u0119 ustawienia i dokumentuj\u0119 je dla ka\u017cdego hosta i karty sieciowej. Ten praktyczny artyku\u0142 zapewnia g\u0142\u0119bszy wgl\u0105d w ten kompromis: <a href=\"https:\/\/webhosting.de\/pl\/koalescencja-przerwan-optymalizacja-sieci-serverflux\/\">Wyja\u015bnienie koalescencji przerwa\u0144<\/a>.<\/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\/06\/tech_office_multi_core_optimierung_4729.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Prawid\u0142owe dozowanie \u0142adunk\u00f3w odci\u0105\u017caj\u0105cych i agregacja<\/h2>\n\n<p>Ustawi\u0142em <strong>GRO\/LRO<\/strong> aby zmniejszy\u0107 obci\u0105\u017cenie procesora, ale sprawd\u017a, czy moje obci\u0105\u017cenia korzystaj\u0105 z wi\u0119kszych partii. Interfejsy API wra\u017cliwe na op\u00f3\u017anienia cz\u0119sto reaguj\u0105 lepiej, gdy GRO jest umiarkowane, a LRO wy\u0142\u0105czone, poniewa\u017c du\u017ce super pakiety mog\u0105 nasila\u0107 efekty blokowania head-of-line. W przypadku transfer\u00f3w masowych, replikacji lub kopii zapasowych, u\u017cywam GRO\/GSO\/TSO bardziej agresywnie, o ile strona odbiorcy pozostaje stabilna, a wykorzystanie procesora spada.<\/p>\n\n<p><strong>Odci\u0105\u017canie sumy kontrolnej<\/strong> oraz <strong>OSP\/GSO<\/strong> Znacznie zmniejszam obci\u0105\u017cenie CPU, ale upewniam si\u0119, \u017ce skrzynki po\u015brednicz\u0105ce, tunele lub niezgodno\u015bci odci\u0105\u017cania (np. z niekt\u00f3rymi enkapsulacjami) dzia\u0142aj\u0105 poprawnie. Je\u015bli wyst\u0105pi\u0105 anomalie, stopniowo zmniejszam poszczeg\u00f3lne obci\u0105\u017cenia i mierz\u0119 wp\u0142yw na przepustowo\u015b\u0107, retransmisje i czas procesora. Celem jest zestaw, kt\u00f3ry pozostaje stabilny we wszystkich obszarach i przewidywalny w godzinach szczytu.<\/p>\n\n<h2>Izolacja procesora, harmonogram i stany energetyczne<\/h2>\n\n<p>W przypadku twardych bud\u017cet\u00f3w op\u00f3\u017anie\u0144 izoluj\u0119 rdzenie dla \u015bcie\u017cek sieciowych i pracownik\u00f3w aplikacji. Z <strong>Izolacja procesora<\/strong> i strategii lean housekeeping, zapobiegam przedostawaniu si\u0119 zada\u0144 systemowych, w\u0105tk\u00f3w Kthreads lub przerwa\u0144 timera na \u201egor\u0105ce\u201c rdzenie. Naprawiam r\u00f3wnie\u017c <strong>CPU Governor<\/strong> do \u201ewydajno\u015bci\u201c i ograniczy\u0107 g\u0142\u0119bokie <strong>Stany C<\/strong>, je\u015bli powoduje to op\u00f3\u017anienia w wybudzaniu. Mam oko na temperatury rdzenia, poniewa\u017c gnicie termiczne mo\u017ce zrujnowa\u0107 wszelkie wyko\u0144czenia.<\/p>\n\n<p>Wyb\u00f3r <strong>Planowanie zaj\u0119\u0107<\/strong> wp\u0142ywa na przewidywalno\u015b\u0107. Nadaj\u0119 priorytet w\u0105tkom zwi\u0105zanym z sieci\u0105, ale nie uruchamiam ich agresywnie i wy\u0142\u0105cznie, aby nie konkurowa\u0142y z ksoftirqd o czas procesora. Regularnie sprawdzam, czy ksoftirqd uruchamia si\u0119 na poszczeg\u00f3lnych rdzeniach - to wyra\u017any znak, \u017ce obci\u0105\u017cenie SoftIRQ jest zbyt wysokie lub nieprawid\u0142owo roz\u0142o\u017cone.<\/p>\n\n<h2>Odpytywanie zaj\u0119to\u015bci i \u015bcie\u017cki o niskich op\u00f3\u017anieniach<\/h2>\n\n<p>Gdy licz\u0105 si\u0119 mikrosekundy, ustawiam <strong>Zaj\u0119te odpytywanie<\/strong> w ukierunkowany spos\u00f3b. Aplikacje mog\u0105 definiowa\u0107 okna odpytywania dla wybranych gniazd, aby pobiera\u0107 pakiety bezpo\u015brednio z bud\u017cet\u00f3w NAPI bez oczekiwania na przerwania. Wybieram kr\u00f3tkie interwa\u0142y odpytywania, aby unikn\u0105\u0107 spalania czasu procesora i ograniczy\u0107 t\u0119 technik\u0119 do gor\u0105cych \u015bcie\u017cek o sta\u0142ym ruchu. R\u00f3wnolegle dostosowuj\u0119 <strong>bud\u017cety netdev<\/strong> umiarkowanie, aby partie by\u0142y wystarczaj\u0105co du\u017ce bez g\u0142odzenia reszty systemu.<\/p>\n\n<h2>Dyscyplina kolejek sieciowych i ich stymulacja<\/h2>\n\n<p>Skonfigurowa\u0142em <strong>qdisc<\/strong> na interfejs, aby dopasowa\u0107 obci\u0105\u017cenie. U\u017cywam nowoczesnych dyscyplin, takich jak fq\/fq_codel, aby regulowa\u0107 tempo i d\u0142ugo\u015bci kolejek w celu wyg\u0142adzenia wybuch\u00f3w i unikni\u0119cia bufferbloat. W konfiguracjach z wieloma kolejkami, \u0142\u0105cz\u0119 to z <strong>mqprio<\/strong>, dzi\u0119ki czemu klasy ruchu s\u0105 konsekwentnie przypisywane do odpowiednich kolejek sprz\u0119towych. Wraz z <strong>BQL<\/strong> (Byte Queue Limits) w sterowniku zmniejsza op\u00f3\u017anienia przy pe\u0142nym obci\u0105\u017ceniu, poniewa\u017c kolejka nie ro\u015bnie w niekontrolowany spos\u00f3b.<\/p>\n\n<p>Wa\u017cna jest interakcja z <strong>XPS<\/strong> na \u015bcie\u017cce TX: Mapuj\u0119 kolejki wysy\u0142ania do rdzeni, na kt\u00f3rych l\u0105duj\u0105 r\u00f3wnie\u017c odpowiadaj\u0105ce im przep\u0142ywy RX. W ten spos\u00f3b oba kierunki przep\u0142ywu pozostaj\u0105 blisko CPU i osi\u0105gam bardziej stabilne czasy odpowiedzi z dwukierunkowymi protoko\u0142ami (np. HTTP\/2, gRPC).<\/p>\n\n<h2>Praktyczny przep\u0142yw pracy w systemie Linux<\/h2>\n\n<p>Zaczynam od nagrywania obci\u0105\u017cenia, sprawdzam rozk\u0142ad CPU w top\/htop, patrz\u0119 na \/proc\/interrupts i \/proc\/softirqs i czytam statystyki ethtool, aby rozpozna\u0107 w\u0105skie gard\u0142a i przygotowa\u0107 nast\u0119pne. <strong>Przep\u0142yw pracy<\/strong>-krok. Nast\u0119pnie okre\u015blam identyfikatory IRQ odpowiednich kolejek NIC i ustawiam odpowiednie maski procesora, kt\u00f3re r\u00f3wnomiernie zajmuj\u0105 rdzenie i uwzgl\u0119dniaj\u0105 NUMA. Nast\u0119pnie przypinam pracownik\u00f3w aplikacji poprzez taskset lub systemd-CPUAffinity do tych samych rdzeni, kt\u00f3re obs\u0142uguj\u0105 r\u00f3wnie\u017c powi\u0105zane kolejki. Aktywuj\u0119 RPS\/RFS tylko tam, gdzie wzmacnia to lokalno\u015b\u0107 przep\u0142ywu i utrzymuj\u0119 sp\u00f3jn\u0105 konfiguracj\u0119 dla ka\u017cdego interfejsu. Na koniec ponownie mierz\u0119 przepustowo\u015b\u0107, op\u00f3\u017anienia i jitter przed jednolitym wprowadzeniem zmian na wielu hostach.<\/p>\n\n<h2>Pomiar, unikanie p95\/p99 i regresji<\/h2>\n\n<p>Nie polegam na przeczuciach, ale mierz\u0119 op\u00f3\u017anienia, wska\u017aniki b\u0142\u0119d\u00f3w i wykorzystanie rdzeni przed i po ka\u017cdej rundzie dostrajania, tak aby <strong>p99<\/strong> pozostaje stabilny. \u015aledz\u0119 r\u00f3wnie\u017c zmiany kontekstu, wska\u017aniki migracji i obci\u0105\u017cenie wed\u0142ug typu SoftIRQ, aby wcze\u015bnie zidentyfikowa\u0107 ukryte efekty uboczne. Utrzymuj\u0119 powtarzalno\u015b\u0107 test\u00f3w, u\u017cywam tych samych zestaw\u00f3w danych i sta\u0142ych wersji, aby wyniki pozosta\u0142y por\u00f3wnywalne. Odkrywam regresje za pomoc\u0105 kontroli krzy\u017cowych w warunkach szczytowych i bezczynno\u015bci oraz przy d\u0142ugich przebiegach wytrzyma\u0142o\u015bciowych. Tylko wtedy, gdy metryki, dzienniki i \u015blady aplikacji s\u0105 zgodne, deklaruj\u0119 konfiguracj\u0119 jako nowy stan bazowy.<\/p>\n\n<h2>Wirtualizacja, kontenery i SR-IOV<\/h2>\n\n<p>W \u015brodowiskach zwirtualizowanych zapewniam, \u017ce <strong>vCPU<\/strong>, Pami\u0119\u0107 i vNIC maszyny wirtualnej znajduj\u0105 si\u0119 na tym samym w\u0119\u017ale NUMA, na kt\u00f3rym ko\u0144czy si\u0119 powi\u0105zana fizyczna karta NIC. Tam, gdzie to mo\u017cliwe, u\u017cywam <strong>SR-IOV<\/strong>, dzi\u0119ki czemu \u015bcie\u017cka danych jest kr\u00f3tka, a IRQ mog\u0105 by\u0107 powi\u0105zane bezpo\u015brednio z rdzeniami go\u015bcia. Podpinam vCPU krytycznych maszyn wirtualnych do dedykowanych rdzeni hosta i upewniam si\u0119, \u017ce IRQ hosta i go\u015bcia nie nak\u0142adaj\u0105 si\u0119 na siebie. W konfiguracjach kontenerowych ustawiam <strong>cpusets<\/strong> i \u201egwarantowane\u201c klasy QoS, aby kontenery robocze i ich sieciowe IRQ otrzymywa\u0142y czas procesora w przewidywalny spos\u00f3b.<\/p>\n\n<p>Sprawdzam, czy irqbalance powinien mie\u0107 przewag\u0119 w go\u015bciu, czy na ho\u015bcie - w przeciwnym razie podw\u00f3jne \u201eautomatyczne\u201c powoduje rozmycie. W virtio ustawiam kilka kolejek i mapuj\u0119 je czysto na vCPU, aby umo\u017cliwi\u0107 r\u00f3wnoleg\u0142\u0105 prac\u0119. Je\u015bli vhost-net wykorzystuje poszczeg\u00f3lne rdzenie hosta, redystrybuuj\u0119 backendy i utrzymuj\u0119 w\u0105tki vhost NUMA blisko fizycznej karty sieciowej.<\/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\/06\/servernetzwerkoptmierung-9473.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Rozwi\u0105zywanie problem\u00f3w: szybkie rozpoznawanie wzorc\u00f3w<\/h2>\n\n<ul>\n  <li><strong>Rdzenie nasycone, ksoftirqd aktywny:<\/strong> Zbli\u017cenie kolejek RX, sprawdzenie liczby kolejek, dostosowanie RPS\/RFS lub nieznaczne zwi\u0119kszenie koalescencji.<\/li>\n  <li><strong>Jumpy p99 jitter:<\/strong> Sprawd\u017a dryft NUMA, zweryfikuj C-States\/Governor, dostosuj odci\u0105\u017cenia i rozmiary GRO krok po kroku.<\/li>\n  <li><strong>Wiele retransmisji\/przerwa\u0144:<\/strong> Sprawd\u017a rozmiary pier\u015bcieni RX\/TX, qdisc i BQL, sprawd\u017a tabel\u0119 przekierowa\u0144 i XPS pod k\u0105tem sp\u00f3jno\u015bci.<\/li>\n  <li><strong>Nier\u00f3wnomiernie roz\u0142o\u017cone przep\u0142ywy:<\/strong> Zr\u00f3wnowa\u017cenie RSS hash i indirection table, rozwa\u017cenie hot flow pinning, utrzymywanie stabilnego hash seed.<\/li>\n  <li><strong>Problem tylko z maszyn\u0105 wirtualn\u0105:<\/strong> Umieszczenie backend\u00f3w vhost\/virtio blisko NUMA, ocena SR-IOV, rozdzielenie IRQ mi\u0119dzy hostem a go\u015bciem.<\/li>\n<\/ul>\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\/06\/entwicklerschreibtisch_4312.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Obejmuje aplikacje i bazy danych<\/h2>\n\n<p>Czysta \u015bcie\u017cka sieciowa jest ma\u0142o przydatna, je\u015bli serwery aplikacji lub bazy danych nie dzia\u0142aj\u0105 r\u00f3wnolegle, dlatego skonfigurowa\u0142em <strong>Pracownik<\/strong>-liczba, pule w\u0105tk\u00f3w i limity po\u0142\u0105cze\u0144 do dost\u0119pnych rdzeni. Przypinam pracownik\u00f3w NGINX lub HAProxy do odpowiednich rdzeni, aby pasowa\u0142y do kolejek RX. Skaluj\u0119 PHP-FPM, Node.js, Java lub Go tak, aby faworyzowa\u0142y lokaln\u0105 domen\u0119 NUMA i w razie potrzeby korzysta\u0142y z wielu instancji. Integruj\u0119 pami\u0119ci podr\u0119czne, takie jak Redis lub Memcached, blisko CPU i zwracam uwag\u0119 na ich w\u0142asne parametry sieciowe i w\u0105tkowe. Tylko wsp\u00f3\u0142dzia\u0142anie powinowactwa IRQ, przypinania proces\u00f3w i skalowania aplikacji zapewnia zauwa\u017calny wzrost op\u00f3\u017anie\u0144 i przepustowo\u015bci.<\/p>\n\n<h2>Scenariusze hostingu z wysokimi korzy\u015bciami<\/h2>\n\n<p>Inwestuj\u0119 w g\u0142\u0119bokie dostrajanie g\u0142\u00f3wnie wtedy, gdy API generuj\u0105 wiele kr\u00f3tkich \u017c\u0105da\u0144 lub gdy <strong>Czas rzeczywisty<\/strong>-Komunikacja, taka jak VoIP i czaty, wymaga niskich warto\u015bci jittera. Konfiguracje e-commerce z obci\u0105\u017ceniami szczytowymi s\u0105 korzystne, poniewa\u017c przep\u0142ywy kasowe s\u0105 wra\u017cliwe na op\u00f3\u017anienia. Hosty z wieloma dzier\u017cawcami o du\u017cej g\u0119sto\u015bci przynosz\u0105 korzy\u015bci, poniewa\u017c dedykowane rdzenie na kolejk\u0119 zmniejszaj\u0105 efekty s\u0105siedztwa. Us\u0142ugi przesy\u0142ania strumieniowego mog\u0105 r\u00f3wnie\u017c osi\u0105gn\u0105\u0107 wi\u0119ksz\u0105 przepustowo\u015b\u0107 w przeliczeniu na euro bez konieczno\u015bci natychmiastowego zakupu nowego sprz\u0119tu. Koszty pozostaj\u0105 obliczalne, o ile zmiany b\u0119d\u0105 mierzalne i precyzyjnie wprowadzane.<\/p>\n\n<h2>Skr\u00f3cona tabela referencyjna: rdzenie, kolejki, narz\u0119dzia<\/h2>\n\n<p>Korzystam z nast\u0119puj\u0105cego <strong>Tabela<\/strong> jako przypomnienie, gdy konfiguruj\u0119 nowe hosty lub ponownie kalibruj\u0119 istniej\u0105ce konfiguracje. Pokazuje typowe cele, odpowiednie miary, popularne narz\u0119dzia Linux i zamierzony wp\u0142yw na op\u00f3\u017anienia i przepustowo\u015b\u0107. Nie u\u017cywam go dogmatycznie, ale jako punkt wyj\u015bcia do serii pomiar\u00f3w z rzeczywistym ruchem. Je\u015bli architektura NIC lub topologia NUMA si\u0119 zmienia, dostosowuj\u0119 wyb\u00f3r rdzenia. Wa\u017cne jest, aby zachowa\u0107 dokumentacj\u0119 dla ka\u017cdego hosta i zachowa\u0107 mo\u017cliwo\u015b\u0107 \u015bledzenia zmian.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Cel<\/th>\n      <th>Pomiar<\/th>\n      <th>Narz\u0119dzie\/lokalizacja Linux<\/th>\n      <th>Oczekiwany efekt<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Rozk\u0142ad obci\u0105\u017cenia IRQ<\/td>\n      <td>Powi\u0105zanie wskaz\u00f3wek z rdzeniami<\/td>\n      <td>\/proc\/irq\/*\/smp_affinity<\/td>\n      <td>Mniej hotspot\u00f3w, bardziej sta\u0142e op\u00f3\u017anienia<\/td>\n    <\/tr>\n    <tr>\n      <td>Zwi\u0119kszenie lokalno\u015bci przep\u0142ywu<\/td>\n      <td>Ustawianie zestaw\u00f3w CPU RPS\/RFS<\/td>\n      <td>\/sys\/class\/net\/*\/queues\/*\/rps_cpus<\/td>\n      <td>Mniej migracji, lepsze pami\u0119ci podr\u0119czne<\/td>\n    <\/tr>\n    <tr>\n      <td>Kontrola przetwarzania wsadowego<\/td>\n      <td>Dopracowanie NAPI\/koalescencji<\/td>\n      <td>ethtool -C \/ domy\u015blne ustawienia sterownika<\/td>\n      <td>Ni\u017cszy narzut, kontrolowany jitter<\/td>\n    <\/tr>\n    <tr>\n      <td>Parowanie aplikacji i IRQ<\/td>\n      <td>Pracownik pin<\/td>\n      <td>taskset, systemd CPUAffinity<\/td>\n      <td>Kr\u00f3tsza \u015bcie\u017cka, ni\u017csze p99<\/td>\n    <\/tr>\n    <tr>\n      <td>Unikaj NUMA<\/td>\n      <td>Wsp\u00f3lna lokalizacja urz\u0105dze\u0144 i rdzeni<\/td>\n      <td>numactl, lscpu, lspci -vv<\/td>\n      <td>Mniej zdalnego dost\u0119pu, wi\u0119ksza przepustowo\u015b\u0107<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Najlepsze praktyki, kt\u00f3re sprawdzaj\u0105 si\u0119 w d\u0142u\u017cszej perspektywie<\/h2>\n\n<p>Zmieniam tylko jedn\u0105 d\u017awigni\u0119 steruj\u0105c\u0105 na rund\u0119 testow\u0105, dokumentuj\u0119 metryki i zapisuj\u0119 wyniki. <strong>Dokumentacja<\/strong> w repozytorium hosta. Utrzymuj\u0119 sp\u00f3jne konfiguracje, jasno opisuj\u0105c mapowania kolejek do rdzeni i u\u017cywaj\u0105c skrypt\u00f3w do replikacji. Monitoruj\u0119 dzienniki pod k\u0105tem spadk\u00f3w, retransmisji i limit\u00f3w czasu i koreluj\u0119 je z metrykami j\u0105dra. W analizie uwzgl\u0119dniam poziom hiperwizora i pami\u0119ci masowej, aby nie pozosta\u0142y \u017cadne w\u0105skie gard\u0142a. Mam przygotowane rollbacki na wypadek, gdyby testy wykaza\u0142y negatywne skutki lub obci\u0105\u017cenia uleg\u0142y zmianie.<\/p>\n\n<h2>Kr\u00f3tkie podsumowanie<\/h2>\n\n<p>Osi\u0105gam maksymaln\u0105 wydajno\u015b\u0107 sieci dzi\u0119ki wykorzystaniu przerwa\u0144, <strong>Wskaz\u00f3wki<\/strong> i pracownik\u00f3w, utrzymuj\u0105c w ten spos\u00f3b stabiln\u0105 \u015bcie\u017ck\u0119 danych na przep\u0142yw. IRQ Affinity rozs\u0105dnie rozk\u0142ada obci\u0105\u017cenie sprz\u0119towe, podczas gdy SoftIRQ, NAPI i RPS\/RFS sprawiaj\u0105, \u017ce przetwarzanie jest wydajne. Blisko\u015b\u0107 NUMA chroni przed mo\u017cliwymi do unikni\u0119cia objazdami pami\u0119ci i zmniejsza jitter. Strojenie krok po kroku z powtarzalnymi pomiarami zapobiega b\u0142\u0119dnym konfiguracjom i pokazuje rzeczywisty post\u0119p. Je\u015bli pomy\u015blisz o tych elementach razem, mo\u017cesz \u015bmia\u0142o wykorzysta\u0107 mo\u017cliwo\u015bci nowoczesnych serwer\u00f3w wielordzeniowych dla us\u0142ug krytycznych pod wzgl\u0119dem op\u00f3\u017anie\u0144.<\/p>","protected":false},"excerpt":{"rendered":"<p>Dowiedz si\u0119, jak Server IRQ Affinity i wielordzeniowa optymalizacja sieci przyspieszaj\u0105 przetwarzanie pakiet\u00f3w i maksymalnie wykorzystuj\u0105 wielordzeniow\u0105 sie\u0107 w hostingu.<\/p>","protected":false},"author":1,"featured_media":19738,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-19745","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":"103","_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":"IRQ Affinity","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":"19738","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/19745","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=19745"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/19745\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/19738"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=19745"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=19745"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=19745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}