Articles

hur man rensar Cache på Linux

linux-filsystemets cache (Sidcache) används för att göra IO-operationer snabbare. Under vissa omständigheter kanske en administratör eller utvecklare vill rensa cacheminnet manuellt. I den här artikeln kommer vi att förklara hur Linux-filsystemets cache fungerar. Då 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 cacheminnet fungerar som förväntat och att cache-spolningen och clear-proceduren 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 övergripande prestanda snabbare. Cachen i linux kallas Sidcachen. Storleken på sidcachen kan konfigureras med generösa standardinställningar aktiverade för att cacha stora mängder diskblock. Cachens maximala storlek och policyn för när du ska vräka data från cacheminnet är justerbara med kärnparametrar. Linux cache-metoden kallas en skrivback-cache. Detta innebär att om data skrivs till disk skrivs det till minnet i cacheminnet och markeras som smutsigt i cacheminnet tills det synkroniseras till disk. Kärnan upprätthåller interna datastrukturer för att optimera vilka data som ska kastas ut från cacheminnet när mer utrymme behövs i cacheminnet.

under Linux-läsanrop kommer kärnan att kontrollera om de begärda uppgifterna lagras i block av data i cacheminnet, det skulle vara en lyckad cache-träff och data kommer att returneras från cacheminnet utan att göra någon IO till disksystemet. För en cache miss data kommer att hämtas från IO-systemet och cachen uppdateras baserat på caching politik som samma data kommer sannolikt att begäras igen.

När vissa tröskelvärden för minnesanvändning nås börjar bakgrundsuppgifter skriva smutsiga data till disken för att säkerställa att det rensar minnescachen. Dessa kan påverka prestanda för minnes-och CPU-intensiva applikationer och kräver inställning av administratörer och eller utvecklare.

använda gratis kommando för att visa Cacheanvändning

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

# free-m

vad vi ser från det fria 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 det numret 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ässig data och lägger sedan till 10 kopior av filen tillsammans i en large_file.

# dd if=/dev/random of=/root/data_file count=1400000
# för i i `seq 1 10`; gör eko $i; cat data_file >> large_file; klar

nu ska vi se till att läsa den här 1 gig-filen och sedan kontrollera det fria kommandot igen:

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

Vi kan se buffertcacheanvändningen har gått upp från 667 till 1735 megabyte en ungefär 1 gigabyte ökning av användningen av buffertcachen.

Proc Sys VM Drop cachar kommando

linux-kärnan ger ett gränssnitt för att släppa cacheminnet låt oss prova dessa kommandon och se påverkan på den fria inställningen.

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

Vi kan se ovan att de flesta av dem är buffertcachetilldelningen befriades med detta kommando.

experimentell verifiering som Drop cachar fungerar

kan vi göra en prestandavalidering av att använda cacheminnet 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 disken. Vi tar tid med tidskommandot. Vi gör detta kommando omedelbart efter att ha rensat cacheminnet med kommandona ovan.

det tog 8,4 sekunder att läsa filen. Låt oss läsa den igen nu när filen ska vara i filsystemets cache och se hur lång tid det tar nu.

Boom! 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 låt oss upprepa detta igen genom att först rensa cacheminnet och sedan läsa filen 2 gånger.

det fungerade perfekt som förväntat. 8.5 sekunder för icke-cachade läsa och .2 sekunder för cachad läsning.

slutsats

sidcachen aktiveras automatiskt på Linux-system och kommer transparent att göra IO snabbare genom att lagra nyligen använda data i cacheminnet. Om du vill manuellt rensa cacheminnet som enkelt kan göras genom att skicka ett echo-kommando till /proc-filsystemet som indikerar att kärnan släpper cacheminnet och frigör minnet som används för cacheminnet. Instruktionerna för att köra kommandot visades ovan i den här artikeln och den experimentella valideringen av cachebeteendet före och efter spolning visades också.