Prestatie

Cache wissen op Linux

Cache wissen op Linux
De cache van het Linux-bestandssysteem (Page Cache) wordt gebruikt om IO-bewerkingen sneller te maken.  Onder bepaalde omstandigheden wil een beheerder of ontwikkelaar de cache mogelijk handmatig wissen.  In dit artikel leggen we uit hoe de cache van het Linux-bestandssysteem werkt.  Vervolgens laten we zien hoe u het cachegebruik kunt controleren en hoe u de cache kunt wissen.  We zullen enkele eenvoudige prestatie-experimenten doen om te controleren of de cache werkt zoals verwacht en dat de procedure voor het leegmaken en wissen van de cache ook werkt zoals verwacht.

Hoe de cache van het Linux-bestandssysteem werkt

De kernel reserveert een bepaalde hoeveelheid systeemgeheugen voor het cachen van de schijftoegangen van het bestandssysteem om de algehele prestaties sneller te maken.  De cache in linux heet de Paginacache. De grootte van de paginacache is configureerbaar met royale standaardinstellingen om grote hoeveelheden schijfblokken in de cache op te slaan.  De maximale grootte van de cache en het beleid van wanneer gegevens uit de cache moeten worden verwijderd, kunnen worden aangepast met kernelparameters.  De linux-cachebenadering wordt een terugschrijfcache genoemd.  Dit betekent dat als gegevens naar schijf worden geschreven, deze naar het geheugen in de cache worden geschreven en als vuil worden gemarkeerd in de cache totdat ze naar schijf worden gesynchroniseerd.  De kernel onderhoudt interne gegevensstructuren om te optimaliseren welke gegevens uit de cache moeten worden verwijderd wanneer er meer ruimte nodig is in de cache the.

Tijdens Linux-leessysteemaanroepen zal de kernel controleren of de gevraagde gegevens zijn opgeslagen in gegevensblokken in de cache, dat zou een succesvolle cache-hit zijn en de gegevens zullen worden geretourneerd uit de cache zonder enige IO naar het schijfsysteem te doen.  Voor een cache-misser worden de gegevens opgehaald van het IO-systeem en wordt de cache bijgewerkt op basis van het cachingbeleid, aangezien dezelfde gegevens waarschijnlijk opnieuw worden aangevraagd.

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

Het gratis commando gebruiken om het cachegebruik te bekijken

We kunnen de gratis opdracht van de opdrachtregel gebruiken om het systeemgeheugen en de hoeveelheid geheugen die is toegewezen aan caching te analyseren.  Zie onderstaande opdracht:

# gratis -m

Wat we zien van de vrij commando hierboven is dat er 7 . is.5 GB RAM op dit systeem.  Hiervan wordt slechts 209 MB gebruikt en 6.5 MB is gratis.  667 MB wordt gebruikt in de buffercache.  Laten we nu proberen dat aantal te verhogen door een opdracht uit te voeren om een ​​bestand van 1 Gigabyte te genereren en het bestand te lezen.  De onderstaande opdracht genereert ongeveer 100 MB willekeurige gegevens en voegt vervolgens 10 exemplaren van het bestand samen tot één groot_bestand.

# dd if=/dev/random of=/root/data_file count=1400000
# voor i in 'seq 1 10'; doe echo $i; cat data_file >> large_file; gedaan

Nu zullen we ervoor zorgen dat we dit 1 Gig-bestand lezen en vervolgens de gratis opdracht opnieuw controleren:

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

We kunnen zien dat het gebruik van de buffercache is gestegen van 667 naar 1735 Megabytes, een toename van ongeveer 1 Gigabyte in het gebruik van de buffercache.

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 gratis instelling zien.

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

We kunnen hierboven zien dat het grootste deel van de buffercachetoewijzing is vrijgemaakt met deze opdracht.

Experimentele verificatie dat cache-drop werkt

Kunnen we een prestatievalidatie uitvoeren 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 zullen het timen met de tijd opdracht.  We doen dit commando onmiddellijk na het wissen van de cache met de bovenstaande commando's.

Het duurde 8.4 seconden om het bestand te lezen.  Laten we het nu nog eens lezen dat het bestand zich in de cache van het bestandssysteem zou moeten bevinden en kijken hoe lang het nu duurt.

Boom!  Het duurde alleen .2 seconden vergeleken met 8.4 seconden om het te lezen wanneer het bestand niet in de cache was opgeslagen.  Om dit te verifiëren, herhalen we dit nog een keer door eerst de cache te wissen en vervolgens het bestand 2 keer te lezen.

Het werkte perfect zoals verwacht.  8.5 seconden voor het lezen zonder cache en .2 seconden voor het lezen in de cache.

Conclusie

De paginacache wordt automatisch ingeschakeld op Linux-systemen en zal IO transparanter maken door recent gebruikte gegevens in de cache op te slaan.  Als u de cache handmatig wilt wissen, kunt u dit eenvoudig doen door een echo-opdracht naar het /proc-bestandssysteem te sturen om aan de kernel aan te geven dat de cache moet worden verwijderd en het voor de cache gebruikte geheugen moet worden vrijgemaakt.  De instructies voor het uitvoeren van de opdracht werden hierboven in dit artikel weergegeven en de experimentele validatie van het cachegedrag voor en na het doorspoelen werd ook getoond.

OpenTTD-zelfstudie
OpenTTD is een van de meest populaire simulatiegames voor bedrijven die er zijn. In dit spel moet je een geweldig transportbedrijf creëren. U begint e...
SuperTuxKart voor Linux
SuperTuxKart is een geweldige titel die is ontworpen om je de Mario Kart-ervaring gratis te bieden op je Linux-systeem. Het is behoorlijk uitdagend en...
Strijd om Wesnoth Zelfstudie
The Battle for Wesnoth is een van de meest populaire open source strategiespellen die je op dit moment kunt spelen. Dit spel is niet alleen al heel la...