Po opublikowaniu naszego artykułu o opcjonalnej, natywnej funkcji NVMe firmy Microsoft w systemie Windows Server 2025 otrzymaliśmy wiele próśb o bezpośrednie porównanie wydajności pamięci masowej między systemem Windows Server 2025 z natywnym NVMe a serwerowym systemem operacyjnym opartym na Linuksie. Jeden z wyjątkowo entuzjastycznych użytkowników Reddita zaoferował nam nawet piwo za tę usługę! Ponieważ oczywiście nie było innych rozsądnych opcji, postanowiliśmy przeprowadzić te same testy na Linuksie.
Dawno temu, w wersji systemu operacyjnego daleko, daleko stąd
Jądro Linux obsługuje NVMe od wersji 3.3 , wydanej w marcu 2012 r. Podobnie protokół jest obsługiwany w systemie Windows Server (nie natywnie, za pośrednictwem translacji SCSI) od 2012 R2, czyli od października 2013 r. Ponad dekadę później użytkownicy wciąż spierają się, który system pamięci masowej jest lepszy: Windows czy Linux. Pomyśleliśmy więc, że dodamy trochę oliwy do ognia, prezentując wyniki testów porównawczych obu systemów.
Ponieważ dysponujemy wynikami testów dla systemu Windows Server 2025, wykorzystując zarówno natywne, jak i nienatywne stosy pamięci masowej, uznaliśmy za stosowne przetestowanie dwóch stosów pamięci masowej w systemie Linux. Do testów FIO wykorzystaliśmy zarówno libaio, jak i io_uring – dwa z najpopularniejszych interfejsów API do obsługi transakcji pamięci masowej. Chociaż io_uring jest znacznie nowszy i oferuje wiele ulepszeń w zakresie asynchronicznego wejścia/wyjścia, libaio pozostaje szeroko stosowany ze względu na swoją elastyczność i łatwość obsługi (Didona, Pfefferle, Ioannou, Metzler i Trivedi, 2022). Pełne omówienie architektury obu stosów wykracza poza zakres tego artykułu, ale nadal przedstawiamy wyniki umożliwiające bezpośrednie porównanie.
Testowanie NVMe na Ubuntu Server 24.04.4 LTS
Platformą sprzętową, którą wykorzystaliśmy w tym porównaniu, jest ten sam serwer, który wykorzystaliśmy w naszym artykule o natywnym interfejsie NVMe dla systemu Windows Server 2025. Aby zapewnić maksymalną przepustowość i spójne wyniki, serwer wyposażono w dwa 128-rdzeniowe procesory AMD EPYC 9754, 768 GB pamięci DDR5 o przepustowości 4800 MT/s oraz piętnaście dysków SSD Solidigm P5316 NVMe o pojemności 30.72 TB z interfejsem PCIe 4.0 w konfiguracji JBOD.
Jak wspomnieliśmy w poprzednim artykule, Solidigm P5316 ma jednostkę pośrednią o rozmiarze 64 kilobajtów, co oznacza, że wydajność zapisu dla mniejszych rozmiarów (takich jak testy 4K) jest często gorsza od oczekiwanej. Ponownie przeprowadziliśmy różne wzorce testowe dla bloków o rozmiarach 4K, 64K i 128K, aby uzyskać szeroki zakres wyników dla operacji odczytu i zapisu.
Wybraliśmy Ubuntu Server 24.04.4 LTS jako przykład Linuksa ze względu na jego popularność i długotrwałe wsparcie. Domyślnie działa na jądrze Linuksa 6.8, które nie jest najnowsze ani najbardziej zaawansowane, ale prawdopodobnie stanowi znaczną część instalacji na całym świecie.
Najważniejsze
- Natywny interfejs NVMe systemu Windows Server 2025 wygrywa w trzech z czterech testów wydajności odczytu
- W większości testów w systemie Windows Server zaobserwowano niższe wykorzystanie procesora
- Ubuntu Server 24.04.4 LTS wygrywa w trzech z czterech testów wydajności zapisu
| metryczny | Losowe 4K | Losowe 64K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows nienatywny | Natywny dla systemu Windows | Biblioteka Linux | Linux io_uring | Windows nienatywny | Natywny dla systemu Windows | Biblioteka Linux | Linux io_uring | |
| Losowe czytanie | ||||||||
| Przepustowość (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 |
| Średnie opóźnienie (ms) | 0.169 | 0.104 | 0.198 | 0.192 | 0.239 | 0.207 | 0.377 | 0.376 |
| Całkowite użycie procesora (%) | 72.67 | 74.22 | 99.77 | 99.76 | 68.44 | 65.11 | 83.16 | 84.72 |
| metryczny | Sekwencyjny 64K | Sekwencyjny 128K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows nienatywny | Natywny dla systemu Windows | Biblioteka Linux | Linux io_uring | Windows nienatywny | Natywny dla systemu Windows | Biblioteka Linux | Linux io_uring | |
| Sekwencyjny odczyt | ||||||||
| Przepustowość (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 |
| Średnie opóźnienie (ms) | 0.809 | 0.812 | 0.919 | 0.932 | 0.613 | 0.608 | 0.603 | 0.604 |
| Całkowite użycie procesora (%) | 44.89 | 37.11 | 53.94 | 41.74 | 61.56 | 49.56 | 75.14 | 76.90 |
| metryczny | Losowe 4K | Losowe 64K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows nienatywny | Natywny dla systemu Windows | Biblioteka Linux | Linux io_uring | Windows nienatywny | Natywny dla systemu Windows | Biblioteka Linux | Linux io_uring | |
| Losowy zapis | ||||||||
| Przepustowość (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 |
| Średnie opóźnienie (ms) | 0.992 | 1.028 | 0.974 | 1.007 | 3.814 | 3.816 | 3.827 | 3.828 |
| Całkowite użycie procesora (%) | 26.00 | 20.67 | 45.76 | 22.80 | 12.22 | 9.33 | 20.07 | 10.90 |
| metryczny | Sekwencyjny 64K | Sekwencyjny 128K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows nienatywny | Natywny dla systemu Windows | Biblioteka Linux | Linux io_uring | Windows nienatywny | Natywny dla systemu Windows | Biblioteka Linux | Linux io_uring | |
| Zapis sekwencyjny | ||||||||
| Przepustowość (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 |
| Średnie opóźnienie (ms) | 0.399 | 0.558 | 0.560 | 0.560 | 1.022 | 1.149 | 1.126 | 1.125 |
| Całkowite użycie procesora (%) | 70.44 | 57.78 | 61.88 | 62.75 | 58.44 | 47.33 | 61.49 | 44.27 |
Uwaga: Nasze wyniki IOPS dla systemu Linux są zaokrąglane do tysięcy ze względu na różnice w raportowaniu FIO między systemami Windows Server 2025 i Ubuntu Server 24.04.4 LTS. Wyniki dotyczące przepustowości, opóźnień i użycia procesora są zaokrąglane spójnie na obu platformach.
Liczby nie kłamią
Od razu widać, że Ubuntu nie przewyższa Windowsa w każdej kategorii. Chociaż libaio i io_uring zapewniły doskonałą przepustowość w naszych testach przepustowości losowego odczytu, nie dorównały wydajności natywnego stosu NVMe firmy Microsoft. Jądro Windows NT pokonało jądro Linuksa o około 17% w naszych testach losowego odczytu 64 KB, uzyskując zwycięski wynik 91.165 GiB/s na natywnym NVMe w porównaniu z najlepszym wynikiem io_uring wynoszącym 77.7 GiB/s.
Jednak nie wszystko stracone dla technologicznego terroru Torvaldsa. Ubuntu Server minimalnie pokonał Windows Server w jednym z naszych testów wydajności odczytu: sekwencyjnym teście 128 KB. W tym przypadku libaio Linuksa uzyskało najlepszy wynik 97.05 GiB/s, w porównaniu z natywnym NVMe Windowsa z 92.562 GiB/s, co stanowi różnicę około 5%. Wskazuje to, że Linux może mieć niewielką przewagę w zarządzaniu rozmiarami bloków większymi niż jednostki pośrednie dysków.
Przepustowość zapisu losowego była spójna zarówno w systemach Linux, jak i Windows, szczególnie w testach porównawczych 64 KB. Najlepsze i najgorsze wyniki z tych testów różniły się zaledwie o 0.05%, co sugeruje, że wszystkie stosy pamięci masowej w pełni wykorzystały potencjał dysków.
Co ciekawe, jądro Linux 6.8 zwyciężyło w sekwencyjnych testach przepustowości zapisu dla rozmiarów bloków wynoszących 64 K i 128 K. Choć różnica nie była kolosalna, to w obu przypadkach stosy oprogramowania open source pokonały natywny interfejs NVMe systemu Windows Server o około 2 GiB/s.
Wyniki dotyczące opóźnień generalnie pokrywały się z wynikami testów przepustowości, co najlepiej obrazuje różnica w średnich wartościach losowych odczytów. Niestety w przypadku Tuxa, libaio i io_uring charakteryzowały się wyższymi opóźnieniami, z największą różnicą 0.17 ms między natywnym NVMe systemu Windows Server (0.207 ms) a libaio (0.377 ms) dla losowych odczytów 64 KB.
Być może najbardziej szokującym odkryciem z naszych testów porównawczych jest ogromna różnica w obciążeniu procesora między systemami Windows Server 2025 i Ubuntu Server 24.04.4 LTS. W trzech z czterech testów porównawczych z odczytem losowym i sekwencyjnym, natywny interfejs NVMe dla systemu Windows Server charakteryzował się najniższym obciążeniem procesora. Najbardziej zauważalny wynik zaobserwowano podczas testu porównawczego z odczytem sekwencyjnym 128 KB, w którym system Windows zużywał o 27.34% mniej zasobów niż Linux.
Wykorzystanie procesora przez Libaio i io_uring wypadło nieco lepiej w testach zapisu losowego i sekwencyjnego, ale wciąż nie wystarczyło to, aby natywny NVMe w systemie Windows Server wygrał w trzech testach. Godnym uwagi wyjątkiem było wykorzystanie procesora przez Libaio podczas testu zapisu losowego 4K, które osiągnęło 45.76% obciążenia procesora systemu, podczas gdy pozostałe stosy pamięci masowej oscylowały wokół 20%.
Zwycięzca, zwycięzca, kolacja CPU
Jak pokazują nasze wyniki, systemy Windows Server i Ubuntu Server osiągają zbliżone wyniki w testach porównawczych, zarówno losowych, jak i sekwencyjnych, przy różnych rozmiarach bloków. Pod względem przepustowości, system Windows Server 2025 z natywnym interfejsem NVMe generalnie przewyższał system Linux w większości testów odczytu, podczas gdy Linux uzyskał nieco lepsze wyniki w testach zapisu. Nasze dane dotyczące opóźnień pokazały podobny obraz, ale prawdziwym hitem była wydajność procesora systemu Windows Server 2025 z natywnym interfejsem NVMe.
Microsoft wyraźnie dołożył starań, aby jego najnowszy stos pamięci masowej był jak najlepszy i choć nie zawsze wygrywa z libaio i io_uring, to stawia czoła wyzwaniom. Chociaż wyniki te nie są ostateczne dla wszystkich przypadków użycia i konfiguracji serwerów, mogą pomóc administratorom serwerów zdecydować, czy wdrożyć serwer Windows, czy Linux, gdy wydajność pamięci masowej jest ważniejsza niż kompatybilność z systemem operacyjnym.
Dajcie nam znać, co sądzicie o tych wynikach, komentując na naszych platformach społecznościowych lub na Discordzie SR ! Spodziewaliście się, że Windows Server wypadnie tak dobrze w naszych testach, czy też kibicowaliście Linuksowi? Chcielibyście zobaczyć więcej przetestowanych dystrybucji lub kerneli Linuksa na serwerach? Zawsze czekamy na Wasze opinie, a testy na prośbę czytelników, takie jak te, często stają się naszymi ulubionymi artykułami.
Referencje
Didona, D., Pfefferle, J., Ioannou, N., Metzler, B. i Trivedi, A. (13 czerwca 2022). Zrozumienie nowoczesnych interfejsów API pamięci masowej: systematyczne badanie libaio, SPDK i io_uring. SYSTOR '22, s. 120–121. Pobrano 3 kwietnia 2026 r. z https://atlarge-research.com/pdfs/2022-systor-apis.pdf




Amazon