{"id":21034,"date":"2026-08-26T18:20:23","date_gmt":"2026-08-26T16:20:23","guid":{"rendered":"https:\/\/webhosting.de\/tcp-small-queues-linux-latency-optimization-netzwerkperformance\/"},"modified":"2026-08-26T18:20:23","modified_gmt":"2026-08-26T16:20:23","slug":"tcp-male-kolejki-linux-optymalizacja-opoznien-wydajnosc-sieci","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/tcp-small-queues-linux-latency-optimization-netzwerkperformance\/","title":{"rendered":"Ma\u0142e kolejki TCP: celowe zmniejszenie op\u00f3\u017anie\u0144 w sieci Linuksa"},"content":{"rendered":"<p>Funkcja TCP Small Queues ogranicza liczb\u0119 bajt\u00f3w oczekuj\u0105cych w \u015bcie\u017cce transmisji systemu Linux dla ka\u017cdego przep\u0142ywu TCP, co w ten spos\u00f3b zmniejsza <strong>Op\u00f3\u017anienie<\/strong> wraz z \u201ebufferbloat\u201d w spos\u00f3b celowy w d\u00f3\u0142. Poka\u017c\u0119, jak ten mechanizm dzia\u0142a w <strong>sieci w systemie Linux<\/strong> Stack pokazuje, jak ustala\u0107 sensowne limity i jakie interakcje powstaj\u0105 w zwi\u0105zku z Pacingiem, QDiscami i kontrol\u0105 przeci\u0105\u017cenia.<\/p>\n\n<h2>Punkty centralne<\/h2>\n\n<ul>\n  <li><strong>Limit przep\u0142ywu<\/strong>: TSQ ogranicza liczb\u0119 bajt\u00f3w oczekuj\u0105cych na ka\u017cdy gniazdo TCP.<\/li>\n  <li><strong>Mniejsze obci\u0105\u017cenie bufora<\/strong>: Kr\u00f3tsze kolejki skracaj\u0105 czas RTT.<\/li>\n  <li><strong>Ci\u015bnienie wsteczne<\/strong>: Aplikacje zapisuj\u0105 dane wolniej, gdy limit zaczyna obowi\u0105zywa\u0107.<\/li>\n  <li><strong>Sprawiedliwo\u015b\u0107<\/strong>: \u017baden pojedynczy strumie\u0144 nie zajmuje ca\u0142ych kolejek.<\/li>\n  <li><strong>Adaptacyjne<\/strong> Sterowanie: Limit zale\u017cy od cz\u0119stotliwo\u015bci i wielko\u015bci segmentu.<\/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\/08\/tcp-small-queues-4739.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Jak dzia\u0142a funkcja TCP Small Queues<\/h2>\n\n<p>TSQ wkracza do akcji w momencie, gdy TCP do\u0142\u0105cza segmenty do <strong>QDisc<\/strong> i przekazuje sterownikowi. Gdy zapisuj\u0119 dane do gniazda, j\u0105dro przed ka\u017cdym dodaniem do kolejki sprawdza liczb\u0119 bajt\u00f3w ju\u017c przydzielonych dla tego strumienia. Gdy strumie\u0144 osi\u0105gnie limit, logika oznacza gniazdo jako ograniczone i wstrzymuje dalsze dodawanie danych do kolejki. Dopiero gdy karta sieciowa zwolni bufor, gniazdo mo\u017ce ponownie wysy\u0142a\u0107 dane, a ja mog\u0119 ponownie umie\u015bci\u0107 dane w stosie. Ta \u015bcis\u0142a kontrola przepustowo\u015bci utrzymuje <strong>Kolejki<\/strong> kr\u00f3tki i sprawia, \u017ce czasy reakcji s\u0105 bardziej przewidywalne.<\/p>\n\n<h2>Dlaczego d\u0142ugie kolejki wyd\u0142u\u017caj\u0105 czas reakcji<\/h2>\n\n<p>Tworzenie du\u017cych kolejek sterownik\u00f3w i QDisc <strong>Bufferbloat<\/strong>, zw\u0142aszcza w przypadku TSO\/GSO i du\u017cych wolumen\u00f3w transmisji. Du\u017cy plik do pobrania mo\u017ce zape\u0142ni\u0107 kolejki wyj\u015bciowe, podczas gdy przep\u0142ywy interaktywne, takie jak SSH, wywo\u0142ania API czy VoIP, trafiaj\u0105 na koniec kolejki. Przepe\u0142niona kolejka dominuje w\u00f3wczas nad <strong>RTT<\/strong> zamiast rzeczywistego czasu po\u0142\u0105czenia. Mechanizm kontroli przeci\u0105\u017cenia reaguje z op\u00f3\u017anieniem, poniewa\u017c potwierdzenia (ACK) docieraj\u0105 z op\u00f3\u017anieniem, co powoduje, \u017ce podejmowane s\u0105 gorsze decyzje dotycz\u0105ce warto\u015bci cwnd. TSQ ogranicza liczb\u0119 bajt\u00f3w buforowanych z wyprzedzeniem dla ka\u017cdego strumienia, aby ma\u0142e, wra\u017cliwe na op\u00f3\u017anienia pakiety mog\u0142y szybko trafi\u0107 do sieci.<\/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\/tcp_small_queues_meeting_2974.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Zajrzyjmy pod mask\u0119: co liczy si\u0119 w j\u0105drze systemu<\/h2>\n\n<p>Pod powierzchni\u0105 j\u0105dro nie liczy \u201epakiet\u00f3w\u201c, lecz bajty, a dok\u0142adniej: bajty pami\u0119ci ju\u017c umieszczone przez gniazdo w kolejce. Decyduj\u0105ce znaczenie ma to, co stos zawiera w strukturach skbuff wraz z <em>truesize<\/em> przydzielono, a kt\u00f3re nie zosta\u0142o jeszcze przetworzone przez NIC. TSQ \u0142\u0105czy si\u0119 z tym <strong>Zwi\u0119kszenie\/zmniejszenie przepustnicy<\/strong>\u2011\u015acie\u017cka: Je\u015bli gniazdo osi\u0105gnie limit, stos ustawia flag\u0119 ograniczaj\u0105c\u0105 i wywo\u0142uje ponownie dopiero po zako\u0144czeniu transmisji (NAPI\/IRQ) <em>write_space()<\/em> aby aplikacja mog\u0142a ponownie wys\u0142a\u0107 dane. To sprz\u0119\u017cenie zwrotne dzia\u0142a szybciej ni\u017c sygna\u0142y oparte wy\u0142\u0105cznie na stratach, stosowane w kontroli przeci\u0105\u017cenia, i uruchamia si\u0119 przed modu\u0142em QDisc. W przypadku TSO\/GSO mechanizm ten pozostaje skuteczny, poniewa\u017c limit na <em>przed<\/em> w oparciu o bud\u017cet bajt\u00f3w przypisany do segmentacji: du\u017ce superramki s\u0105 wpuszczane do QDisc tylko wtedy, gdy dost\u0119pna jest wystarczaj\u0105ca ilo\u015b\u0107 wolnego limitu, co pozwala ograniczy\u0107 wyst\u0119powanie serii danych.<\/p>\n\n<h2>Limity dynamiczne i tempo<\/h2>\n\n<p>Czerpi\u0119 korzy\u015bci z TSQ, poniewa\u017c limit nie pozostaje sztywno statyczny, lecz dostosowuje si\u0119 do <strong>Stawka<\/strong> oraz wielko\u015b\u0107 segmentu. Celem jest uzyskanie oko\u0142o jednej milisekundy danych w kanale transmisji na ka\u017cdy strumie\u0144, niezale\u017cnie od tego, czy przepustowo\u015b\u0107 wynosi 100 Mbit, 1 Gbit czy 10 Gbit. W przypadku szybszego \u0142\u0105cza dopuszczalny kredyt bajt\u00f3w ro\u015bnie, a w przypadku wolniejszego \u0142\u0105cza maleje. W po\u0142\u0105czeniu z regulacj\u0105 tempa TCP (TCP-Pacing) impulsy pozostaj\u0105 niewielkie, a potwierdzenia (ACK) wracaj\u0105 szybciej. W ten spos\u00f3b uzyskuj\u0119 zauwa\u017calnie mniejsze <strong>Szczyty op\u00f3\u017anie\u0144<\/strong>, nie ograniczaj\u0105c przy tym niepotrzebnie przepustowo\u015bci.<\/p>\n\n<h2>Interakcja na poziomie gniazda i aplikacji<\/h2>\n\n<p>TSQ dzia\u0142a tylko wtedy, gdy aplikacja r\u00f3wnie\u017c odczuwa ci\u015bnienie zwrotne. Dlatego bior\u0119 pod uwag\u0119 takie ustawienia, jak <strong>SO_SNDBUF<\/strong>, <strong>TCP_NOTSENT_LOWAT<\/strong> oraz autocorking. Zbyt du\u017ce okno bufora wysy\u0142ania mo\u017ce w kr\u00f3tkim czasie zepchn\u0105\u0107 wiele bajt\u00f3w do stosu; TSQ wprawdzie spowalnia dzia\u0142anie, ale aplikacja zauwa\u017ca to dopiero wtedy, gdy <em>send()<\/em> zablokowany lub zwraca kod EAGAIN. Z <strong>TCP_NOTSENT_LOWAT<\/strong> wycofuj\u0119 cz\u0119\u015b\u0107 \u201eniewys\u0142an\u0105\u201c w przestrzeni u\u017cytkownika i uzupe\u0142niam w ten spos\u00f3b TSQ po stronie j\u0105dra. Autocorking (lub jawnie <em>TCP_CORK<\/em>\/MSG_MORE) pomaga grupowa\u0107 niewielkie operacje zapisu bez powodowania skok\u00f3w op\u00f3\u017anie\u0144. Limity tempa na gniazdo (np. poprzez <em>SO_MAX_TEMPO_BIEGU<\/em>) wsp\u00f3\u0142graj\u0105 z TSQ: wska\u017anik wyg\u0142adza dane w czasie, a limit bajt\u00f3w ogranicza je w przestrzeni. Wa\u017cne: <strong>TCP_NODELAY<\/strong> Wy\u0142\u0105cza Nagle\u2019a i mo\u017ce zwi\u0119kszy\u0107 interaktywno\u015b\u0107, ale bez TSQ wzrasta ryzyko wyst\u0105pienia burstu; dzi\u0119ki TSQ mam obie te kwestie pod kontrol\u0105.<\/p>\n\n<h2>Praktyczny przewodnik: zalecane warto\u015bci TSQ<\/h2>\n\n<p>Og\u00f3lne ramy wyznaczam za pomoc\u0105 <strong>net.ipv4.tcp_limit_output_bytes<\/strong> (Sysctl). Typowe warto\u015bci domy\u015blne wynosz\u0105 oko\u0142o 128\u2013262 KB na przep\u0142yw. W przypadku wielu obci\u0105\u017ce\u0144 zwi\u0105zanych z aplikacjami internetowymi i interfejsami API wybieram ni\u017csze warto\u015bci, aby odpowiedzi interaktywne by\u0142y nadal szybkie. W przypadku kopii zapasowych lub replikacji umiarkowanie zwi\u0119kszam ten limit, o ile czas RTT pozostaje stabilny. Osoby, kt\u00f3re chc\u0105 zg\u0142\u0119bi\u0107 temat kolejek, znajd\u0105 podstawowe informacje na temat <a href=\"https:\/\/webhosting.de\/pl\/kolejki-pakietow-serwera-stabilnosc-sieci-optymalizacja-hostingu-opoznienie\/\">Kolejki pakiet\u00f3w na serwerze<\/a>, kt\u00f3re pomagaj\u0105 w klasyfikacji.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th><strong>Scenariusz<\/strong><\/th>\n      <th><strong>Wsp\u00f3\u0142czynnik link\u00f3w<\/strong><\/th>\n      <th><strong>Warto\u015b\u0107 orientacyjna tcp_limit_output_bytes<\/strong><\/th>\n      <th><strong>Cel<\/strong><\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>API\/HTTP \u2013 bardzo interaktywne<\/td>\n      <td>100 Mbit \u2013 1 Gbit<\/td>\n      <td>64\u2013128 KB<\/td>\n      <td>niska <strong>RTT<\/strong>, kr\u00f3tkie kolce<\/td>\n    <\/tr>\n    <tr>\n      <td>Obci\u0105\u017cenie mieszane: strona internetowa + pliki do pobrania<\/td>\n      <td>1\u201310 Gbit<\/td>\n      <td>128\u2013256 KB<\/td>\n      <td>Wyr\u00f3wnanie wy\u0142\u0105czone <strong>Przepustowo\u015b\u0107<\/strong> oraz op\u00f3\u017anienie<\/td>\n    <\/tr>\n    <tr>\n      <td>Replikacja\/kopie zapasowe<\/td>\n      <td>1\u201310 Gbit<\/td>\n      <td>256\u2013512 KB<\/td>\n      <td>sta\u0142y przep\u0142yw obj\u0119to\u015bciowy, akceptowalny <strong>Op\u00f3\u017anienie<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>Sie\u0107 WAN o wysokim RTT<\/td>\n      <td>10\u2013100 Mbit<\/td>\n      <td>96\u2013192 KB<\/td>\n      <td>kr\u00f3tsze serie, bardziej sprawiedliwe <strong>Wskaz\u00f3wki<\/strong><\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\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\/tcp-small-queues-linux-latency-2748.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Wsp\u00f3\u0142dzia\u0142anie QDisc i kontroli przeci\u0105\u017cenia<\/h2>\n\n<p>TSQ dzia\u0142a na wej\u015bciu do <strong>QDisc<\/strong>, podczas gdy algorytmy takie jak fq_codel zarz\u0105dzaj\u0105 zat\u0142oczeniem na \u0142\u0105czu. Razem zmniejszaj\u0105 one kolejki i zapewniaj\u0105 sprawiedliwy podzia\u0142. Dzi\u0119ki <a href=\"https:\/\/webhosting.de\/pl\/tcp-bbr-kontrola-przeciazenia-optymalizacja-serwera-www-przepustowosc\/\">TCP BBR<\/a> dodatkowo zyskuj\u0119, poniewa\u017c bardziej realistyczne pomiary RTT pozwalaj\u0105 na lepsze roz\u0142o\u017cenie obci\u0105\u017cenia i sterowanie cwnd. CUBIC r\u00f3wnie\u017c dzia\u0142a p\u0142ynniej, gdy wy\u0142\u0105czam nadmierne czasy kolejkowania. W ten spos\u00f3b przepustowo\u015b\u0107 ro\u015bnie w spos\u00f3b naturalny, podczas gdy <strong>Czas reakcji<\/strong> pozostaje pod kontrol\u0105.<\/p>\n\n<h2>Wirtualizacja i platformy chmurowe<\/h2>\n\n<p>W maszynach wirtualnych nak\u0142adaj\u0105 si\u0119 na siebie r\u00f3\u017cne poziomy buforowania: QDisc go\u015bcia, kolejki virtio\/vhost, QDisc hosta oraz fizyczna karta sieciowa. Utrzymuj\u0119 TSQ w stanie aktywnym w systemie go\u015bcia i ustalam tam konserwatywny limit, aby do hosta nie dociera\u0142y du\u017ce impulsy danych. Na poziomie hiperwizora dbam o kr\u00f3tkie \u0142a\u0144cuchy op\u00f3\u017anie\u0144, stosuj\u0105c sprawiedliwe mechanizmy QDisc, umiarkowane rozmiary pier\u015bcieni TX oraz prawid\u0142owe przypisanie przerwa\u0144 IRQ. SR-IOV mo\u017ce zmniejszy\u0107 op\u00f3\u017anienia, ale przenosi odpowiedzialno\u015b\u0107 na systemy-go\u015bcie: bez TSQ w systemie-go\u015bci istnieje ryzyko d\u0142ugich kolejek VF. W kontenerach TSQ dzia\u0142a na <em>NetNS<\/em> jak zwykle; dzi\u0119ki cgroup-pacingowi i limitom CPU zapobiegam sytuacji, w kt\u00f3rej ha\u0142a\u015bliwy s\u0105siad po\u015brednio zwi\u0119ksza op\u00f3\u017anienie. Wa\u017cne jest r\u00f3wnie\u017c zwr\u00f3cenie uwagi na koalescencj\u0119 i odci\u0105\u017canie w \u015bcie\u017cce virtio: nadmierne grupowanie wyd\u0142u\u017ca potwierdzenia (Ack), zbyt ma\u0142e zmniejsza wydajno\u015b\u0107 \u2013 dostosowuj\u0119 ustawienia zgodnie z docelow\u0105 op\u00f3\u017anieniem, a nie w spos\u00f3b dogmatyczny.<\/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\/tcp-small-queues-latenz-8472.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Wi-Fi i systemy wbudowane: jak prawid\u0142owo post\u0119powa\u0107 w sytuacjach szczeg\u00f3lnych<\/h2>\n\n<p>W przypadku po\u0142\u0105cze\u0144 Wi-Fi liczy si\u0119 <strong>Agregacja<\/strong> w warstwie MAC. Je\u015bli pozostawi\u0119 zbyt ma\u0142o bajt\u00f3w w \u015bcie\u017cce transmisji, sterownik mo\u017ce zagregowa\u0107 mniej ramek, co obni\u017ca wydajno\u015b\u0107. W takich konfiguracjach ostro\u017cnie zwi\u0119kszam limit i sprawdzam stopie\u0144 agregacji. Platformy OpenWrt i wbudowane korzystaj\u0105 ponadto z uproszczonych \u015bcie\u017cek w sterownikach i mniejszej liczby operacji atomowych. Ka\u017cde dostosowanie testuj\u0119 pod rzeczywistym obci\u0105\u017ceniem sieci bezprzewodowej, zanim <strong>Profil<\/strong> rozwa\u0142kowa\u0107 na szeroko\u015b\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\/tcp_latenz_reduzieren_2837.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Monitorowanie i wska\u017aniki, kt\u00f3re naprawd\u0119 si\u0119 licz\u0105<\/h2>\n\n<p>Obserwuj\u0119 <strong>RTT<\/strong>\u2014 Rozk\u0142ad na gniazdo i zwracam uwag\u0119 na warto\u015bci odstaj\u0105ce, a nie tylko na \u015brednie. Za pomoc\u0105 ss, tc i eksporter\u00f3w odczytuj\u0119 d\u0142ugo\u015bci kolejek, liczb\u0119 retransmisji oraz pacing_rate. Programy eBPF dostarczaj\u0105 mi zdarzenia, gdy gniazda s\u0105 ograniczane i zn\u00f3w staj\u0105 si\u0119 dost\u0119pne. Wska\u017anik \u201eTime-to-First-Byte\u201d oraz 95. i 99. percentyl pokazuj\u0105, czy TSQ dzia\u0142a skutecznie. Bez danych pomiarowych ka\u017cda <strong>Optymalizacja<\/strong> lot na \u015blepo.<\/p>\n\n<h2>Testy A\/B i testy obci\u0105\u017ceniowe o wysokiej miarodajno\u015bci<\/h2>\n\n<p>Mierz\u0119 efekty TSQ w spos\u00f3b powtarzalny: najpierw warto\u015b\u0107 bazow\u0105 bez zmian, a nast\u0119pnie izolowane zmiany parametr\u00f3w (np. 64, 96, 128, 192 KB). W przypadku obci\u0105\u017ce\u0144 mieszanych uruchamiam r\u00f3wnoleg\u0142e strumienie (masowe + wiele kr\u00f3tkich \u017c\u0105da\u0144) i por\u00f3wnuj\u0119 95. oraz 99. percentyl op\u00f3\u017anie\u0144, a nie tylko median\u0119. Nawet je\u015bli wyra\u017anie przerywam przebiegi testowe (rozgrzewka, okno pomiarowe, wyhamowanie), artefakty pozostaj\u0105 rozpoznawalne. Zwracam uwag\u0119 na sta\u0142e parametry: te same wzorce \u0142adunku, identyczn\u0105 tras\u0119\/MTU, identyczne cz\u0119stotliwo\u015bci procesor\u00f3w serwer\u00f3w i klient\u00f3w. Na \u0142\u0105czach WAN symuluj\u0119 op\u00f3\u017anienia, jitter i utrat\u0119 pakiet\u00f3w za pomoc\u0105 <em>tc netem<\/em>, aby sprawdzi\u0107, czy limity TSQ nie s\u0105 zbyt wcze\u015bnie ograniczane przy wysokim BDP. Dopiero gdy percentyle si\u0119 zaw\u0119\u017caj\u0105, a liczba retransmisji i utraty pozostaj\u0105 stabilne, wprowadzam te warto\u015bci do \u015brodowiska produkcyjnego.<\/p>\n\n<h2>Optymalizacja sprz\u0119tu i szczeg\u00f3\u0142y dotycz\u0105ce sterownik\u00f3w<\/h2>\n\n<p>Sprawdzam ustawienia TSO\/GSO, bufor pier\u015bcieniowy karty sieciowej oraz sterowanie IRQ, aby <strong>TSQ<\/strong> dzia\u0142a sprawnie. Zbyt du\u017ce pier\u015bcienie TX wyd\u0142u\u017caj\u0105 kolejk\u0119 przy urz\u0105dzeniu; zbyt ma\u0142e zmniejszaj\u0105 wykorzystanie mocy obliczeniowej. Zgrubne grupowanie przerwa\u0144 op\u00f3\u017ania potwierdzenia (ACK), natomiast precyzyjne grupowanie zwi\u0119ksza obci\u0105\u017cenie procesora. Dostosowuj\u0119 moderacj\u0119 do praktycznych potrzeb i na pocz\u0105tek odsy\u0142am do <a href=\"https:\/\/webhosting.de\/pl\/koalescencja-przerwan-optymalizacja-sieci-serverflux\/\">Koalescencja przerwa\u0144<\/a>. Celem pozostaje niezawodna <strong>Op\u00f3\u017anienie<\/strong> przy wydajno\u015bci pozwalaj\u0105cej na utrzymanie eksploatacji.<\/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\/tcp_small_queues_9271.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>NUMA, RSS i powinowactwo procesora<\/h2>\n\n<p>Kr\u00f3tkie kolejki nie maj\u0105 wi\u0119kszego sensu, je\u015bli pakiety nieustannie przemieszczaj\u0105 si\u0119 poza granice NUMA. Przypisuj\u0119 kolejki RX\/TX za pomoc\u0105 RSS\/irqbalance do rdzeni tej samej domeny NUMA, w kt\u00f3rej dzia\u0142a aplikacja. Za pomoc\u0105 XPS\/RPS kontroluj\u0119, kt\u00f3re procesory przejmuj\u0105 obci\u0105\u017cenie TX, unikaj\u0105c w ten spos\u00f3b przeskakiwania mi\u0119dzy gniazdami. Mniejsza liczba nieudanych odwo\u0142a\u0144 do pami\u0119ci podr\u0119cznej i mniejsze konflikty blokad po\u015brednio pomagaj\u0105 TSQ: potwierdzenia zako\u0144czenia s\u0105 zwracane szybciej, gniazdo jest wcze\u015bniej \u201eodblokowywane\u201c, a szczyty op\u00f3\u017anie\u0144 nie wyst\u0119puj\u0105. W przypadku bardzo du\u017cej liczby przep\u0142yw\u00f3w na jeden host planuj\u0119 wystarczaj\u0105c\u0105 liczb\u0119 kolejek i unikam kolizji kilku intensywnych przep\u0142yw\u00f3w na tym samym pier\u015bcieniu TX.<\/p>\n\n<h2>Krok po kroku: Sprawdzanie dzia\u0142ania TSQ<\/h2>\n\n<p>Zaczynam od spojrzenia na <strong>Sysctl<\/strong>: Polecenie `sysctl net.ipv4.tcp_limit_output_bytes` pokazuje aktualny limit. Nast\u0119pnie sprawdzam za pomoc\u0105 `ss -tin` poszczeg\u00f3lne gniazda, zwracam uwag\u0119 na `send\u2011q` i `rtt` oraz por\u00f3wnuj\u0119 fazy obci\u0105\u017cenia z dostosowanym limitem i bez niego. Za pomoc\u0105 iperf3 generuj\u0119 obci\u0105\u017cenie w tle i r\u00f3wnolegle mierz\u0119 czasy odpowiedzi API, aby uwidoczni\u0107 priorytety. Polecenie tc -s qdisc dostarcza mi dane dotycz\u0105ce liczby pakiet\u00f3w i odrzuconych pakiet\u00f3w w dyscyplinie wyj\u015bciowej. Je\u015bli 95. i 99. percentyl pozostaj\u0105 w w\u0105skim przedziale, a <strong>CPU<\/strong>\u2013 Obci\u0105\u017cenie w ramie, dostosuj wyb\u00f3r limitu.<\/p>\n\n<h2>Cz\u0119ste b\u0142\u0119dy i antywzorce<\/h2>\n\n<ul>\n  <li>\u201eWi\u0119kszy bufor = wi\u0119ksza wydajno\u015b\u0107\u201c: To stwierdzenie sprawdza si\u0119 w testach przepustowo\u015bci bez docelowego op\u00f3\u017anienia, ale nie ma zastosowania w przypadku us\u0142ug interaktywnych. TSQ zast\u0119puje nadmiernie rozbudowane kolejki limitami dostosowanymi do zapotrzebowania dla ka\u017cdego strumienia.<\/li>\n  <li>\u201eTSQ wp\u0142ywa na przepustowo\u015b\u0107\u201c: Przy prawid\u0142owych ustawieniach TSQ ogranicza impulsy, a nie \u015bredni\u0105 szybko\u015b\u0107. W przypadku obci\u0105\u017ce\u0144 masowych umiarkowanie zwi\u0119kszam limit i mierz\u0119 percentyle, a nie tylko szczytow\u0105 warto\u015b\u0107 w Mbit\/s.<\/li>\n  <li>\u201eWystarczy samo pacing\u201c: Wyg\u0142adzanie czasowe jest wa\u017cne, ale bez ograniczenia liczby bajt\u00f3w du\u017ce ramki GSO i tak przedostaj\u0105 si\u0119 do QDisc. TSQ i pacing wzajemnie si\u0119 uzupe\u0142niaj\u0105.<\/li>\n  <li>\u201eJedna warto\u015b\u0107 dla wszystkich\u201c: obci\u0105\u017cenia, \u0142\u0105cza i karty sieciowe r\u00f3\u017cni\u0105 si\u0119 mi\u0119dzy sob\u0105. Pracuj\u0119 z warto\u015bciami zakresowymi i sprawdzam poprawno\u015b\u0107 dla ka\u017cdego \u015brodowiska z osobna.<\/li>\n  <li>\u201eDotyczy tylko protoko\u0142u TCP\u201c: skupiamy si\u0119 na protokole TCP, ale w systemie istniej\u0105 inne parametry regulacyjne (np. dotycz\u0105ce obci\u0105\u017cenia protoko\u0142u UDP). Zapobiegam niekontrolowanemu zatykaniu tych samych kolejek przez r\u00f3wnoleg\u0142e protoko\u0142y.<\/li>\n<\/ul>\n\n<h2>Podsumowanie: Precyzyjna kontrola op\u00f3\u017anie\u0144<\/h2>\n\n<p>TSQ przenosi kontrol\u0119 nad kolejkami sterownik\u00f3w do <strong>Gniazdo<\/strong> i w ten spos\u00f3b ograniczam zatory bezpo\u015brednio u \u017ar\u00f3d\u0142a. Ograniczam liczb\u0119 bajt\u00f3w buforowanych wst\u0119pnie dla ka\u017cdego strumienia, zapewniaj\u0105c w ten spos\u00f3b szybkie potwierdzenia (Ack), ni\u017cszy czas RTT oraz sprawiedliwy podzia\u0142 kolejek. W po\u0142\u0105czeniu z fq_codel i nowoczesn\u0105 kontrol\u0105 przeci\u0105\u017cenia czas reakcji pozostaje niezawodny nawet pod obci\u0105\u017ceniem. Szczeg\u00f3lne przypadki zwi\u0105zane z sieciami Wi-Fi i systemami wbudowanymi rozwi\u0105zuj\u0119 za pomoc\u0105 dostosowanych limit\u00f3w i test\u00f3w w rzeczywistych warunkach. Kto obserwuje wska\u017aniki i stopniowo dostosowuje limity, ten utrzymuje <strong>Op\u00f3\u017anienie<\/strong> sta\u0142y na niskim poziomie, bez niepotrzebnej utraty przepustowo\u015bci.<\/p>","protected":false},"excerpt":{"rendered":"<p>Funkcja TCP Small Queues w j\u0105drze systemu Linux ogranicza liczb\u0119 buforowanych pakiet\u00f3w TCP na ka\u017cdy strumie\u0144 i stanowi skuteczne narz\u0119dzie do optymalizacji op\u00f3\u017anie\u0144. Dowiedz si\u0119, w jaki spos\u00f3b TSQ ogranicza zjawisko \u201ebufferbloat\u201d i poprawia czasy odpowiedzi serwer\u00f3w.<\/p>","protected":false},"author":1,"featured_media":21027,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-21034","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":"97","_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":"TCP Small","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":"21027","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/21034","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=21034"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/21034\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/21027"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=21034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=21034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=21034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}