Prestanda

Hur man rensar cache på Linux

Hur man rensar cache på Linux
Linux-filsystemets cache (Page Cache) används för att göra IO-operationer snabbare.  Under vissa omständigheter kanske en administratör eller utvecklare vill rensa cachen manuellt.  I den här artikeln kommer vi att förklara hur Linux File System-cache fungerar.  Sedan kommer vi att visa hur man övervakar cacheanvändningen och hur man rensar cacheminnet.  Vi kommer att göra några enkla prestandaexperiment för att verifiera att cacheminnet fungerar som förväntat och att cache-spolning och tydlig procedur också fungerar som förväntat.

Hur Linux File System Cache fungerar

Kärnan reserverar en viss mängd systemminne för cachning av filsystemets diskåtkomst för att göra den totala prestandan snabbare.  Cachen i Linux kallas Sidcache. Storleken på sidcache kan konfigureras med generösa standardvärden aktiverade för att cacha stora mängder diskblock.  Den maximala storleken på cacheminnet och policyerna för när data ska dras ut från cacheminnet kan justeras med kärnparametrar.  Linux-cachemetoden kallas en återskrivningscache.  Det betyder att om data skrivs till hårddisken skrivs de till minnet i cachen och markeras som smutsiga i cachen tills de synkroniseras med hårddisken.  Kärnan upprätthåller interna datastrukturer för att optimera vilken data som ska dras ut från cache när mer utrymme behövs i cachen.

Under Linux-läs-systemanrop kommer kärnan att kontrollera om den begärda data lagras i datablock i cachen, det skulle vara en lyckad cacheträff och data kommer att returneras från cachen utan att göra någon IO till disksystemet.  För en cachemiss kommer data att hämtas från IO-systemet och cacheminnet uppdateras baserat på cachepolicyerna eftersom samma data sannolikt kommer att begäras igen.

När vissa trösklar för minnesanvändning har uppnåtts kommer bakgrundsuppgifter att börja skriva smutsiga data till hårddisken för att säkerställa att minnet cachas.  Dessa kan påverka prestanda för minne och CPU-intensiva applikationer och kräver justering av administratörer och / eller utvecklare.

Använda kommandot Gratis för att visa Cache-användning

Vi kan använda det fria kommandot från kommandoraden för att analysera systemminnet och mängden minne som tilldelats cachning.  Se kommando nedan:

# gratis -m

Vad vi ser från fri kommandot ovan är att det finns 7.5 GB RAM på detta system.  Av detta används endast 209 MB och 6.5 MB är gratis.  667 MB används i buffertcachen.  Låt oss nu försöka öka antalet genom att köra ett kommando för att generera en fil på 1 Gigabyte och läsa filen.  Kommandot nedan genererar cirka 100 MB slumpmässiga data och bifogar sedan 10 kopior av filen tillsammans till en storfil.

# dd if = / dev / random of = / root / data_file count = 1400000
# för i i 'seq 1 10'; gör echo $ i; katt data_fil >> stor_fil; Gjort

Nu kommer vi att se till att läsa den här 1 Gig-filen och kontrollera sedan kommandot gratis igen:

# cat large_file> / dev / null
# gratis -m

Vi kan se att buffertcacheanvändningen har ökat från 667 till 1735 Megabyte, vilket är en 1 Gigabyte ökning av användningen av buffertcache.

Proc Sys VM Drop Cache-kommando

Linux-kärnan ger ett gränssnitt för att släppa cachen, låt oss testa dessa kommandon och se effekterna på den fria inställningen.

# echo 1> / proc / sys / vm / drop_caches
# gratis -m

Vi kan se ovan att majoriteten av buffertcache-allokeringen frigjordes med detta kommando.

Experimentell verifiering av att Drop Caches fungerar

Kan vi göra en prestandavalidering av att använda cachen för att läsa filen? Låt oss läsa filen och skriva tillbaka den till / dev / null för att testa hur lång tid det tar att läsa filen från disk.  Vi kommer att tid det med tid kommando.  Vi gör det här kommandot omedelbart efter att ha rensat cachen med kommandona ovan.

Det tog 8.4 sekunder för att läsa filen.  Låt oss läsa det igen nu när filen ska finnas i filsystemets cache och se hur lång tid det tar nu.

Bom!  Det tog bara .2 sekunder jämfört med 8.4 sekunder för att läsa den när filen inte cachades.  För att verifiera ska vi upprepa detta igen genom att först rensa cachen och sedan läsa filen två gånger.

Det fungerade perfekt som förväntat.  8.5 sekunder för icke-cache-läsning och .2 sekunder för cachelagrad läsning.

Slutsats

Sidcache aktiveras automatiskt på Linux-system och gör IO transparent snabbare genom att lagra nyligen använda data i cachen.  Om du vill rensa cache manuellt som enkelt kan göras genom att skicka ett ekokommando till / proc-filsystemet som anger att kärnan ska släppa cachen och frigöra minnet som används för cachen.  Instruktionerna för att köra kommandot visas ovan i den här artikeln och den experimentella valideringen av cache-beteendet före och efter spolning visades också.

Hur man visar FPS-räknare i Linux-spel
Linux-spel fick ett stort tryck när Valve tillkännagav Linux-stöd för Steam-klient och deras spel 2012. Sedan dess har många AAA- och indiespel tagit ...
Hur man laddar ner och spelar Sid Meier's Civilization VI på Linux
Introduktion till spelet Civilization 6 är ett modernt intag av det klassiska konceptet som introducerades i serien Age of Empires-spel. Idén var gans...
Hur man installerar och spelar Doom på Linux
Introduktion till Doom Doom-serien har sitt ursprung på 90-talet efter att den ursprungliga Doom släpptes. Det blev en omedelbar hit och från den tide...