- Het optimaliseren van de Linux-kernel vereist een combinatie van architecturale configuratie, sysctl en latency-georiënteerde CPU-planning.
- Aangepaste kernels en PREEMPT_RT-patches maken een extreme verlaging van de latentie mogelijk, maar ze brengen meer complexiteit en onderhoud met zich mee.
- De optimalisatie van netwerk, geheugen, schijf en systeemservices moet altijd worden gemeten door middel van strenge monitoring en benchmarking.
- Een iteratieve, op meetgegevens gebaseerde aanpak zet kernelverbeteringen om in concrete voordelen voor applicaties en gebruikers.

Als we het over prestaties in Linux hebben, komt het uiteindelijk bijna altijd op hetzelfde neer: de De kernel is de centrale component die de latentie, stabiliteit en het resourcegebruik regelt.Door het systeem goed af te stemmen, kan het verschil gemaakt worden tussen een systeem dat net aan functioneert en een systeem dat soepel reageert op servers, desktops, cloudomgevingen of zelfs in... zeer oude hardware.
Deze handleiding richt zich op hoe Optimaliseer de Linux-kernel om de latentie te minimaliseren zonder de beveiliging of onderhoudbaarheid in gevaar te brengen.We behandelen alles, van basisarchitectuurconcepten tot het aanpassen met sysctl, het compileren van aangepaste kernels, het gebruik van realtime patches, het optimaliseren voor netwerken met lage latentie (zoals in EC2) en monitoring- en benchmarktechnieken om te meten of de aanpassingen die je doet daadwerkelijk iets verbeteren.
Linux-kernelarchitectuur en belangrijke aandachtspunten voor latentie
De Linux-kernel fungeert als een tussenlaag tussen applicaties en hardware en beheert deze. geheugen, processen, interrupts, stuurprogramma's en bestandssystemen. Op monolithisch maar modulair ontwerpDankzij de laadbare modules kunt u functionaliteiten flexibel in- of uitschakelen zonder het hele systeem opnieuw te hoeven compileren.
Om te begrijpen waar latenties vandaan komen, is het essentieel om verschillende subsystemen te kennen: de procesplanner (planner)Geheugenbeheer en interruptafhandeling zijn cruciaal. Een slecht geconfigureerde scheduler, een agressief geheugenbeleid of een overmatig aantal ongecontroleerde interrupts kunnen leiden tot trage reactietijden, zelfs met krachtige hardware.
Kernelconfiguratie omvat opties zoals CONFIG_PREEMPT, CONFIG_PREEMPT_VOLUNTARY of CONFIG_SMPDeze factoren bepalen in hoeverre de kernel kan worden onderbroken om urgentere taken af te handelen en hoe deze gebruikmaakt van systemen met meerdere cores. Het kiezen van het juiste preëmptiemodel heeft een aanzienlijke invloed op de waargenomen latentie op desktops, servers met lage latentie of industriële systemen.
Bij moderne servers is de hardwaretopologie ook van belang: verdeling van cores, sockets, NUMA en cachehiërarchieHet nauwkeurig afstellen van CPU-affiniteiten en NUMA-beleid (bijvoorbeeld door processen en geheugen aan hetzelfde knooppunt toe te wijzen) helpt de toegangstijden te verkorten en de cache-hitrate te verbeteren, wat essentieel is om jitter en onvoorspelbare latentie te minimaliseren.
Bovendien is er de interactie tussen de CPU-scheduler en de subsystemen van I/O (schijf en netwerk) bepaalt de doorvoer en de end-to-end latentie. die applicaties zien. Voordat je iets aanpast, is het raadzaam om de huidige status te documenteren (kernelconfiguratie, sysctl, GRUB, geladen modules), zodat je snel kunt terugkeren naar de oorspronkelijke staat als een wijziging de prestaties verslechtert.
Aanpassingen via sysctl om de latentie en prestaties te verbeteren.
de interface Met sysctl kun je kernelparameters dynamisch wijzigen. via /proc/sys, zonder opnieuw te hoeven compileren. Het is het ideale startpunt om te beginnen met optimaliseren zonder meteen vast te lopen in compilaties.
In het netwerkveld spelen parameters zoals net.core.rmem_max, net.core.wmem_max of net.ipv4.tcp_congestion_control Ze hebben een directe invloed op de doorvoer, latentie en het gedrag van TCP-verbindingen. Het correct afstellen van buffers en het congestiealgoritme is essentieel voor webservers met veel verkeer of cloud-instanties met lage latentie.
Voor het geheugen zijn waarden zoals vm.swappiness, vm.dirty_ratio, vm.vfs_cache_pressure of vm.overcommit_memory Ze stellen je in staat om te bepalen hoeveel swap er wordt gebruikt, hoe de paginacache wordt beheerd en het gedrag van virtueel geheugen. Het verlagen van de swappiness (bijvoorbeeld naar 10) helpt meestal voorkomen dat het systeem te vaak swap gebruikt, waardoor pieken in de schijf-I/O-latentie worden verminderd.
Als u werkt met grote databases of applicaties die enorme hoeveelheden gedeeld geheugen gebruiken, is het cruciaal om dit aan te passen. kernel.shmmax, kernel.shmall en het maximale aantal bestanden dat geopend is met fs.file-max en fs.nr_openDeze onvoldoende gedimensioneerde limieten kunnen knelpunten en fouten veroorzaken die onder belasting moeilijk te diagnosticeren zijn.
De beste aanpak is om kleine veranderingen door te voeren, de impact ervan te meten met behulp van monitoringinstrumenten, en pas daarna actie te ondernemen. Bewaar ze in /etc/sysctl.conf of in /etc/sysctl.d/In containeromgevingen is het belangrijk te onthouden dat veel kernelparameters globaal zijn voor de host: het onzorgvuldig wijzigen ervan kan alle services beïnvloeden, dus het combineren van sysctl met cgroups en namespaces is bijna verplicht.
Het compileren en onderhouden van aangepaste kernels
Het compileren van een aangepaste kernel blijft een zeer krachtig hulpmiddel wanneer je dat wilt. Verminder de latentie, elimineer onnodige overhead of ondersteun zeldzame hardware.Hoewel distributies over het algemeen vrij veelzijdige kernels bevatten, kan een specifieke kernel in bepaalde scenario's een wereld van verschil maken.
De klassieke werkwijze houdt in dat de code wordt gedownload van kernel.org of aangepaste versies zoals xanmod of likeuren gebruik hulpmiddelen zoals make menuconfig Om opties te kiezen. Door het .config-bestand samen met de buildscripts in je eigen Git-repository op te slaan, kun je builds reproduceren en de consistentie tussen versies behouden.
Als je Debian of afgeleide distributies gebruikt, is het erg handig om " te compilerenDebian-stijl"Om .deb-pakketten van de kernel, headers en bijbehorende bibliotheken te verkrijgen. Hiermee kunt u die aangepaste kernel op meerdere machines implementeren door simpelweg de pakketten te installeren en versies te beheren met uw eigen repository."
In de praktijk is handmatig compileren vaak zinvol wanneer je werkt met oude of zeer beperkte hardwareEen typisch voorbeeld is een oude netbook Met een Atom-processor en 1 GB RAM, waar een moderne, generieke kernel vol onnodige drivers en serveropties vertragingen en extra CPU-gebruik introduceert die je je niet kunt veroorloven.
Een veelgebruikte strategie is om uit te gaan van de huidige kernelconfiguratie (bijvoorbeeld door de configuratie te kopiëren). /boot-configuratie), en van daaruit kunt u bijsnijden of aanpassen. U kunt het voorrangsmodel wijzigen naar “Preemptieve kernel (desktop met lage latentie)"om prioriteit te geven aan interactieve desktopreacties, of om specifieke I/O-planners toe te voegen, zoals BFQ in de vorm van een module om de ervaring met mechanische schijven te verbeteren.
Om te voorkomen dat je de helft van je tijd kwijt bent aan compileren, is het verstandig om de build uit te voeren op een krachtigere machine en, indien nodig, gebruik te maken van cross-compileren (Bijvoorbeeld, het compileren van een 32-bits kernel voor een Atom vanaf een x86_64 pc door simpelweg ARCH en de bijbehorende toolchains aan te passen). Vervolgens hoeft u alleen de .deb-bestanden op de doelmachine te installeren en de juiste vermelding aan GRUB toe te voegen.
Het lastige is het onderhoud: het is raadzaam Het testen van de nieuwe kernel op nodes op de Canarische Eilanden.Zorg voor duidelijke terugdraaimogelijkheden in de bootmanager en registreer logboeken en meetwaarden tijdens de overgang om prestatieverminderingen of compatibiliteitsproblemen met stuurprogramma's te detecteren.
Preëmptiemodellen en PREEMPT_RT-patches voor systemen met lage latentie
Het preëmptiemodel van de kernel bepaalt in hoeverre een actieve taak kan worden onderbroken om een taak met een hogere prioriteit voorrang te geven, wat direct van invloed is op de responslatentieDit omvat zowel standaard configuratieopties als realtime patches.
Generieke kernels bieden verschillende opties: geen preëmptie (meer gericht op serverdoorvoer), vrijwillige preëmptie en preemptieve kernel voor desktopDit geeft prioriteit aan een snelle reactietijd van interactieve applicaties. Het aanpassen van deze instelling kan de prestaties van desktopsystemen, audio of zelfs zwaarbelaste oudere computers aanzienlijk verbeteren.
Als je een stap verder wilt gaan, verschijnen de volgende opties: PREEMPT- en PREEMPT_RT-patchesDeze aanpassingen veranderen aanzienlijke delen van de kernel om niet-onderbreekbare secties te minimaliseren. PREEMPT_RT is bedoeld voor systemen waar de latentie in het slechtste geval (niet alleen het gemiddelde) zeer laag en voorspelbaar moet zijn: industriële automatisering, professionele audio, telecommunicatie of hoogfrequent handelen.
De beslissing om PREEMPT_RT te introduceren moet niet gebaseerd zijn op een modegril, maar op... specifieke metingen van latentie en jitterTen eerste is het raadzaam om de scheduler-instellingen, CPU-affiniteiten, sysctl en, indien van toepassing, configuraties zoals dynamische tickless volledig te benutten voordat het onderhoud wordt gecompliceerd door een RT-structuur.
Ook compatibiliteit moet in overweging worden genomen: sommige De stuurprogramma's en subsystemen zijn niet volledig aangepast aan realtime. en vereisen mogelijk specifieke versies of extra patches. De verstandige aanpak is om een onderhoudsplan op te stellen dat duidelijk beschrijft wanneer en hoe nieuwe versies van de hoofdkernel moeten worden geïntegreerd met de RT-branch, die periodiek synchroniseert maar nog steeds enigszins achterloopt.
CPU-planning afstemmen, tickless-werking en core-isolatie
Naast het kiezen van het preëmptiemodel kunt u de latentie verder verfijnen door te spelen met de CPU-planning en het gedrag van de kerneltimer, met name in bedrijfsgerichte distributies zoals RHEL.
Red Hat Enterprise Linux 8 wordt bijvoorbeeld geleverd met een Kernel tickless standaard voor inactieve CPU's.Dit vermindert het energieverbruik door periodieke onderbrekingen te voorkomen wanneer de processor inactief is. Er kan een modus worden ingeschakeld voor latencygevoelige workloads. dynamische tickless in een set kernelszodat slechts één CPU (de "hoofdkern") de meeste tijdsgebonden taken afhandelt, en de rest zo min mogelijk last heeft van periodieke onderbrekingen.
Deze configuratie wordt uitgevoerd door de juiste parameters toe te voegen aan de kernelopdrachtregel in GRUBHet opnieuw genereren van de configuratie en vervolgens het aanpassen van de affiniteit van kritieke kernelthreads, zoals RCU-threads of threads. bdi-flushzodat ze zich bevinden in de kern die gereserveerd is voor onderhoud.
Deze aanpak kan worden aangevuld met de parameter isolcpusDit maakt het mogelijk om cores te isoleren van normale taken in de gebruikersruimte. In scenario's met lage latentie is het heel gebruikelijk om een aantal cores exclusief te reserveren voor een kritieke applicatie, terwijl de rest van het systeem (daemons, interrupts, enz.) door andere cores wordt afgehandeld.
Om te controleren of de dynamische tickless-modus werkt, kunnen eenvoudige tests worden uitgevoerd met stress of scripts die de CPU een seconde bezig houden en observeren met timer tiktellers Hoe het aantal interrupts per seconde daalt van duizenden naar slechts één in geïsoleerde cores, een teken dat de periodieke timer is verdwenen.
Geheugen- en opslagbeheer met focus op latentie.
De manier waarop de kernel geheugen en schijf-I/O beheert, heeft een enorme impact op de latentie zoals waargenomen door applicatiesvooral in databases en services die veel kleine en frequente bewerkingen uitvoeren.
Wat het geheugen betreft, verlaag het aantal geheugenmodules. vm.swappiness minimaliseer het gebruik van swapgeheugen (dat bijna altijd veel trager is dan RAM). vm.vfs_cache_druk Het bepaalt hoe snel het systeem probeert de inode- en dentry-cache te wissen, en vm.nr_hugepages Het maakt het mogelijk om statische HugePages te reserveren voor zware belasting, zoals databases of JVM's, waardoor de TLB-overhead wordt verminderd.
Kies bij opslag de de juiste I/O-planner op basis van het schijftype. Het is cruciaal. Bij moderne SSD's is het meestal een goed idee om te gebruiken... none o mq-deadlineTerwijl bij mechanische schijven en multitaskingsystemen algoritmes die ontworpen zijn voor eerlijke verdeling wellicht beter presteren, zoals... BFQDaarnaast is het mogelijk om bestandssystemen te koppelen met opties zoals noatime y nodiratime Vermijd onnodige schrijfbewerkingen telkens wanneer een bestand of map wordt geopend.
Wat betreft bestandssystemen, ext4 en XFS Dit blijven de meest gangbare opties: een goed afgestelde ext4 is een veilige keuze, terwijl XFS doorgaans beter schaalt bij hoge gelijktijdigheid. Voor zeer veeleisende scenario's kan de combinatie van RAID (RAID 10 voor databases, RAID 0 voor tijdelijke scratch-opslag) met een goede scheduler de gemiddelde latentie en vooral de variabiliteit verminderen.
Netwerk- en kerneloptimalisatie voor lage latentie in Linux en EC2.
Bij hoogwaardige netwerktoepassingen hangt de latentie niet alleen af van de hardware of de afstand, maar ook van... hoe de TCP/IP-stack en de kernel zelf geconfigureerd zijnDit is vooral zichtbaar in cloudomgevingen zoals Amazon EC2 met ENA-interfaces.
Om te beginnen is het essentieel om externe factoren zoals het aantal te verminderen. netwerkhops De prestaties van de pakketten zijn als volgt: door gebruik te maken van directere topologieën, load balancers dicht bij de backend of geoptimaliseerde beschikbaarheidszones worden de reistijden met milliseconden verkort voordat het besturingssysteem zelfs maar wordt bereikt.
Binnen de kernel omvat netwerkconfiguratie het vergroten van bestandsdescriptors (ulimit -n), grootte van ontvangst- en verzendbuffers met net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, net.ipv4.tcp_wmemen activeer opties zoals TCP Snel Open om de latentie bij het tot stand brengen van de verbinding te verminderen.
Bij AWS ENA-interfaces speelt interruptmoderatie een belangrijke rol: standaard groepeert de driver pakketten om het aantal IRQ's te verminderen. rx-usecs en tx-usecsAls u de latentie tot een absoluut minimum wilt beperken, kunt u deze moderatie uitschakelen door ethtool -CHet instellen van rx-usecs en tx-usecs op nul verlaagt de latentie, maar verhoogt de overhead van interrupts. Er moet dus een balans worden gevonden, afhankelijk van de belasting.
Het kan ook gebruikt worden irqbalance om IRQ's over meerdere cores te verdelen.Of schakel het uit en stel handmatig de interrupt- en netwerkwachtrij (RSS/RPS)-affiniteiten in voor specifieke cores, iets wat heel gebruikelijk is in omgevingen met ultralage latentie of bij gebruik van DPDK waarbij een groot deel van de kernelstack wordt overgeslagen.
Een andere parameter om te overwegen is de CPU C-toestandenDiepe slaapstanden verminderen het stroomverbruik, maar introduceren vertragingen wanneer de processor "wakker wordt". Om de reactietijd te verkorten, kunt u deze diepe slaapstanden beperken. Dit accepteert een hoger stroomverbruik en minder ruimte voor Turbo Boost op andere processorkernen. Elke omgeving heeft zijn optimale balans tussen stroomverbruik en winst in microseconden.
CPU-, service- en applicatieoptimalisatie om de latentie te verminderen.
Naast de kernel zelf heeft de omringende omgeving een grote invloed op de algehele latentie: van de actieve services in het systeem tot aan de specifieke configuratie van elke applicatie.
Een krachtige server zou alleen de volgende taken moeten uitvoeren: demonen die werkelijk noodzakelijk zijnDiensten zoals Bluetooth, printen of automatische netwerkdetectie (CUPS, Avahi, enz.) op backend-machines verbruiken alleen CPU, geheugen en I/O zonder enig voordeel op te leveren. Review met systemctl list-unit-files --state=enabled Het uitschakelen van onnodige functies is een van de goedkoopste en meest effectieve dingen die je kunt doen.
Om kritieke processen prioriteit te geven, kunt u gebruikmaken van tools zoals renice, chrt en tasksetDoor de prioriteit van een proces aan te passen (renice), het realtime in te plannen (chrt -f 99) of het toe te wijzen aan specifieke cores (taskset) wordt de interferentie met andere taken verminderd, waardoor de voorspelbaarheid van de CPU voor databases, VoIP, streaming of handelsdiensten wordt verbeterd.
Op applicatieniveau is tuning net zo belangrijk als kernel-tuning. Webservers zoals Nginx of Apache Ze vereisen fijnafstemming van workers, keepalive, caches en compressie. Databases zoals PostgreSQL of MySQL Ze moeten de buffergroottes, checkpoints, de verbindingspool en de parameters voor synchroon schrijven herzien om lage en stabiele latentie te bereiken.
De JVM's spelen ook een rol: ze kiezen bijvoorbeeld voor garbage collectors zoals G1GC of ZGC Het aanpassen van de heapgrootte kan pauzes verminderen die, vanuit een extern perspectief, als latentie worden ervaren. In gevirtualiseerde en gecontaineriseerde omgevingen is een juiste verdeling cruciaal. vCPU-, vRAM- en I/O-quota Het voorkomt stille conflicten die zich later manifesteren als eindeloze wachtrijen op de schijf of een overbelaste CPU.
Kernel- en systeemmonitoring en benchmarking
Al dat afstellen is nutteloos als je de impact niet meet. De sleutel zit hem in de combinatie. Continue monitoring met reproduceerbare prestatietestszodat elke wijziging aan de kernel of sysctl kan worden geëvalueerd met objectieve gegevens.
Om de algehele status van het systeem te bekijken, kunt u klassieke tools gebruiken zoals htop, vmstat, iotop o sarWanneer je meer details nodig hebt, komen specifieke kerneltools in beeld, zoals perf en ftracewaarmee je het gedrag van de scheduler, interrupts en interne aanroepen met aanzienlijke nauwkeurigheid kunt volgen.
In productieomgevingen wordt aanbevolen om meetsystemen zoals te implementeren. Prometheus, collectd of sysstat met exporters die CPU-tellers, I/O, schijf- en netwerklatentie, proceswachtrijen, enz. weergeven. Deze gegevens, gevisualiseerd in Grafana of vergelijkbare tools, helpen bij het opsporen van regressies of afwijkingen voordat de eindgebruiker problemen opmerkt.
Bij benchmarking is het de bedoeling om de daadwerkelijke werkbelasting na te bootsen en de situatie "voor en na" elke wijziging te vergelijken. Hulpmiddelen zoals systeembank (voor CPU's en databases), FIO (voor schijf) of Iperf3 (Voor netwerken) maken ze de constructie van herhaalbare scenario's mogelijk. Documentatie is essentieel. kernelversies, sysctl-configuraties, hardware en testparameters zodat de vergelijkingen in de loop der tijd zinvol blijven.
In de praktijk is kerneloptimalisatie voor Linux een iteratief proces: je test een reeks aanpassingen, meet de resultaten, behoudt wat echt voordeel oplevert en gooit de rest weg. Met goed wijzigingsbeheer kun je de verbeteringen in nieuwe kernelversies (zoals recente series met verbeteringen voor de scheduler, grafische kaart, energieverbruik of netwerken) vertalen naar meetbare voordelen voor je applicaties, of die nu lokaal, in de cloud of op veeleisende werkstations draaien.
De combinatie van kennis van de kernelarchitectuur, finetuning met sysctl, gecontroleerde compilatie, selectief gebruik van realtime patches en een goed meetsysteem stelt een beheerder of operationeel team in staat om het volgende te bereiken: Snellere reacties, lagere latentie en verbeterde algehele stabiliteit. zonder dat er bij de minste aanleiding hardware hoeft te worden vervangen of de systeembeveiliging in gevaar hoeft te worden gebracht.
Inhoud
- Linux-kernelarchitectuur en belangrijke aandachtspunten voor latentie
- Aanpassingen via sysctl om de latentie en prestaties te verbeteren.
- Het compileren en onderhouden van aangepaste kernels
- Preëmptiemodellen en PREEMPT_RT-patches voor systemen met lage latentie
- CPU-planning afstemmen, tickless-werking en core-isolatie
- Geheugen- en opslagbeheer met focus op latentie.
- Netwerk- en kerneloptimalisatie voor lage latentie in Linux en EC2.
- CPU-, service- en applicatieoptimalisatie om de latentie te verminderen.
- Kernel- en systeemmonitoring en benchmarking