Efter att ha publicerat vår artikel om Microsofts opt-in native NVMe-funktion på Windows Server 2025 , fick vi flera förfrågningar om en direkt jämförelse av lagringsprestanda mellan Windows Server 2025 med native NVMe och ett Linux-baserat server-OS. En särskilt entusiastisk Reddit-användare erbjöd oss till och med öl för att göra det! Eftersom det uppenbarligen inte fanns några andra rimliga alternativ, bestämde vi oss för att köra samma tester på Linux.
För länge sedan, i en OS-version långt, långt borta
Linuxkärnan har stödt NVMe sedan version 3.3 , som släpptes i mars 2012. På liknande sätt har protokollet stödts på Windows Server (icke-nativt, via SCSI-översättning) sedan 2012 R2, runt oktober 2013. Mer än ett decennium senare diskuterar användare fortfarande om Windows eller Linux är bättre för lagring, så vi tänkte att vi skulle lägga lite mer olja på elden med benchmarkresultat som jämför de två.
Eftersom vi har testresultat för Windows Server 2025 med både icke-nativa och nativa lagringsstackar, tyckte vi att det var lämpligt att utvärdera två lagringsstackar på Linux. För våra FIO-riktmärken använde vi både libaio och io_uring, två av de mest populära API:erna för lagringstransaktioner. Även om io_uring är betydligt nyare och erbjuder många förbättringar för asynkron I/O, används libaio fortfarande flitigt för sin flexibilitet och användarvänlighet (Didona, Pfefferle, Ioannou, Metzler och Trivedi, 2022). Fullständiga arkitekturöversikter för båda stackarna ligger utanför ramen för den här artikeln, men vi tillhandahåller fortfarande resultat för en direkt jämförelse.
Testa NVMe på Ubuntu Server 24.04.4 LTS
Vår hårdvaruplattform för denna jämförelse är samma server som används i vår artikel om Windows Server 2025 native NVMe . För att säkerställa maximal dataöverföringshastighet och konsekventa resultat är den utrustad med två 128-kärniga AMD EPYC 9754-processorer, 768 GB DDR5-minne med 4800 MT/s och femton 30.72 TB Solidigm P5316 NVMe SSD-diskar med PCIe 4.0 i en JBOD-konfiguration.
Som vi nämnde i vår tidigare artikel har Solidigm P5316 en indirektionsenhetsstorlek på 64 kilobyte, vilket innebär att skrivprestandan för mindre storlekar (som 4K-tester) ofta är sämre än förväntat. Återigen körde vi olika testmönster vid blockstorlekar på 4K, 64K och 128K för att ge ett brett spektrum av resultat för läs- och skrivoperationer.
Vi valde Ubuntu Server 24.04.4 LTS som vårt Linux-exempel på grund av dess popularitet och långsiktiga stöd. Den körs som standard på Linuxkärnan 6.8, vilket inte är den nyaste eller mest avancerade, men sannolikt representerar en stor del av installationerna världen över.
Höjdpunkter
- Windows Server 2025 native NVMe vinner i tre av fyra läsprestandatester
- Lägre CPU-användning observerad med Windows Server under de flesta tester
- Ubuntu Server 24.04.4 LTS vinner i tre av fyra skrivprestandatester
| metrisk | Slumpmässig 4K | Slumpmässig 64K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows icke-inbyggt | Windows Native | Linux Libaio | Linux io_uring | Windows icke-inbyggt | Windows Native | Linux Libaio | Linux io_uring | |
| Slumpmässig läsning | ||||||||
| Bandbredd (GiB/s) | 6.1 | 10.058 | 9.198 | 9.504 | 74.291 | 91.165 | 77.517 | 77.7 |
| IOPS | 1,598,959 | 2,636,516 | 2,411,000 | 2,491,000 | 1,217,176 | 1,493,637 | 1,270,000 | 1,273,000 |
| Genomsnittlig latens (ms) | 0.169 | 0.104 | 0.198 | 0.192 | 0.239 | 0.207 | 0.377 | 0.376 |
| Total CPU-användning (%) | 72.67 | 74.22 | 99.77 | 99.76 | 68.44 | 65.11 | 83.16 | 84.72 |
| metrisk | Sekventiell 64K | Sekventiell 128K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows icke-inbyggt | Windows Native | Linux Libaio | Linux io_uring | Windows icke-inbyggt | Windows Native | Linux Libaio | Linux io_uring | |
| Sekventiell läsning | ||||||||
| Bandbredd (GiB/s) | 35.596 | 35.623 | 31.867 | 31.433 | 86.791 | 92.562 | 97.05 | 97 |
| IOPS | 583,192 | 583,638 | 522,000 | 515,000 | 710,978 | 758,252 | 795,000 | 795,000 |
| Genomsnittlig latens (ms) | 0.809 | 0.812 | 0.919 | 0.932 | 0.613 | 0.608 | 0.603 | 0.604 |
| Total CPU-användning (%) | 44.89 | 37.11 | 53.94 | 41.74 | 61.56 | 49.56 | 75.14 | 76.90 |
| metrisk | Slumpmässig 4K | Slumpmässig 64K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows icke-inbyggt | Windows Native | Linux Libaio | Linux io_uring | Windows icke-inbyggt | Windows Native | Linux Libaio | Linux io_uring | |
| Slumpmässig Skriv | ||||||||
| Bandbredd (GiB/s) | 1.803 | 1.756 | 1.876 | 1.815 | 7.654 | 7.655 | 7.652 | 7.651 |
| IOPS | 472,725 | 460,383 | 492,000 | 476,000 | 125,391 | 125,406 | 125,000 | 125,000 |
| Genomsnittlig latens (ms) | 0.992 | 1.028 | 0.974 | 1.007 | 3.814 | 3.816 | 3.827 | 3.828 |
| Total CPU-användning (%) | 26.00 | 20.67 | 45.76 | 22.80 | 12.22 | 9.33 | 20.07 | 10.90 |
| metrisk | Sekventiell 64K | Sekventiell 128K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows icke-inbyggt | Windows Native | Linux Libaio | Linux io_uring | Windows icke-inbyggt | Windows Native | Linux Libaio | Linux io_uring | |
| Sekventiell Skriv | ||||||||
| Bandbredd (GiB/s) | 44.67 | 50.087 | 52.283 | 52.25 | 50.477 | 50.079 | 52 | 52.083 |
| IOPS | 731,859 | 820,603 | 856,000 | 856,000 | 413,495 | 410,232 | 426,000 | 427,000 |
| Genomsnittlig latens (ms) | 0.399 | 0.558 | 0.560 | 0.560 | 1.022 | 1.149 | 1.126 | 1.125 |
| Total CPU-användning (%) | 70.44 | 57.78 | 61.88 | 62.75 | 58.44 | 47.33 | 61.49 | 44.27 |
Obs: Våra Linux IOPS-resultat är avrundade till närmaste tusental på grund av skillnader i FIO-rapportering mellan Windows Server 2025 och Ubuntu Server 24.04.4 LTS. Resultat för bandbredd, latens och CPU-användning avrundas konsekvent över båda plattformarna.
Siffrorna ljuger inte
Vi ser omedelbart att Ubuntu inte överträffar Windows i alla kategorier. Medan libaio och io_uring levererade utmärkt dataflöde i våra tester av slumpmässig läsning av bandbredd, matchade de inte prestandan hos Microsofts inbyggda NVMe-stack. Windows NT-kärnan slog Linux-kärnan med cirka 17 % i våra tester av slumpmässig läsning av 64K, med vinnande 91.165 GiB/s på inbyggd NVMe jämfört med io_urings bästa på 77.7 GiB/s.
Allt hopp är dock inte ute för Torvalds tekniska skräck. Ubuntu Server slog Windows Server med jämn marginal i ett av våra läsprestandatest: det sekventiella 128K-testet. Här presterade Linux libaio bäst med 97.05 GiB/s, jämfört med Windows native NVMe med 92.562 GiB/s, en skillnad på cirka 5 %. Detta indikerar att Linux kan ha en liten fördel när det gäller att hantera blockstorlekar som är större än hårddiskarnas indirekta enheter.
Den slumpmässiga skrivbandbredden var konsekvent i både Linux och Windows, särskilt i 64K-prestandatester. De bästa och sämsta resultaten från dessa tester skilde sig endast åt med 0.05 %, vilket tyder på att alla lagringsstackar utnyttjade hårddiskarnas fulla potential.
Intressant nog vann Linux 6.8-kärnan i sekventiella skrivbandbreddstester för blockstorlekar på 64 K och 128 K. Även om skillnaden inte var enorm, slog programvarustackarna med öppen källkod Windows Servers inbyggda NVMe med cirka 2 GiB/s i båda fallen.
Latensresultaten följde generellt resultaten från dataflödestester, vilket bäst visas av skillnaden i medelvärden för slumpmässiga läsningar. Olyckligtvis för Tux hade libaio och io_uring högre latens, med den största skillnaden på 0.17 ms mellan Windows Server native NVMe (0.207 ms) och libaio (0.377 ms) för 64 K slumpmässiga läsningar.
Den kanske mest chockerande uppenbarelsen från våra testresultat är den enorma skillnaden i CPU-användning mellan Windows Server 2025 och Ubuntu Server 24.04.4 LTS. I tre av fyra testresultat med slumpmässig och sekventiell läsning hade Windows Server native NVMe den lägsta CPU-användningen. Det mest anmärkningsvärda resultatet sågs under testkörningen med 128K sekventiell läsning, där Windows använde 27.34 % mindre än Linux.
CPU-användningen med libaio och io_uring presterade något bättre i slumpmässiga och sekventiella skrivtester, men det var fortfarande inte tillräckligt för att förhindra att nativ NVMe på Windows Server vann i tre av prestandatesterna. Ett anmärkningsvärt undantag var libaios CPU-användning under slumpmässig skrivning i 4K-testet, som nådde 45.76 % av systemets CPU, medan de andra lagringsstackarna låg runt 20 %.
Vinnare Vinnare, CPU-middag
Som våra resultat visar, presterar Windows Server och Ubuntu Server nära varandra i både slumpmässiga och sekventiella prestandatester vid olika blockstorlekar. När det gäller bandbredd presterade Windows Server 2025 med nativt NVMe generellt bättre än Linux i de flesta lästest, medan Linux svarade med något bättre resultat i våra skrivtester. Våra latenssiffror berättade en liknande historia, men den verkliga höjdpunkten var Windows Server 2025:s CPU-effektivitet vid användning av nativt NVMe.
Microsoft har uppenbarligen lagt ner mycket arbete på att göra sin senaste lagringsstack till den bästa möjliga, och även om den inte alltid vinner mot libaio och io_uring, så gör den en bra ifrån sig. Även om dessa resultat inte är definitiva för alla användningsfall och serverkonfigurationer, kan de hjälpa serveradministratörer att avgöra om de ska driftsätta en Windows- eller Linux-server när lagringsprestanda är viktigare än OS-kompatibilitet.
Låt oss veta vad du tycker om dessa resultat genom att kommentera på våra sociala plattformar eller SR Discord ! Förväntade du dig att Windows Server skulle göra så bra ifrån sig i våra tester, eller hejade du på Linux? Skulle du vilja se fler Linux-serverdistributioner eller kärnor testade? Vi letar alltid efter din feedback, och tester som efterfrågas av läsare som dessa blir ofta våra favoritartiklar.
Referensprojekt
Didona, D., Pfefferle, J., Ioannou, N., Metzler, B., & Trivedi, A. (13 juni 2022). Att förstå moderna lagrings-API:er: En systematisk studie av libaio, SPDK och io_uring. SYSTOR '22, 120-121. Hämtad 3 april 2026, från https://atlarge-research.com/pdfs/2022-systor-apis.pdf




Amazon