Flashcache

Flashcache är en diskcache -komponent för Linux-kärnan , ursprungligen utvecklad av Facebook sedan april 2010, och släpptes som öppen källkod 2011. Sedan januari 2013 finns det en gaffel av Flashcache, som heter EnhanceIO och utvecklats av sTec, Inc. Sedan 2015 som gaffeln blev ounderhållen och den gafflas igen och underhålls av enskilda.

Flashcache fungerar genom att använda flashminne , en USB-flashenhet , SD-kort , CompactFlash eller någon form av bärbart flash-masslagringssystem som en beständig cache för återskrivning. En intern SSD kan också användas för att öka prestandan.

Översikt

Genom att använda flashminne ( NAND-minnesenheter ) för cachelagring kan Linux-kärnan betjäna slumpmässig disk IO med bättre prestanda än utan cachen. Denna cachning gäller för allt diskinnehåll, inte bara sidfilen eller systembinärfiler. Flashminnesbaserade enheter är vanligtvis en storlek snabbare än snurrande hårddiskar för slumpmässig IO, men med mindre fördelar eller till och med långsammare vid sekventiell läsning/skrivning. Som standard cachelagrar flashcache alla IO:er i full blockstorlek, men kan konfigureras för att endast cache slumpmässig IO medan sekventiella IO ignoreras.

Liknande teknik finns i Microsoft Windows som ReadyBoost sedan Windows Vista .

Genomförande

Flashcache är byggt ovanpå Linux-kärnans enhetsmappare . Datastrukturen för cachen är en uppsättningsassociativ hashtabell , där cachen är uppdelad i ett antal uppsättningar med fast storlek (buckets), med hjälp av linjär sondering inom en uppsättning för att hitta block. Enhetsmappningsskiktet delar upp alla I/O-förfrågningar i blockstorlekar innan förfrågningarna skickas till cachelagret. [ citat behövs ]

När en skrivbegäran inträffar markeras motsvarande cacheblock som smutsigt; smutsiga cacheblock skrivs lätt till disken i bakgrunden. Det finns några parametrar för att styra återskrivningspolicyn : dirty-threshold, tomgång och contiguity med andra dirty block som ska skrivas tillbaka. [ citat behövs ]

Begränsningar

Det finns några begränsningar som införs av implementeringen av flashcache: [ citat behövs ]

Atomicitet
Cache-blockskrivningar är för närvarande icke-atomära.
TRIM-stöd
ATA TRIM- kommandon för att optimera flashminnet stöds inte ännu.
Cache-föroreningsskydd
En process kan markeras som icke-cachebar för att förhindra flashcache-cache sina förfrågningar; Men om en process som markerat sig som icke-cachebar dör, har flashcache inget sätt att rensa upp.
Justering
Att förlita sig på enhetsmapparen resulterade i cachningsprestandaproblem och ingen cachning av skrivningar som inte är multipla av 4 KiB. I första hand påverkar detta Xen-hypervisorn. Således EnhanceIO gått bort från enhetskartläggningsintegrationen, vilket ger högre prestanda för ooptimala användningsfall. [ citat behövs ]
Write-around-läslatenspåverkan
i skrivningsläge förbigår alla skrivningar cachen för hög konsistens. Den nuvarande implementeringen hämtar läsningar genom SSD-enheten och levererar dem sedan till den faktiska läsaren. Detta innebär att tidigare uncachade block alltid måste gå till SSD-enheten först, vilket orsakar en konstant skriv-IO. Inte ett problem på företags-SSD eller avancerade PCIe-enheter som Facebook använder, men försämrar prestandan på lägre SSD.
Omskrivning av läscache-uppvärmningsfas
i skrivningsläge FlashCache har ingen information för att jämföra åldern på cachade sidor med de på disken. (1) Eftersom enheten kunde ha monterats utanför FlashCache (2) Eftersom inga skrivningar spåras i detta läge. Detta resulterar i en tom cache efter varje volymaktivering (dvs: omstart). Prestanda kommer att försämras tills alla heta områden har cachelagrats.

Se även

externa länkar