Hvordan tømme cache på Linux

Hvordan tømme cache på Linux
Linux File System Cache (Page Cache) brukes til å gjøre IO -operasjoner raskere. Under visse omstendigheter kan en administrator eller utvikler kanskje tømme hurtigbufferen manuelt. I denne artikkelen vil vi forklare hvordan Linux File System Cache fungerer. Da vil vi demonstrere hvordan du kan overvåke hurtigbufferen og hvordan du kan tømme hurtigbufferen. Vi vil gjøre noen enkle ytelseseksperimenter for å bekrefte at hurtigbufferen fungerer som forventet, og at cache -flush og klar prosedyre også fungerer som forventet.

Hvordan Linux File System Cache fungerer

Kjernen forbeholder seg en viss mengde systemminne for å hurtig. Cachen i Linux kalles Sidebuffer. Størrelsen på sidebufferen er konfigurerbar med sjenerøse standardverdier som er aktivert for å cache store mengder diskblokker. Den maksimale størrelsen på hurtigbufferen og retningslinjene for når du skal kaste ut data fra hurtigbufferen er justerbare med kjerneparametere. Linux-cache-tilnærmingen kalles en writ-back cache. Dette betyr at hvis data er skrevet til disk, er det skrevet til minne i hurtigbufferen og merket som skitten i hurtigbufferen til den er synkronisert til disk. Kjernen opprettholder interne datastrukturer for å optimalisere hvilke data som skal kastes ut fra cache når mer plass er nødvendig i hurtigbufferen.

Under Linux -lesesystemanrop vil kjernen sjekke om dataene som etterspørres, er lagret i blokker med data i hurtigbufferen, det vil være en vellykket hurtigbuffer og dataene vil bli returnert fra hurtigbufferen uten å gjøre noe IO til disksystemet. For en cache -glipp vil dataene bli hentet fra IO -systemet og hurtigbufferen oppdatert basert på hurtigbufringspolitikkene, da de samme dataene sannsynligvis vil bli bedt om igjen.

Når visse terskler for minnebruk er nådd bakgrunnsoppgaver, vil du begynne å skrive skitne data til disk for å sikre at den rydder minnebufferen. Disse kan ha innvirkning på ytelse av hukommelse og CPU -intensive applikasjoner og krever innstilling av administratorer og eller utviklere.

Bruke gratis kommando for å se cache -bruk

Vi kan bruke den gratis kommandoen fra kommandolinjen for å analysere systemminnet og mengden minne som er tildelt hurtigbufring. Se kommando nedenfor:

# gratis -m

Det vi ser fra gratis Kommando ovenfor er at det er 7.5 GB RAM på dette systemet. Av dette brukes bare 209 MB og 6.5 MB er gratis. 667 MB brukes i bufferbufferen. La oss nå prøve å øke antallet ved å kjøre en kommando for å generere en fil med 1 gigabyte og lese filen. Kommandoen nedenfor vil generere omtrent 100 MB tilfeldige data og deretter legge til 10 kopier av filen sammen til en Large_file.

# dd if =/dev/tilfeldig av =/root/data_file count = 1400000
# for jeg i 'seq 1 10'; gjør ekko $ i; CAT DATA_FILE >> stor_file; Ferdig

Nå vil vi sørge for å lese denne 1 Gig -filen og deretter sjekke den gratis kommandoen igjen:

# katt stor_file> /dev /null
# gratis -m

Vi kan se bruk av bufferbuffer.

Proc Sys VM Drop Caches Command

Linux -kjernen gir et grensesnitt for å slippe hurtigbufferen, la oss prøve ut disse kommandoene og se virkningen på gratisinnstillingen.

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

Vi kan se over at flertallet av tildelingen av bufferbuffer ble frigjort med denne kommandoen.

Eksperimentell bekreftelse som slipper cacher fungerer

Kan vi gjøre en ytelsesvalidering av å bruke hurtigbufferen for å lese filen? La oss lese filen og skrive den tilbake til /dev /null for å teste hvor lang tid det tar å lese filen fra disken. Vi vil tid til det med tid kommando. Vi gjør denne kommandoen umiddelbart etter å ha tømt hurtigbufferen med kommandoene ovenfor.

Det tok 8.4 sekunder å lese filen. La oss lese den igjen nå som filen skal være i filsystembufferen og se hvor lang tid det tar nå.

Boom! Det tok bare .2 sekunder sammenlignet med 8.4 sekunder å lese den når filen ikke ble hurtigbufret. For å bekrefte la oss gjenta dette igjen ved å først tømme hurtigbufferen og deretter lese filen 2 ganger.

Det fungerte perfekt som forventet. 8.5 sekunder for den ikke-hurtige lesen og .2 sekunder for hurtigbufringen.

Konklusjon

Sidebufferen er automatisk aktivert på Linux -systemer og vil transparent gjøre IO raskere ved å lagre nylig brukte data i cachen. Hvis du vil tømme hurtigbufferen manuelt som kan gjøres enkelt ved å sende en ekkokommando til /proc -filsystemet som indikerer for kjernen for å slippe hurtigbufferen og frigjøre minnet som brukes til hurtigbufferen. Instruksjonene for å kjøre kommandoen ble vist ovenfor i denne artikkelen, og eksperimentell validering av cache -oppførselen før og etter at spyling også ble vist.