Ydeevne

Sådan ryddes cache på Linux

Sådan ryddes cache på Linux
Linux-filsystemets cache (Page Cache) bruges til at gøre IO-operationer hurtigere.  Under visse omstændigheder vil en administrator eller udvikler muligvis rydde cachen manuelt.  I denne artikel vil vi forklare, hvordan Linux File System cache fungerer.  Derefter demonstrerer vi, hvordan man overvåger cache-brugen, og hvordan man rydder cachen.  Vi vil udføre nogle enkle præstationseksperimenter for at kontrollere, at cachen fungerer som forventet, og at cacheens flush og klare procedure også fungerer som forventet.

Sådan fungerer Linux File System Cache

Kernen forbeholder sig en vis mængde systemhukommelse til cache af filsystemets diskadgang for at gøre den samlede ydelse hurtigere.  Cachen i linux kaldes Sidecache. Størrelsen på sidecachen kan konfigureres med generøse standarder, der er aktiveret til at cache store mængder diskblokke.  Den maksimale størrelse på cachen og politikkerne for, hvornår data skal udvises fra cachen, kan justeres med kerneparametre.  Linux-cache-tilgangen kaldes en tilbagekoblingscache.  Dette betyder, at hvis data skrives til disken, skrives de til hukommelsen i cachen og markeres som snavset i cachen, indtil de synkroniseres med disken.  Kernen opretholder interne datastrukturer for at optimere, hvilke data der skal udvises fra cachen, når der er brug for mere plads i cachen.

Under Linux-læsningssystemopkald kontrollerer kernen, om de anmodede data er gemt i datablokke i cachen, hvilket ville være et vellykket cache-hit, og dataene returneres fra cachen uden at gøre nogen IO til disksystemet.  Ved en cache-savning hentes dataene fra IO-systemet, og cachen opdateres baseret på cachepolitikkerne, da de samme data sandsynligvis vil blive anmodet om igen.

Når visse tærskler for hukommelsesforbrug nås, begynder baggrundsopgaver at skrive beskidte data til disken for at sikre, at det rydder hukommelsescachen.  Disse kan have indflydelse på ydeevnen for hukommelse og CPU-intensive applikationer og kræver indstilling af administratorer og / eller udviklere.

Brug gratis kommando til at se cache-brug

Vi kan bruge den gratis kommando fra kommandolinjen for at analysere systemhukommelsen og den mængde hukommelse, der er allokeret til caching.  Se kommando nedenfor:

# gratis -m

Hvad vi ser fra ledig kommandoen ovenfor er, at der er 7.5 GB RAM på dette system.  Heraf bruges kun 209 MB og 6.5 MB er gratis.  667 MB bruges i buffercachen.  Lad os nu prøve at øge dette antal ved at køre en kommando for at generere en fil på 1 Gigabyte og læse filen.  Kommandoen nedenfor genererer ca. 100 MB tilfældige data og tilføjer derefter 10 kopier af filen sammen til en stor_fil.

# dd if = / dev / random of = / root / data_file count = 1400000
# for i i 'seq 1 10'; gør ekko $ i; kat data_fil >> stor_fil; Færdig

Nu sørger vi for at læse denne 1 Gig-fil og derefter kontrollere den gratis kommando igen:

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

Vi kan se, at buffercache-brugen er steget fra 667 til 1735 Megabyte, hvilket er en stigning på ca. 1 Gigabyte i brugen af ​​buffercachen.

Proc Sys VM Drop Cache-kommando

Linux-kernen giver en grænseflade til at droppe cachen, lad os prøve disse kommandoer og se indvirkningen på den gratis indstilling.

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

Vi kan se ovenfor, at størstedelen af ​​buffercache-tildelingen blev frigivet med denne kommando.

Eksperimentel verifikation af, at Drop Caches fungerer

Kan vi foretage en præstationsvalidering af at bruge cachen til at læse filen? Lad os læse filen og skrive den tilbage til / dev / null for at teste, hvor lang tid det tager at læse filen fra disken.  Vi vil time det med tid kommando.  Vi udfører denne kommando straks efter at have ryddet cachen med ovenstående kommandoer.

Det tog 8.4 sekunder til at læse filen.  Lad os læse det igen nu, hvor filen skal være i filsystemets cache og se, hvor lang tid det tager nu.

Boom!  Det tog kun .2 sekunder sammenlignet med 8.4 sekunder til at læse den, når filen ikke blev cachelagret.  For at bekræfte, lad os gentage dette igen ved først at rydde cachen og derefter læse filen 2 gange.

Det fungerede perfekt som forventet.  8.5 sekunder til ikke-cache-læsning og .2 sekunder til cachelagret læsning.

Konklusion

Sidecachen er automatisk aktiveret på Linux-systemer og vil transparent gøre IO hurtigere ved at gemme nyligt anvendte data i cachen.  Hvis du vil rydde cachen manuelt, kan det nemt gøres ved at sende en ekkokommando til / proc-filsystemet, der angiver til kernen for at droppe cachen og frigøre den hukommelse, der bruges til cachen.  Instruktionerne til kørsel af kommandoen blev vist ovenfor i denne artikel, og den eksperimentelle validering af cacheopførelsen før og efter skylning blev også vist.

Sådan vises OSD-overlay i fuldskærms Linux-apps og -spil
Afspilning af fuldskærmsspil eller brug af apps i distraktionsfri fuldskærmstilstand kan afskære dig fra relevante systemoplysninger, der er synlige i...
Top 5 spiloptagelseskort
Vi har alle set og elsket streaming af gameplay på YouTube. PewDiePie, Jakesepticye og Markiplier er kun nogle af de bedste spillere, der har tjent mi...
Sådan udvikler du et spil på Linux
For et årti siden ville ikke mange Linux-brugere forudsige, at deres foretrukne operativsystem en dag ville være en populær spilplatform til kommercie...