Jag visar hur kärnparametern vm.vfs_cache_tryck hur VFS-cachen vägs mot sidcachen och vilka värden som ger bättre prestanda vid en verklig belastningsprofil. Med tydliga steg justerar jag denna inställning, mäter effekterna och utnyttjar därmed Filsystemets cache optimalt.
Centrala punkter
För att komma igång snabbt sammanfattar jag de viktigaste aspekterna när det gäller att trimma VFS-cacher tillsammans. På så sätt kan jag, när jag väljer värde, hålla koll på effekten på metadatauppslag, I/O-belastning och RAM-belastning. Dessa punkter hjälper mig att optimera typiska serverroller på ett säkert och reproducerbart sätt.
- Verkningsprincip: Styr hur beslutsamt kärnan frigör dentries/inodes i förhållande till sidcachen.
- Standardinställning: 100 innebär en balanserad justering utan särbehandling.
- Låga värden: 50–80 gör att metadata lagras längre i RAM-minnet och påskyndar filsökningar.
- Höga värden: 120–200 frigör VFS-cacher snabbare och frigör utrymme för processer.
- Övning: Ändra stegvis, mäta, dokumentera – och först därefter fortsätta att anpassa.
Jag tillämpar dessa principer konsekvent för att uppnå rätt balans mellan Cache-träfffrekvens och ledigt RAM-minne. Därefter justerar jag vm.vfs_cache_pressure i små steg, övervakar belastningstoppar och korrigerar vid behov. På så sätt uppnår jag stabila svarstider utan oväntade minnesflaskhalsar.
Vad är vm.vfs_cache_pressure?
Parametern styr hur strikt kärnan hanterar VFS-cache Jämfört med andra lagringsutrymmen rensar den så snart RAM-minnet börjar ta slut. I VFS-cachen hamnar dentries och inodes, det vill säga katalogposter och filmetadata, vilket märkbart påskyndar filsökningar. Värdet 100 behandlar VFS-cachen och sidcachen på samma sätt, medan lägre värden prioriterar att hålla metadata i RAM-minnet. Högre värden får kärnan att kasta VFS-poster tidigare och frigöra minne snabbare. Jag använder denna inställning specifikt för att hålla uppe andelen träffar på metadata vid webb-, fil- och CMS-arbetsbelastningar, utan att tränga undan processer. På så sätt kontrollerar jag balansen mellan Sökhastighet och ledigt arbetsminne på ett mycket direkt sätt.
Hur fungerar VFS-cachen i detalj?
Det virtuella filsystemet utgör ett gemensamt lager för ext4, XFS, Btrfs och liknande och lagrar Dentries och inoder i RAM-minnet, så att kataloggenomsökningar och återkommande åtkomst förblir snabba. Sidcachen lagrar däremot själva filblocken; de båda cacharna kompletterar varandra, men konkurrerar om minnesutrymme när belastningen ökar. Ju fler små filer och ju fler återkommande åtkomstförfrågningar som förekommer, desto större nytta har applikationen av en hög träfffrekvens för metadata. Det är just här som vm.vfs_cache_pressure kommer in: Jag påverkar om Linux behåller dessa metadata eller snabbt ersätter dem. För mer ingående aspekter av sidcachen använder jag dessutom det kompakta Page-Cache Performance Booster som bakgrundskunskap, så att jag kan bedöma VFS och sidcache i sitt sammanhang.
Standardvärde och typiska värdeintervall
På de flesta system är värdet inställt på 100 och utgör därmed en välavvägd utgångspunkt för de första testerna. Om jag sänker värdet prioriterar jag metadata och stabiliserar snabba sökningar, vilket framför allt är effektivt vid många små filer. Om jag höjer värdet bryter Linux ner VFS-poster snabbare och skapar mer buffertutrymme för applikationer eller sidcachen. Extrema värden som 0 eller värden över 500 hanterar jag endast med stor försiktighet, eftersom de kan utlösa kraftiga reaktioner och orsaka biverkningar. I vardagen börjar jag på 100, går framåt i steg om 20–40 punkter och mäter effekten på IO-latens och svarstider.
| Värde | Betydelse | När ska du använda | Risk/Anmärkning |
|---|---|---|---|
| < 100 (t.ex. 50–80) | VFS-cachen lagras längre i RAM-minnet | Många små filer, frekventa sökningar | Mer RAM-bindning till Metadata |
| 100 | En balanserad justering | Ett tillförlitligt utgångsvärde för mätningar | Bra Baslinje-värde |
| > 100 (t.ex. 120–200) | VFS-cache frigörs mer aggressivt | Brist på RAM-minne, databaser med egen cache | Eventuell latens vid uppslagning |
| Extrem (0, > 500) | Allvarliga förändringar | Särskilda fall – snabbtest | Hot mot stabiliteten och Prestanda |
Med hjälp av detta rutnät kan jag snabbt se vilken riktning som passar, utan att gå för långt. Jag undviker stora steg och dokumenterar varje förändring i detalj. På så sätt förblir den tillbakalagda vägen alltid tydlig och jag kan göra en korrekt jämförelse med tidigare mätpunkter.
Roll vid rensning av lagringsutrymmet
När trycket ökar måste kärnan frigöra RAM-minne, och det är just här som vm.vfs_cache_pressure bestämmer fördelningen mellan VFS-cache, sidcache och processminne. Låga värden håller kvar katalog- och inode-poster längre i minnet, vilket gör att kataloguppslag och upprepade filöppningar hanteras snabbt. Höga värden frigör minne tidigare och ger mer utrymme åt processer eller sidcachen, vilket kan vara till hjälp när RAM-minnet är knappt. Jag övervakar särskilt IO-fördröjningar, eftersom en alltför tom metadatacache bromsar filsökningen. När det gäller samspelet med strategier för frigörande av sidcache ger denna insikt mig Rensning av sidcache värdefulla praktiska kopplingar, så att jag kan fatta beslut baserade på fakta.
Mätmetodik: Göra VFS-cachen transparent
Innan jag ändrar något, markerar jag det, där minnet finns och vad förskjuts. På så sätt kan jag avgöra om metadata verkligen är flaskhalsen – eller om sidcachen, processerna eller smutsiga sidor dominerar.
- /proc/meminfo: Jag granskar InodeCache, Cached, Buffers, SReclaimable och SUnreclaim för att bedöma andel och återvinningsbarhet.
- slabtop: Live-överblick över slabbar, särskilt dentry, inode_cache, ext4_inode_cache och xfs_inode. På så sätt kan jag se om dentries och inodes växer eller krymper.
- IO-väg: Med vmstat/iostat övervakar jag läsfördröjningar och ser om antalet diskåtkomsthändelser ökar vid uppslagningar.
# Snabböversikt
grep -E 'InodeCache|SReclaimable|SUnreclaim|Cached|Buffers' /proc/meminfo
# Slab-fördelning (sorterad efter storlek)
sudo slabtop -s c
# Filtrera endast bort dentry-/inode-liknande slabs
grep -Ei 'dentry|inode' /proc/slabinfo | sort -k3 -nr | head
# IO- och minnestrender per sekund
vmstat 1
iostat -x 1
Jag anser att tolkningen är tydlig: Om SReclaimable växer tillsammans med dentry-/inode-slabs och samtidigt ökar IO-fördröjningarna inte, vilket bekräftar att metadatacachen fungerar som den ska. Om dessa värden ofta sjunker till noll och sedan snabbt stiger vid katalogåtkomst är vm.vfs_cache_pressure troligen inställd på en för aggressiv nivå.
Praktisk tillämpning: Läsa av och ändra aktuellt värde
Kontrollen går att utföra från kommandoraden på några sekunder och utan Omstart. Jag läser av det aktuella värdet och skriver in testvärdena tillfälligt, så att jag omedelbart kan genomföra återgångar i testfönstret. För produktiva justeringar lägger jag in poster i /etc/sysctl.conf eller en fil i /etc/sysctl.d/, laddar om dem och dokumenterar ändringen. Jag testar varje nivå under realistisk belastning, inte bara i viloläge, så att effekterna blir synliga. På så sätt säkerställer jag tydliga före-och-efter-jämförelser och utvärderar ändringen utifrån mätbara nyckeltal.
# Kontrollera aktuellt värde
cat /proc/sys/vm/vfs_cache_pressure
# eller
sysctl vm.vfs_cache_pressure
# Testa tillfälligt (fram till omstart)
sudo sysctl -w vm.vfs_cache_pressure=60
# alternativ
echo 60 | sudo tee /proc/sys/vm/vfs_cache_pressure
# Ställ in permanent
echo "vm.vfs_cache_pressure = 60" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Cacheoptimering i Linux: lämpliga scenarier
På webbhotellplattformar med många statiska resurser, filarkiv eller applikationer med egna buffertar lönar det sig att genomföra en målinriktad viktning i VFS-cachen. Webbservrar med många små filer har stor nytta av lägre värden, eftersom uppslagningar sällan träffar SSD/HDD. Filservrar med blandade filstorlekar kan använda måttligt sänkta värden om det finns tillräckligt med RAM-minne. Databasservrar med hög belastning på RAM-minnet och stor databascache bör ha högre värden för att ge processerna utrymme. Jag utvärderar dessa mönster utifrån övervakningsdata så att inställningarna passar den faktiska åtkomstmixen.
Webbserver med många statiska filer
När det gäller CSS, JS och bilder brukar jag gärna behålla metadata längre i Cache. Värden mellan 50 och 80 har ofta visat sig fungera bra, eftersom det går snabbare att öppna filer på nytt. Jag granskar noggrant IO-toppar under trafikspikar och jämför svarstiderna före och efter ändringen. Om latenserna förblir stabila och kostnaderna för 404-uppslag minskar är vi på rätt väg. Jag håller koll på RAM-användningen så att processerna har tillräckligt med utrymme trots en större metadatacache.
Filservrar eller NAS-system
Många användarbesök och katalogbyten drar nytta av lägre till balanserade värden. Om det finns tillräckligt med RAM-minne siktar jag snarare på 50–80; vid knappare minnesutrymme håller jag mig närmare 100. Jag kontrollerar om kataloglistningarna förblir smidiga och om ögonblicksbilder/säkerhetskopior inte tränger undan cachen för mycket. Om IO-latensen ökar vid toppbelastningar justerar jag försiktigt värdet uppåt. På så sätt upprätthåller jag balansen mellan användarkomfort och ledigt arbetsminne.
Databasserver och system med begränsat lagringsutrymme
Databaser har en egen buffertcache, därför anger jag Processminne har oftast prioritet. Värden mellan 120 och 200 signalerar att VFS-cacherna bör tömmas och RAM-minnet frigöras. Jag håller då ett öga på applikationens sökfördröjningar och mönster för sidfel. Om databasen bromsas upp på grund av att systemet börjar swappa höjer jag värdet något och sänker samtidigt vm.swappiness. Denna strategi förhindrar att metadata tar upp onödigt utrymme som databasen istället kan utnyttja bättre.
Exempel på arbetsbelastning och riktvärden
Jag börjar med 100 och minskar i steg om 20 för webbnära Arbetsbelastning och ökar i steg om 20 för processer som kräver mycket minne. Varje steg testar jag åtminstone under en toppfas, så att jag kan upptäcka effekter på latenser, cacheträffar och swap-aktivitet. Den som vill fördjupa sig ytterligare hittar i den kortfattade Page-Cache Performance Booster Ytterligare bakgrundsinformation om filcache-strategier som jag beaktar parallellt. När mätvärdena och målsituationen stämmer överens låser jag konfigurationen och dokumenterar nyckeltalen. På så sätt förblir optimeringen reproducerbar och jag kan snabbt göra justeringar senare.
Risker och fallgropar
Om jag ställer in värdet för lågt kan kärnan knappt frigöra VFS-poster, vilket vid belastningstoppar kan leda till OOM– risker. Om jag höjer den för mycket ökar latensen vid filuppslag och katalogbyten, eftersom metadata måste laddas om. Utan tester under verklig belastning riskerar man att dra felaktiga slutsatser utifrån tidsintervall med låg belastning. Plötsliga hopp försvårar utvärderingen, därför går jag stegvis tillväga. Jag noterar varje ändring med tidpunkt, belastningsprofil och mätvärden, så att orsakerna förblir tydliga.
Övervakning och nyckeltal
Om det lönar sig att göra en anpassning visar konkreta Mätetal. Jag övervakar RAM-användningen, fördelningen mellan cacheminnen och processer, I/O-fördröjningar och swap-aktivitet. Dessutom utvärderar jag cacheträfffrekvenser och trender för sidfel för att snabbt upptäcka biverkningar. Särskilt vid många små filer märks förbättringar i tiden till första byte. Om IO-latensen förblir låg och swappningen minskar bekräftar det att vi är på rätt väg.
Tuning‑Playbook: Från hypotes till tillförlitlig inställning
En strukturerad arbetsgång förhindrar att man går på känsla. Jag följer en fast arbetsordning så att resultaten blir tillförlitliga och så att mina kollegor kan följa med i de olika stegen.
- Registrera utgångsvärdet: vm.vfs_cache_pressure=100, 24–72 timmars realistisk belastning. Spara nyckeltal (latenser: median/95:e/99:e percentilen, IO-väntetid, CPU-steal, swap-aktivitet, inode-/dentry-storlek).
- Formulera en hypotes: „Många små filer, uppslag är resurskrävande – lägre värden gör det snabbare“ eller „ ont om RAM – högre värden håller processerna fria“.
- Ändra steg för steg: ±20 till ±40 poäng. Mät minst en toppfas per nivå.
- Jämföra: Jag undersöker om SLO:erna (t.ex. 95:e percentilen) förbättras på ett tillförlitligt sätt, utan fler swap- eller OOM-händelser.
- Rollback-kriterium: Om 95:e/99:e latensvärdena stiger, väntetiderna för IO ökar eller antalet cache-missar blir allt fler, tar jag ett steg tillbaka.
- Freeze & dokumentation: Notera slutvärdet, datumet, lastfönstret och nyckeltalen.
# Snabbtest för kontrollerade mätfönster (endast underhåll!)
# Före: Ta en ögonblicksbild av nyckeltalen
date; free -h; grep -E 'InodeCache|Cached' /proc/meminfo; vmstat 1 5
sudo sysctl -w vm.vfs_cache_pressure=80
# Vänta tills belastningstestet/toppbelastningen är över, registrera sedan nyckeltalen igen och jämför
Filsystem och monteringsalternativ: Sammanhanget spelar roll
Effekten av vm.vfs_cache_pressure beror också på filsystemet och monteringsalternativen. Jag bedömer dessa faktorer utifrån följande:
- relatid/noatid: Förhindrar frekventa atime-skrivningar. noatime minskar IO-belastningen vid många läsningar, vilket gör fördelarna med metadata tydligare.
- lattid: Fördröjer uppdateringar av metadata i RAM-minnet; detta jämnar ut toppar, men påverkar tidpunkterna för tömning.
- ext4 jämfört med XFS jämfört med Btrfs: Olika inodstrukturer och hur Shrinker beter sig. Jag mäter alltid på mål-FS, i stället för att överföra antaganden.
- NFS/Nät-FS: Cachelagring och ogiltigförklaring av attribut kan begränsa nyttan med VFS. Aggressiv frigivning (höga värden) leder då till ett ökat antal fjärrsökningar.
- OverlayFS/FUSE: Många små metadataprocesser drar stor nytta av VFS-cachen; jag håller värdena på en ganska måttlig till låg nivå, förutsatt att det finns tillräckligt med RAM-minne.
Aspekter rörande containrar och cgroups
I container-miljöer har jag alltid följande i åtanke: vm.vfs_cache_pressure är en på hela servern Knapp. Ändringarna gäller alla Pods/containrar på noden. Jag väljer därför en försiktig strategi och samordnar optimeringen på nodnivå.
- Lagringsgränser: Memory-Cgroups begränsar process- och sidcache; slab-minne kan räknas in proportionellt. Jag observerar Pod-OOM-händelser och Node-Pressure-händelser i samband med detta.
- Arbetsbelastningsmix: Noder som hanterar både DB-pods och webbfrontend samtidigt får inga extremvärden. Vid behov fördelar jag rollerna på olika noder.
- Utrullning: Först Canaries (en nod), sedan en stegvis utrullning. Jag dokumenterar ändringarna i nodens baslinje (sysctl.d) och noterar vilka distributioner som berörs.
Specialfall från praktiken
Vissa mönster kan man ta itu med på ett målinriktat sätt om jag känner till orsakerna:
- CI/Build-jobb: Många korta filåtkomster och kataloggenomgångar gynnas av lägre värden. Jag höjer dem igen när jobbet är klart, om noder används för olika ändamål.
- Fönstret för säkerhetskopiering/skanning: Långa kataloggenomgångar rensar cacheminnet. Tillfälligt kan en högre Värdet (t.ex. 180) förhindrar under säkerhetskopieringen att dentries/inodes fyller RAM-minnet – efteråt återställer jag det.
- Negativa Dentries: Även filer som inte finns (404) lagras i cachen. Webbbaserade arbetsbelastningar med frekventa felåtkomster uppvisar mätbara förbättringar om VFS-cachen inte töms alltför aggressivt.
- Streaming/sekventiell I/O: Här dominerar sidcachen; för låga värden ger inga fördelar och tar upp onödigt mycket RAM-minne. Jag håller mig nära 100 eller något däröver.
# Exempel: ställa in värdet lite högre under en fullständig säkerhetskopiering
sudo sysctl -w vm.vfs_cache_pressure=180
# Återgå till det tidigare fastställda optimala värdet efter säkerhetskopieringen
sudo sysctl -w vm.vfs_cache_pressure=60
Automatisering och styrning
Efter framgångsrika tester införlivar jag inställningen i mina standardbyggnader. Det är viktigt att teamen vet att, varför ett värde har valts och när som ska kontrolleras (t.ex. efter versions- eller arbetsbelastningsbyten).
- Konfigurationshantering: Jag hanterar de standardinställningar som definierats för varje roll (webb, databas, filserver) i /etc/sysctl.d/ och distribuerar dem centralt.
- Driftkontroll: Genom regelbundna granskningar kontrolleras om live-värdena och databasen stämmer överens.
- Runböcker: Jag dokumenterar mätprocedurer, gränsvärden för återställning och nödprocedurer (t.ex. återställning till 100).
#-roll: webbserver (exempel)
cat <<'EOF' | sudo tee /etc/sysctl.d/50-web-vfs.conf
vm.vfs_cache_pressure = 60
EOF
sudo sysctl --system
vm.vfs_cache_pressure och andra kärnparametrar
Ett bra resultat uppnås först i samspel med vm.swappiness och tröskelvärdena för ”dirty pages”. Ett lägre swappiness-värde (t.ex. 10–20) gör att processer i högre grad hålls kvar i RAM-minnet och undviker onödig utlagring. Med vm.dirty_background_ratio och vm.dirty_ratio reglerar jag hur tidigt systemet skriver bort ändrade sidor, så att skrivtoppar inte blockerar allt. Jag anpassar dessa värden så att metadatasökningar förblir snabba och skrivoperationer kan planeras. Här använder jag en överskådlig sammanfattning av samspelet mellan filcacher: Översikt över cachelagring i filsystemet.
Rekommendationer för webbhotellsmiljöer och WordPress
Många teman, plugins och mediefiler skapar otaliga små filer, vilket är anledningen till att en kraftfull VFS-cache hjälper märkbart. Jag börjar med 100, sänker till 80 om det finns tillräckligt med RAM, senare till 60, och kontrollerar svarstider, 95:e percentilen för latenser och CPU-steal. Om minnet fortfarande klarar sig bra testar jag 50 och validerar igen under kvällstoppen eller under kampanjer. Om latenserna sjunker utan att swap eller OOM-killer aktiveras, låser jag inställningen permanent. Parallellt håller jag koll på sidcachen så att de båda cacharna kompletterar varandra på ett meningsfullt sätt.
Sammanfattning
Med vm.vfs_cache_pressure styr jag Balans mellan snabba metadatasökningar och ledigt RAM-minne på ett mycket målinriktat sätt. För webbrelaterade arbetsbelastningar sänker jag värdet något, medan jag höjer det för minneskrävande applikationer. Varje ändring underbygger jag med mätvärden för IO-latenser, cacheträffar och swap-aktivitet. I kombination med vm.swappiness och dirty-parametrarna uppnår jag en stabil minneshantering. På så sätt utnyttjar jag Linux-filsystemets cache effektivt och håller svarstiderna på en tillförlitligt låg nivå även under belastning.


