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
- bcache
- dm-cache
- Cacheaccelerationsprogramvara (Intels produkt)
externa länkar
- Prestandajämförelse mellan EnhanceIO, bcache och dm-cache ( LKML )
- EnhanceIO, Bcache & DM-Cache benchmarkerad
- Flashcache på Facebook: Från 2010 till 2013 och framåt
- Facebook släpper Flashcache 3.0