Articles

Cache wissen onder Linux

de cache van het linux bestandssysteem (Paginacache) wordt gebruikt om Io-bewerkingen sneller te laten verlopen. Onder bepaalde omstandigheden zou een beheerder of ontwikkelaar de cache handmatig willen wissen. In dit artikel zullen we uitleggen hoe de Linux bestandssysteem cache werkt. Dan zullen we laten zien hoe het cachegebruik te controleren en hoe de cache te wissen. We zullen enkele eenvoudige prestatie-experimenten doen om te controleren of de cache werkt zoals verwacht en dat de cache flush en clear procedure ook werkt zoals verwacht.

hoe Linux bestandssysteem Cache werkt

de kernel reserveert een bepaalde hoeveelheid systeemgeheugen voor het cachen van de bestandssysteem schijf toegang om de algehele prestaties sneller te maken. De cache in linux heet de Page Cache. De grootte van de pagina cache is configureerbaar met royale standaardinstellingen ingeschakeld om grote hoeveelheden schijfblokken cache. De maximale grootte van de cache en het beleid van wanneer gegevens uit de cache moeten worden verwijderd, zijn instelbaar met kernelparameters. De linux cache aanpak wordt een write-back cache genoemd. Dit betekent dat als de gegevens aan schijf worden geschreven het aan geheugen in het cachegeheugen wordt geschreven en als vuil in het cachegeheugen wordt gemarkeerd totdat het aan schijf wordt gesynchroniseerd. De kernel onderhoudt interne datastructuren om te optimaliseren welke gegevens uit de cache moeten worden verwijderd wanneer er meer ruimte nodig is in de cache.

tijdens Linux lees systeem aanroepen, zal de kernel controleren of de gevraagde gegevens zijn opgeslagen in blokken van gegevens in de cache, dat zou een succesvolle cache hit en de gegevens zullen worden geretourneerd uit de cache zonder enige Io naar het schijfsysteem. Voor een cache miss de gegevens worden opgehaald van IO-systeem en de cache bijgewerkt op basis van de caching beleid als deze zelfde gegevens is waarschijnlijk opnieuw worden gevraagd.

wanneer bepaalde drempels voor geheugengebruik worden bereikt, zullen achtergrondtaken beginnen met het schrijven van vuile gegevens naar de schijf om er zeker van te zijn dat het geheugencache wordt gewist. Deze kunnen een impact hebben op de prestaties van geheugen-en CPU-intensieve toepassingen en vereisen afstemming door beheerders en of ontwikkelaars.

free command gebruiken om Cachegebruik te bekijken

we kunnen het free command vanaf de commandoregel gebruiken om het systeemgeheugen en de hoeveelheid geheugen die aan caching is toegewezen te analyseren. Zie onderstaande opdracht:

# free-m

wat we zien van het vrije commando hierboven is dat er 7,5 GB RAM op dit systeem is. Hiervan wordt slechts 209 MB gebruikt en 6,5 MB is gratis. 667 MB wordt gebruikt in de buffer cache. Laten we nu proberen om dat aantal te verhogen door een commando uit te voeren om een bestand van 1 Gigabyte te genereren en het bestand te lezen. Het commando hieronder genereert ongeveer 100MB willekeurige gegevens en voegt dan 10 kopieën van het bestand samen in één groot_bestand.

# dd if=/dev/random of=/root/data_file count=1400000
# for i in `seq 1 10`; do echo $i; cat data_file >> large_file; done

nu zullen we ervoor zorgen om dit 1 gig bestand te lezen en dan het gratis commando opnieuw te controleren:

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

We kunnen zien dat het gebruik van de buffercache is gestegen van 667 tot 1735 megabyte een ruwweg 1 gigabyte toename van het gebruik van de buffer cache.

Proc Sys VM Drop Caches Commando

De linux kernel biedt een interface om de cache te laten vallen laten we deze commando ‘ s uitproberen en de impact op de vrije instelling bekijken.

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

hierboven kunnen we zien dat het grootste deel van de buffer cache allocatie werd vrijgegeven met dit commando.

experimentele verificatie dat Drop Caches werkt

kunnen we een prestatievalidatie doen van het gebruik van de cache om het bestand te lezen? Laten we het bestand lezen en terugschrijven naar /dev/null om te testen hoe lang het duurt om het bestand van schijf te lezen. We Timen het met de time command. We doen dit commando onmiddellijk na het wissen van de cache met de commando ‘ s hierboven.

Het duurde 8,4 seconden om het bestand te lezen. Laten we het nu nog eens lezen dat het bestand in de cache van het bestandssysteem moet staan en zien hoe lang het nu duurt.

Boom! Het duurde maar .2 seconden vergeleken met 8,4 seconden om het te lezen wanneer het bestand niet in de cache was geplaatst. Laten we dit nogmaals herhalen door eerst de cache te wissen en dan het bestand 2 keer te lezen.

het werkte perfect zoals verwacht. 8.5 seconden voor de niet-cache lezen en .2 seconden voor het lezen in de cache.

conclusie

De paginacache wordt automatisch ingeschakeld op Linux-systemen en zal Io transparant sneller maken door recent gebruikte gegevens in de cache op te slaan. Als je de cache handmatig wilt wissen, kan dat eenvoudig gedaan worden door een echo commando naar het /proc bestandssysteem te sturen dat aangeeft dat de kernel de cache moet laten vallen en het geheugen moet vrijmaken dat gebruikt wordt voor de cache. De instructies voor het uitvoeren van het commando werden hierboven in dit artikel getoond en de experimentele validatie van het cachegedrag voor en na het spoelen werden ook getoond.