{"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-sma-koeer-linux-latensoptimering-naetverksprestanda","status":"publish","type":"post","link":"https:\/\/webhosting.de\/sv\/tcp-small-queues-linux-latency-optimization-netzwerkperformance\/","title":{"rendered":"TCP Small Queues: Minska latensen i Linux-n\u00e4tverket p\u00e5 ett m\u00e5linriktat s\u00e4tt"},"content":{"rendered":"<p>TCP Small Queues begr\u00e4nsar antalet v\u00e4ntande byte i Linux-s\u00e4ndningsv\u00e4gen per TCP-fl\u00f6de och minskar d\u00e4rmed <strong>F\u00f6rdr\u00f6jning<\/strong> samt bufferbloat p\u00e5 ett m\u00e5linriktat s\u00e4tt. Jag visar hur denna mekanism fungerar i <strong>Linux-n\u00e4tverk<\/strong> Stack visar hur jag s\u00e4tter rimliga gr\u00e4nser och vilka interaktioner som uppst\u00e5r med pacing, QDiscs och \u00f6verbelastningskontroll.<\/p>\n\n<h2>Centrala punkter<\/h2>\n\n<ul>\n  <li><strong>Fl\u00f6desgr\u00e4ns<\/strong>: TSQ begr\u00e4nsar antalet v\u00e4ntande byte per TCP-sockel.<\/li>\n  <li><strong>Mindre bufferbloat<\/strong>: Kortare k\u00f6er minskar RTT.<\/li>\n  <li><strong>Bak\u00e5tstr\u00e4vande<\/strong>: Programmen skriver l\u00e5ngsammare n\u00e4r gr\u00e4nsen tr\u00e4der i kraft.<\/li>\n  <li><strong>R\u00e4ttvisa<\/strong>: Inget enskilt fl\u00f6de upptar hela k\u00f6erna.<\/li>\n  <li><strong>Adaptiv<\/strong> Styrning: Gr\u00e4nsv\u00e4rdet f\u00f6ljer hastigheten och segmentstorleken.<\/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>Hur TCP Small Queues fungerar<\/h2>\n\n<p>TSQ tar vid d\u00e4r TCP-segmenten ansluter till <strong>QDisc<\/strong> och drivrutiner. N\u00e4r jag skriver data till en socket kontrollerar k\u00e4rnan f\u00f6re varje enqueue de redan allokerade byte f\u00f6r detta fl\u00f6de. Om fl\u00f6det n\u00e5r gr\u00e4nsen markerar logiken socketen som begr\u00e4nsad och stoppar ytterligare enqueue. F\u00f6rst n\u00e4r n\u00e4tverkskortet frig\u00f6r buffertutrymme f\u00e5r socketen s\u00e4nda igen och jag kan \u00e5terigen skicka data till stacken. Denna strama \u00e5terkoppling h\u00e5ller <strong>K\u00f6er<\/strong> kort och g\u00f6r reaktionstiderna mer f\u00f6ruts\u00e4gbara.<\/p>\n\n<h2>Varf\u00f6r l\u00e5nga k\u00f6er f\u00f6rl\u00e4nger svarstiden<\/h2>\n\n<p>Skapa stora drivrutins- och QDisc-k\u00f6er <strong>Bufferbloat<\/strong>, framf\u00f6r allt med TSO\/GSO och stora s\u00e4ndningsvolymer. En stor nedladdning kan fylla utg\u00e5ende k\u00f6er, medan interaktiva fl\u00f6den som SSH, API-anrop eller VoIP hamnar l\u00e4ngst bak i k\u00f6n. Den \u00f6verbelastade k\u00f6n dominerar d\u00e5 <strong>RTT<\/strong> ist\u00e4llet f\u00f6r den faktiska l\u00e4nktiden. \u00d6verbelastningskontrollen reagerar tr\u00f6gt eftersom bekr\u00e4ftelserna (Ack) anl\u00e4nder sent, vilket leder till s\u00e4mre cwnd-beslut. TSQ begr\u00e4nsar antalet f\u00f6rbuffrade byte per fl\u00f6de s\u00e5 att sm\u00e5, tidskritiska paket snabbt kommer ut p\u00e5 linjen.<\/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>En titt under huven: vad k\u00e4rnan r\u00e4knar<\/h2>\n\n<p>Under ytan r\u00e4knar k\u00e4rnan inte \u201epaket\u201c, utan byte \u2013 n\u00e4rmare best\u00e4mt de minnesbyte som redan har placerats i k\u00f6n av socketen. Det avg\u00f6rande \u00e4r vad stacken inneh\u00e5ller av skbuff-strukturer tillsammans med <em>truesize<\/em> har tilldelats och \u00e4nnu inte har bearbetats av NIC. TSQ kopplar d\u00e4rtill en <strong>Gas\/Avgas<\/strong>\u2011S\u00f6kv\u00e4g: Om en socket n\u00e5r kreditgr\u00e4nsen s\u00e4tter stacken en begr\u00e4nsningsflagga och anropar f\u00f6rst igen efter att s\u00e4ndningarna har slutf\u00f6rts (NAPI\/IRQ) <em>write_space()<\/em> s\u00e5 att applikationen f\u00e5r skicka igen. Denna \u00e5terkoppling \u00e4r snabbare \u00e4n signaler fr\u00e5n \u00f6verbelastningskontrollen som enbart baseras p\u00e5 f\u00f6rluster och verkar f\u00f6re QDisc. Med TSO\/GSO f\u00f6rblir mekanismen effektiv, eftersom gr\u00e4nsen vid <em>f\u00f6re<\/em> utg\u00e5r fr\u00e5n den bytebudget som ligger till grund f\u00f6r segmenteringen: Stora superramar sl\u00e4pps endast in i QDisc om det finns tillr\u00e4ckligt med ledigt utrymme, vilket begr\u00e4nsar burst-trafiken.<\/p>\n\n<h2>Dynamiska gr\u00e4nser och tempo<\/h2>\n\n<p>Jag drar nytta av TSQ eftersom gr\u00e4nsen inte f\u00f6rblir helt statisk, utan anpassas till <strong>Pris<\/strong> och segmentstorlek. M\u00e5let \u00e4r ungef\u00e4r en millisekund data i s\u00e4ndningsv\u00e4gen per fl\u00f6de, oavsett om hastigheten \u00e4r 100 Mbit, 1 Gbit eller 10 Gbit. Vid snabbare anslutning \u00f6kar den till\u00e5tna bytekrediten, vid l\u00e5ngsammare anslutning minskar den. I kombination med TCP-Pacing f\u00f6rblir datastr\u00f6mmarna sm\u00e5 och bekr\u00e4ftelserna kommer tillbaka snabbare. P\u00e5 s\u00e5 s\u00e4tt uppn\u00e5r jag m\u00e4rkbart l\u00e4gre <strong>F\u00f6rdr\u00f6jningstoppar<\/strong>, utan att on\u00f6digt begr\u00e4nsa genomstr\u00f6mningen.<\/p>\n\n<h2>Interaktion mellan enskilda socklar och appar<\/h2>\n\n<p>TSQ fungerar endast om applikationen ocks\u00e5 k\u00e4nner av mottrycket. D\u00e4rf\u00f6r tar jag h\u00e4nsyn till inst\u00e4llningar som <strong>SO_SNDBUF<\/strong>, <strong>TCP_NOTSENT_LOWAT<\/strong> och autocorking. Ett f\u00f6r stort s\u00e4ndningsbuffertf\u00f6nster kan p\u00e5 kort sikt pressa in m\u00e5nga byte i stacken; TSQ bromsar visserligen, men appen m\u00e4rker det f\u00f6rst n\u00e4r <em>send()<\/em> blockeras eller returnerar EAGAIN. Med <strong>TCP_NOTSENT_LOWAT<\/strong> d\u00e5 drar jag av den \u201eos\u00e4nda\u201c delen i anv\u00e4ndarmilj\u00f6n och kompletterar d\u00e4rmed TSQ p\u00e5 kernelsidan. Autocorking (eller explicit <em>TCP_CORK<\/em>\/MSG_MORE) hj\u00e4lper till att samla ihop sm\u00e5 skrivoperationer utan att orsaka latensspikar. Pacing-gr\u00e4nser per socket (t.ex. via <em>SO_MAX_PACING_RATE<\/em>) harmoniserar med TSQ: Frekvensen j\u00e4mnar ut tidsm\u00e4ssigt, medan bytegr\u00e4nsen begr\u00e4nsar rumsm\u00e4ssigt. Viktigt: <strong>TCP_NODELAY<\/strong> Inaktiverar Nagle och kan \u00f6ka interaktiviteten, men utan TSQ \u00f6kar risken f\u00f6r burst; med TSQ har jag b\u00e5da under kontroll.<\/p>\n\n<h2>Praktisk v\u00e4gledning: l\u00e4mpliga TSQ-v\u00e4rden<\/h2>\n\n<p>Jag fastst\u00e4ller den \u00f6vergripande ramen med <strong>net.ipv4.tcp_limit_output_bytes<\/strong> (Sysctl). Vanliga standardv\u00e4rden ligger p\u00e5 omkring 128\u2013262 KB per fl\u00f6de. F\u00f6r m\u00e5nga webb- och API-arbetsbelastningar v\u00e4ljer jag l\u00e4gre v\u00e4rden f\u00f6r att de interaktiva svaren ska f\u00f6rbli snabba. F\u00f6r s\u00e4kerhetskopiering eller replikering h\u00f6jer jag gr\u00e4nsen n\u00e5got, s\u00e5 l\u00e4nge RTT f\u00f6rblir stabil. Den som vill f\u00f6rdjupa sig ytterligare i k\u00f6hanteringen hittar grundl\u00e4ggande information om <a href=\"https:\/\/webhosting.de\/sv\/server-paketkoeer-naetverksstabilitet-hostingoptimering-latens\/\">Paketk\u00f6er p\u00e5 servern<\/a>, som underl\u00e4ttar klassificeringen.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th><strong>Scenario<\/strong><\/th>\n      <th><strong>L\u00e4nkningsfrekvens<\/strong><\/th>\n      <th><strong>Riktv\u00e4rde tcp_limit_output_bytes<\/strong><\/th>\n      <th><strong>M\u00e5l<\/strong><\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>API\/HTTP \u2013 mycket interaktivt<\/td>\n      <td>100 Mbit \u2013 1 Gbit<\/td>\n      <td>64\u2013128 KB<\/td>\n      <td>l\u00e5g <strong>RTT<\/strong>, korta spikar<\/td>\n    <\/tr>\n    <tr>\n      <td>Blandad belastning: webb + nedladdningar<\/td>\n      <td>1\u201310 Gbit<\/td>\n      <td>128\u2013256 KB<\/td>\n      <td>Balans ut <strong>Genomstr\u00f6mning<\/strong> och latens<\/td>\n    <\/tr>\n    <tr>\n      <td>Replikering\/s\u00e4kerhetskopiering<\/td>\n      <td>1\u201310 Gbit<\/td>\n      <td>256\u2013512 KB<\/td>\n      <td>konstant bulkfl\u00f6de, acceptabelt <strong>F\u00f6rdr\u00f6jning<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>WAN med h\u00f6g RTT<\/td>\n      <td>10\u2013100 Mbit<\/td>\n      <td>96\u2013192 kB<\/td>\n      <td>mindre skurar, mer r\u00e4ttvisa <strong>Ledtr\u00e5dar<\/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>QDisc och \u00f6verbelastningskontroll i samverkan<\/h2>\n\n<p>TSQ arbetar vid ing\u00e5ngen till <strong>QDisc<\/strong>, medan algoritmer som fq_codel hanterar \u00f6verbelastningen p\u00e5 linjen. Tillsammans minskar de k\u00f6erna och ser till att f\u00f6rdelningen blir r\u00e4ttvis. Med <a href=\"https:\/\/webhosting.de\/sv\/tcp-bbr-oeverbelastningskontroll-webbserveroptimering-bandbredd\/\">TCP BBR<\/a> dessutom drar jag nytta av detta, eftersom mer realistiska RTT-m\u00e4tningar leder till b\u00e4ttre pacing och cwnd-styrning. CUBIC reagerar ocks\u00e5 smidigare n\u00e4r jag eliminerar f\u00f6r l\u00e5nga k\u00f6ningstider. P\u00e5 s\u00e5 s\u00e4tt \u00f6kar genomstr\u00f6mningen organiskt, medan <strong>Svarstid<\/strong> f\u00f6rblir under kontroll.<\/p>\n\n<h2>Virtualisering och molnplattformar<\/h2>\n\n<p>I virtuella maskiner l\u00e4ggs flera buffertniv\u00e5er ihop: g\u00e4st-QDisc, virtio\/vhost-k\u00f6er, v\u00e4rd-QDisc och det fysiska n\u00e4tverkskortet. Jag h\u00e5ller TSQ aktivt i g\u00e4sten och v\u00e4ljer d\u00e4r en konservativ gr\u00e4ns s\u00e5 att inga stora datastr\u00f6mmar n\u00e5r v\u00e4rden. P\u00e5 hypervisorn ser jag till att latenskedjorna blir korta genom att anv\u00e4nda r\u00e4ttvisa QDiscs, m\u00e5ttliga TX-ringar och korrekt IRQ-pinning. SR-IOV kan minska latensen, men \u00f6verf\u00f6r ansvaret till g\u00e4sterna: utan TSQ i g\u00e4sten riskerar man l\u00e5nga VF-k\u00f6er. I containrar till\u00e4mpar TSQ per <em>NetNS<\/em> som vanligt; med hj\u00e4lp av cgroup-pacing och CPU-begr\u00e4nsningar f\u00f6rhindrar jag att en h\u00f6gljudd granne indirekt \u00f6kar latensen. Det \u00e4r ocks\u00e5 viktigt att beakta coalescing och offloads i virtio-v\u00e4gen: \u00f6verdriven sammanl\u00e4ggning f\u00f6rl\u00e4nger bekr\u00e4ftelserna, medan f\u00f6r liten sammanl\u00e4ggning minskar effektiviteten \u2013 jag justerar utifr\u00e5n latensm\u00e5let, inte dogmatiskt.<\/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 och inbyggda system: Hantera specialfall p\u00e5 r\u00e4tt s\u00e4tt<\/h2>\n\n<p>P\u00e5 WLAN-l\u00e4nkar \u00e4r det <strong>Aggregering<\/strong> i MAC-lagret. Om jag l\u00e4mnar f\u00f6r f\u00e5 byte i s\u00e4ndningsv\u00e4gen kan drivrutinen sammanfoga f\u00e4rre ramar, vilket minskar effektiviteten. I s\u00e5dana konfigurationer h\u00f6jer jag gr\u00e4nsen f\u00f6rsiktigt och kontrollerar aggregeringsgraden. OpenWrt- och inbyggda plattformar drar dessutom nytta av smidiga v\u00e4gar i drivrutinerna och f\u00e4rre atom\u00e4ra operationer. Jag testar varje justering under verklig tr\u00e5dl\u00f6s belastning innan jag <strong>Profil<\/strong> rulla ut brett.<\/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>\u00d6vervakning och m\u00e4tv\u00e4rden som verkligen r\u00e4knas<\/h2>\n\n<p>Jag observerar <strong>RTT<\/strong>\u2013 F\u00f6rdelningen per socket och tittar p\u00e5 extremv\u00e4rden, inte bara p\u00e5 medelv\u00e4rden. Med ss, tc och export\u00f6rer l\u00e4ser jag av k\u00f6ernas l\u00e4ngd, \u00e5teruts\u00e4ndningar samt pacing_rate. eBPF-program levererar h\u00e4ndelser till mig n\u00e4r sockets stryps och frig\u00f6rs igen. Time-to-First-Byte och 95:e\/99:e percentilen visar om TSQ har \u00f6nskad effekt. Utan m\u00e4tv\u00e4rden f\u00f6rblir varje <strong>Optimering<\/strong> en flygning i blindo.<\/p>\n\n<h2>Meningsfulla A\/B- och belastningstester<\/h2>\n\n<p>Jag m\u00e4ter TSQ-effekter p\u00e5 ett reproducerbart s\u00e4tt: f\u00f6rst en baslinje utan \u00e4ndringar, sedan isolerade parametersvep (t.ex. 64, 96, 128, 192 KB). F\u00f6r blandade arbetsbelastningar k\u00f6r jag parallella str\u00f6mmar (bulk + m\u00e5nga korta f\u00f6rfr\u00e5gningar) och j\u00e4mf\u00f6r 95:e och 99:e percentilen f\u00f6r latenser, inte bara medianen. Om jag tydligt avbryter testk\u00f6rningarna (uppv\u00e4rmning, m\u00e4tf\u00f6nster, nedkylning) f\u00f6rblir artefakterna m\u00e4rkbara. Jag ser till att h\u00e5lla konstanta variabler: samma nyttolastm\u00f6nster, identisk rutt\/MTU, identiska CPU-frekvenser f\u00f6r server och klient. P\u00e5 WAN-str\u00e4ckor simulerar jag f\u00f6rdr\u00f6jning\/jitter\/f\u00f6rlust med <em>tc netem<\/em>, f\u00f6r att kontrollera om TSQ-gr\u00e4nserna inte s\u00e4tts f\u00f6r tidigt vid h\u00f6g BDP. F\u00f6rst n\u00e4r percentilerna blir sn\u00e4vare och antalet \u00e5teruts\u00e4ndningar\/f\u00f6rluster f\u00f6rblir stabila \u00f6verf\u00f6r jag v\u00e4rdena till produktionen.<\/p>\n\n<h2>H\u00e5rdvaruoptimering och drivrutinsinformation<\/h2>\n\n<p>Jag kontrollerar TSO\/GSO-inst\u00e4llningarna, n\u00e4tverkskortets ringbuffert och IRQ-styrningen, s\u00e5 att <strong>TSQ<\/strong> fungerar smidigt. F\u00f6r stora TX-ringar f\u00f6rl\u00e4nger k\u00f6erna vid enheten; f\u00f6r sm\u00e5 minskar utnyttjandegraden. Grov sammanl\u00e4ggning av avbrott f\u00f6rdr\u00f6jer bekr\u00e4ftelser, medan fin sammanl\u00e4ggning \u00f6kar CPU-belastningen. Jag anpassar genomg\u00e5ngen efter praktiska behov och h\u00e4nvisar till f\u00f6ljande som en introduktion: <a href=\"https:\/\/webhosting.de\/sv\/avbrott-koalescens-naetverksoptimering-serverflux\/\">Sammanslagning av avbrott<\/a>. M\u00e5let \u00e4r fortfarande en tillf\u00f6rlitlig <strong>F\u00f6rdr\u00f6jning<\/strong> med tillr\u00e4cklig genomstr\u00f6mning.<\/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 och CPU-affinitet<\/h2>\n\n<p>Korta k\u00f6er hj\u00e4lper inte mycket om paket st\u00e4ndigt r\u00f6r sig \u00f6ver NUMA-gr\u00e4nserna. Jag kopplar RX\/TX-k\u00f6er via RSS\/irqbalance till k\u00e4rnor i samma NUMA-dom\u00e4n som appen k\u00f6rs p\u00e5. Med XPS\/RPS styr jag vilka CPU:er som hanterar TX-arbete och undviker d\u00e4rmed cross-socket-hopper. F\u00e4rre cache-missar och mindre lock-contention hj\u00e4lper TSQ indirekt: F\u00e4rdigst\u00e4llda uppgifter \u00e5terkommer snabbare, socketen \u201eavlastas\u201c tidigare och latensspikar uteblir. Vid ett mycket stort antal fl\u00f6den per v\u00e4rd planerar jag in tillr\u00e4ckligt m\u00e5nga k\u00f6er och undviker att flera h\u00f6gintensiva fl\u00f6den kolliderar p\u00e5 samma TX-ring.<\/p>\n\n<h2>Steg f\u00f6r steg: Kontrollera om TSQ \u00e4r aktivt<\/h2>\n\n<p>Jag b\u00f6rjar med att titta p\u00e5 <strong>Sysctl<\/strong>: sysctl net.ipv4.tcp_limit_output_bytes visar den aktuella gr\u00e4nsen. D\u00e4refter anv\u00e4nder jag ss -tin f\u00f6r enskilda socklar, tittar p\u00e5 send\u2011q och rtt och j\u00e4mf\u00f6r belastningsfaser med och utan justering av gr\u00e4nsen. Med iperf3 skapar jag bakgrundsbelastning och m\u00e4ter parallellt API-svarstider f\u00f6r att synligg\u00f6ra prioriteringar. tc -s qdisc ger mig paket- och drop-siffror f\u00f6r utg\u00e5ngsdiskiplinen. Om 95:e\/99:e percentilen f\u00f6rblir n\u00e4ra varandra och <strong>CPU<\/strong>\u2013 Last i ramen, justera valet av gr\u00e4ns.<\/p>\n\n<h2>Vanliga misstag och antim\u00f6nster<\/h2>\n\n<ul>\n  <li>\u201eSt\u00f6rre buffert = h\u00f6gre prestanda\u201c: Detta st\u00e4mmer f\u00f6r genomstr\u00f6mningstester utan m\u00e5l f\u00f6r latens, men fungerar inte f\u00f6r interaktiva tj\u00e4nster. TSQ ers\u00e4tter \u00f6verdimensionerade k\u00f6er med behovsanpassad kredit per fl\u00f6de.<\/li>\n  <li>\u201eTSQ p\u00e5verkar genomstr\u00f6mningen\u201c: Om inst\u00e4llningen \u00e4r korrekt begr\u00e4nsar TSQ burst-trafiken, inte den genomsnittliga hastigheten. Vid bulk-arbetsbelastningar skalar jag upp gr\u00e4nsv\u00e4rdet m\u00e5ttligt och m\u00e4ter percentilerna ist\u00e4llet f\u00f6r enbart toppv\u00e4rdet i Mbit\/s.<\/li>\n  <li>\u201ePacing r\u00e4cker i sig\u201c: Tidsutj\u00e4mning \u00e4r viktigt, men utan byte-begr\u00e4nsning hamnar stora GSO-ramar \u00e4nd\u00e5 i QDisc. TSQ och pacing kompletterar varandra.<\/li>\n  <li>\u201eEtt v\u00e4rde f\u00f6r alla\u201c: Arbetsbelastningar, l\u00e4nkar och n\u00e4tverkskort skiljer sig \u00e5t. Jag arbetar med intervallv\u00e4rden och validerar per milj\u00f6.<\/li>\n  <li>\u201eEndast TCP p\u00e5verkas\u201c: Fokus ligger p\u00e5 TCP, men det finns ytterligare inst\u00e4llningsm\u00f6jligheter i systemet (t.ex. f\u00f6r UDP-belastning). Jag f\u00f6rhindrar att parallella protokoll okontrollerat \u00f6verbelastar samma k\u00f6er.<\/li>\n<\/ul>\n\n<h2>Slutsats: Latenstiden under kontroll<\/h2>\n\n<p>TSQ flyttar kontrollen av drivrutinsk\u00f6er till <strong>Sockel<\/strong> och minskar d\u00e4rmed \u00f6verbelastningar direkt vid k\u00e4llan. Jag begr\u00e4nsar antalet f\u00f6rbuffrade byte per fl\u00f6de och s\u00e4kerst\u00e4ller p\u00e5 s\u00e5 s\u00e4tt snabba bekr\u00e4ftelser, l\u00e4gre RTT och r\u00e4ttvist f\u00f6rdelade k\u00f6er. I kombination med fq_codel och modern \u00f6verbelastningskontroll f\u00f6rblir svarstiden p\u00e5litlig \u00e4ven under h\u00f6g belastning. S\u00e4rskilda fall inom Wi-Fi och inbyggda system hanterar jag med anpassade gr\u00e4nsv\u00e4rden och tester under verkliga f\u00f6rh\u00e5llanden. Den som \u00f6vervakar nyckeltalen och justerar gr\u00e4nsv\u00e4rdena stegvis h\u00e5ller <strong>F\u00f6rdr\u00f6jning<\/strong> konsekvent l\u00e5g, utan att f\u00f6rlora on\u00f6dig genomstr\u00f6mning.<\/p>","protected":false},"excerpt":{"rendered":"<p>TCP Small Queues i Linux-k\u00e4rnan begr\u00e4nsar antalet buffrade TCP-paket per fl\u00f6de och \u00e4r ett kraftfullt verktyg f\u00f6r att optimera latensen. L\u00e4s mer om hur TSQ minskar bufferbloat och f\u00f6rb\u00e4ttrar serverns svarstider.<\/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":"104","_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\/sv\/wp-json\/wp\/v2\/posts\/21034","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/comments?post=21034"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/posts\/21034\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media\/21027"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/media?parent=21034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/categories?post=21034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/sv\/wp-json\/wp\/v2\/tags?post=21034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}