Articles

Sådan ryddes Cache på Cache

cachen i filsystemet (Page Cache) bruges til at gøre IO-operationer hurtigere. Under visse omstændigheder vil en administrator eller udvikler muligvis manuelt rydde cachen. I denne artikel vil vi forklare, hvordan cachen i filsystemet fungerer. Derefter demonstrerer vi, hvordan man overvåger cache-brugen, og hvordan man rydder cachen. Vi vil lave nogle enkle ydelseseksperimenter for at kontrollere, at cachen fungerer som forventet, og at cache flush og clear-proceduren også fungerer som forventet.

Sådan fungerer Cache i filsystemet

kernen reserverer en vis mængde systemhukommelse til caching af filsystemets diskadgang for at gøre den samlede ydelse hurtigere. Cachen kaldes Sidecachen. Størrelsen på sidecachen kan konfigureres med generøse standardindstillinger, der er aktiveret til at cache store mængder diskblokke. Den maksimale størrelse på cachen og politikkerne for, hvornår data skal fjernes fra cachen, kan justeres med kerneparametre. Denne metode kaldes en skrivebagringscache. Dette betyder, at hvis data skrives til disk, skrives de til hukommelsen i cachen og markeres som beskidt i cachen, indtil den synkroniseres til disk. Kernen opretholder interne datastrukturer for at optimere, hvilke data der skal udvises fra cachen, når der er behov for mere plads i cachen.under systemopkald vil kernen kontrollere, om de ønskede data er gemt i blokke af data i cachen, det ville være et vellykket cache-hit, og dataene returneres fra cachen uden at gøre noget IO til disksystemet. For en cache-miss 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 er nået, begynder baggrundsopgaver at skrive beskidte data til disken for at sikre, at den rydder hukommelsescachen. Disse kan have en indvirkning på ydeevnen af hukommelse og CPU intensive applikationer og kræver tuning af administratorer og eller udviklere.

brug af gratis kommando til at se Cache-brug

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

# free-m

hvad vi ser fra den gratis kommando ovenfor er, at der er 7, 5 GB RAM på dette system. Af dette 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 cirka 100 MB tilfældige data og tilføjer derefter 10 kopier af filen sammen til en large_file.

# dd if=/dev/random of=/root/data_file count=1400000
# For I i `SEK 1 10`; gør echo $i; cat data_file >> large_file; udført

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

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

Vi kan se, at brugen af buffercache er steget fra 667 til 1735 megabyte en omtrent 1 gigabyte stigning i brugen af buffercachen.

Proc Sys VM Drop Caches-kommando

linuk-kernen giver en grænseflade til at slippe cachen lad os prøve disse kommandoer og se virkningen på den frie indstilling.

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

Vi kan se ovenfor, at flertallet af de fleste af dem er buffercachetildelingen blev frigivet med denne kommando.

eksperimentel verifikation af, at Drop Caches fungerer

kan vi udføre en ydeevnevalidering 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 tidskommandoen. Vi udfører denne kommando umiddelbart efter at have ryddet cachen med kommandoerne ovenfor.

det tog 8,4 sekunder at læse filen. Lad os læse det igen nu, at filen skal være i filsystemcachen og se, hvor lang tid det tager nu.

Boom! Det tog kun .2 sekunder sammenlignet med 8,4 sekunder for 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 for den ikke-cachelagrede læsning og .2 sekunder for cachelagret læsning.

konklusion

sidecachen aktiveres automatisk på Linuks-systemer og vil gennemsigtigt gøre IO hurtigere ved at gemme nyligt anvendte data i cachen. Hvis du manuelt vil rydde cachen, kan det gøres nemt ved at sende en echo-kommando til /proc-filsystemet, der angiver kernen for at slippe 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 cache-adfærd før og efter skylning blev også vist.