AWS är en extremt populär och pålitlig molnplattform för att hantera MongoDB-distributioner, men frågan om XFS vs EXT4 har många utvecklare som undrar vilket Linux-filsystem som kommer att ge dem den bästa prestandan för deras applikationer. MongoDB:s officiella guide för distribution till produktion rekommenderar att du använder XFS-filsystemet på Linux, särskilt när du distribuerar WiredTiger-lagringsmotorn. Rekommendationen säger oss dock inte varför vi bör förvänta oss en prestandaökning eller vilken typ av prestationsvinster vi kommer att uppleva. Vi bestämde oss för att gå till botten med det genom att kvantitativt undersöka MongoDB-prestanda på XFS så att du kan jämföra om EXT4 är ett bättre val för dina AWS EC2-instanser.
XFS-filsystem
XFS är ett mycket skalbart, högpresterande 64-bitars journalfilsystem utvecklat vid SGI 1993 och porterat till Linux 2002. Det stöder mycket parallella I/O och filsystemstorlekar upp till 9 Exabyte, och journalför endast filsystemets metadata, inte användardata. Några viktiga prestandaförbättrande funktioner i XFS är:
- Parallell åtkomst via allokeringsgrupper säkerställer att flera trådar kan utföra I/O samtidigt på samma volym.
- Omfattningsbaserad tilldelning minskar fragmentering, metadatastorlek och förbättrar I/O-prestanda genom att tillåta färre och större I/O-operationer.
- Fördröjd tilldelning förbättrar datasammanhang och prestanda. Fragmentering minskas genom att kombinera skrivningar och allokera omfattningar i stora bitar, och filer som skrivs slumpmässigt (som de som är minnesmappade) kan allokeras kontinuerligt
Det finns många fler XFS-funktioner att utforska, och du kan lära dig mer på XFS:s webbplats och XFS User Guide.
Köra prestandatester på MongoDB
Som du kanske har lärt dig i våra tidigare inlägg har vi använt YCSB för att jämföra MongoDB-prestanda, inklusive en detaljerad jämförelse av MMAP-stödda MongoDB-prestanda mellan olika molnleverantörer. Vi bestämde oss för att använda samma arbetsbelastning av YCSB som vi har använt tidigare:Arbetsbelastning A (Tung uppdatering:50 % läser + 50 % uppdateringar). Insättningsfasen för arbetsbelastningen mäter prestandan för 100 % skrivbelastning, medan laddningsfasen mäter prestandan mot den faktiska arbetsbelastningen (50/50 % läs/uppdatering).
Våra tester kördes på sync MongoDB-drivrutinen och Linux-distroen var Amazon Linux (4.4.44-39.55.amzn1.x86_64). Vi plockade upp MongoDB version 3.2.10 som kör WiredTiger för våra tester eftersom WT är där bättre vinster förväntades och körde testerna på två olika hårdvaruriggar:
- Höghastighetsdiskar :AWS EC2 c3.large-instans där MongoDB använde SSD-diskar i RAID 0-konfiguration för lagring (mappar till ScaleGrid-klusterstorleken HighPerfLarge).
- Mediumhastighetsdiskar :AWS EC2 m3.medium-instans där MongoDB använde EBS (Elastic Block Store) IOPS-provisionerad disk med 300 IOPS (mappar till ScaleGrid-klusterstorlek Medium).
Obs:Alla typer av prestandatester i virtualiserade miljöer bör tas med en nypa salt. Vårt mål här är inte att jämföra prestandasiffror för dessa miljöer, utan att tillhandahålla några kvantitativa mätningar av prestandaskillnader mellan EXT4 och XFS i samma virtualiserade miljö.
Höghastighets SSD-disk
Vi körde följande test på vår högpresterande rigg:
- Infogat 6 miljoner poster vid olika serverbelastningar (genom att variera antalet YCSB-klienttrådar).
- Körde arbetsbelastning vid driftsantalet på 10 miljoner poster vid olika serverbelastningar.
SSD-diskprestandaresultat
Genomströmnings-/latensegenskaper för infogning av 6M-poster i den högpresterande konfigurationen:
Genomströmnings-/latensegenskaper för 10 miljoner skriv-/uppdateringsoperationer på högpresterande konfiguration:
SSD-diskobservationer
- XFS är spektakulärt snabbt under både insättningsfasen och exekveringen av arbetsbelastningen. Med lägre trådantal är det så mycket som 50 % snabbare än EXT4. När belastningen ökade begränsades båda filsystemen av genomströmningen av den underliggande hårdvaran, men XFS behöll fortfarande sin ledning.
- Latensen för både XFS och EXT4 var jämförbar i båda körningarna. Observera att alla siffror är i mikrosekunder.
Långsammare EBS Provisioned IOPS Disk (300 IOPS)
Följande test utfördes på vår medelstora prestandarigg:
- Infogat 3 miljoner poster vid olika serverbelastningar (genom att variera antalet YCSB-klienttrådar).
- Körde arbetsbelastning vid driftsantalet på 5 miljoner poster vid olika serverbelastningar.
Med tanke på vår erfarenhet av den avancerade konfigurationen förväntade vi oss att XFS skulle ha en anständig ledning även i den här riggen.
IOPS-diskprestandaresultat
Genomströmnings-/latensegenskaper för infogning av 3M-poster på mediumkonfigurationen:
Genomströmnings-/latensegenskaper för 5M skriv-/uppdateringsoperationer på mediumkonfigurationen:
IOPS Disk Observations
- XFS är jämförbart, men något efter EXT4 på den medelstora konfigurationen. Det verkar som om prestandaoptimeringarna av XFS inte gör någon skillnad på denna nivå av systemresurser. Detta är en viktig observation om du funderar på att distribuera XFS på mindre instanser i hopp om förbättrad prestanda.
XFS vs EXT4 på AWS EC2
I prestandatermer är XFS verkligen en kraftmultiplikator när den paras ihop med höghastighetsdiskar som den kan dra verklig fördel av. För system med låg till medelhög nivå verkar det inte kunna göra mycket för att förbättra din prestanda.