Windows Server 2025に搭載されたMicrosoftのオプトイン式ネイティブNVMe機能に関する記事を公開した後、ネイティブNVMeを搭載したWindows Server 2025とLinuxベースのサーバーOSのストレージ性能を直接比較してほしいというリクエストを多数いただきました。特に熱心なRedditユーザーの中には、比較テストを実施してくれたらビールをご馳走してくれると申し出てくれた人もいました。他に適切な選択肢が明らかになかったため、Linux上で同じテストを実施することにしました。
はるか昔、はるか遠いOSバージョンで
Linuxカーネルは、 2012年3月にリリースされたバージョン3.3以降、NVMeをサポートしています。同様に、Windows Serverでも、2012 R2(2013年10月頃)以降、このプロトコルが(ネイティブではなく、SCSI変換を介して)サポートされています。10年以上経った今でも、ストレージに関してはWindowsとLinuxのどちらが優れているかという議論が続いています。そこで、両者を比較したベンチマーク結果を掲載することで、この議論にさらに火をつけようと考えました。
Windows Server 2025 で非ネイティブおよびネイティブのストレージ スタックの両方を使用したテスト結果が得られたため、Linux 上で 2 つのストレージ スタックを評価するのが適切だと考えました。FIO ベンチマークでは、ストレージ トランザクションで最も人気のある API である libaio と io_uring の両方を使用しました。io_uring はかなり新しく、非同期 I/O に多くの改善が加えられていますが、libaio はその柔軟性と使いやすさから広く使用されています (Didona、Pfefferle、Ioannou、Metzler、& Trivedi、2022)。両方のスタックの完全なアーキテクチャの概要はこの記事の範囲外ですが、直接比較するための結果を提供します。
Ubuntu Server 24.04.4 LTS での NVMe のテスト
今回の比較に使用したハードウェアプラットフォームは、Windows Server 2025ネイティブNVMeに関する記事で使用したサーバーと同じものです。最大限のスループットと安定した結果を確保するため、128コアのAMD EPYC 9754 CPUを2基、4800 MT/sのDDR5メモリを768GB、そしてJBOD構成でPCIe 4.0に対応した30.72 TBのSolidigm P5316 NVMe SSDを15台搭載しています。
前回の記事でも触れたように、Solidigm P5316の間接参照単位サイズは64キロバイトであるため、4Kテストなどの小サイズでの書き込みパフォーマンスは、予想よりも劣る場合が多い。今回も、読み書き操作に関する幅広い結果を得るために、4K、64K、128Kのブロックサイズで様々なテストパターンを実行した。
Linuxの例としてUbuntu Server 24.04.4 LTSを選んだのは、その人気と長期サポート体制によるものです。デフォルトではLinuxカーネル6.8で動作しますが、これは最新または最先端のバージョンではありませんが、世界中のインストール環境の大部分を占めていると考えられます。
ハイライト
- Windows Server 2025のネイティブNVMeは、4つの読み取り性能ベンチマークのうち3つで勝利を収めた。
- ほとんどのテストにおいて、Windows ServerではCPU使用率が低いことが確認された。
- Ubuntu Server 24.04.4 LTSは、4つの書き込みパフォーマンスベンチマークのうち3つで勝利を収めた。
| メトリック | ランダム4K | ランダム64K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows 非ネイティブ | Windowsネイティブ | Linux libaio | Linux io_uring | Windows 非ネイティブ | Windowsネイティブ | Linux libaio | Linux io_uring | |
| ランダムリード | ||||||||
| 帯域幅(GiB/秒) | 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 |
| 平均遅延時間(ミリ秒) | 0.169 | 0.104 | 0.198 | 0.192 | 0.239 | 0.207 | 0.377 | 0.376 |
| 合計CPU使用率(%) | 72.67 | 74.22 | 99.77 | 99.76 | 68.44 | 65.11 | 83.16 | 84.72 |
| メトリック | シーケンシャル64K | シーケンシャル128K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows 非ネイティブ | Windowsネイティブ | Linux libaio | Linux io_uring | Windows 非ネイティブ | Windowsネイティブ | Linux libaio | Linux io_uring | |
| シーケンシャルリード | ||||||||
| 帯域幅(GiB/秒) | 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 |
| 平均遅延時間(ミリ秒) | 0.809 | 0.812 | 0.919 | 0.932 | 0.613 | 0.608 | 0.603 | 0.604 |
| 合計CPU使用率(%) | 44.89 | 37.11 | 53.94 | 41.74 | 61.56 | 49.56 | 75.14 | 76.90 |
| メトリック | ランダム4K | ランダム64K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows 非ネイティブ | Windowsネイティブ | Linux libaio | Linux io_uring | Windows 非ネイティブ | Windowsネイティブ | Linux libaio | Linux io_uring | |
| ランダム書き込み | ||||||||
| 帯域幅(GiB/秒) | 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 |
| 平均遅延時間(ミリ秒) | 0.992 | 1.028 | 0.974 | 1.007 | 3.814 | 3.816 | 3.827 | 3.828 |
| 合計CPU使用率(%) | 26.00 | 20.67 | 45.76 | 22.80 | 12.22 | 9.33 | 20.07 | 10.90 |
| メトリック | シーケンシャル64K | シーケンシャル128K | ||||||
|---|---|---|---|---|---|---|---|---|
| Windows 非ネイティブ | Windowsネイティブ | Linux libaio | Linux io_uring | Windows 非ネイティブ | Windowsネイティブ | Linux libaio | Linux io_uring | |
| シーケンシャルライト | ||||||||
| 帯域幅(GiB/秒) | 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 |
| 平均遅延時間(ミリ秒) | 0.399 | 0.558 | 0.560 | 0.560 | 1.022 | 1.149 | 1.126 | 1.125 |
| 合計CPU使用率(%) | 70.44 | 57.78 | 61.88 | 62.75 | 58.44 | 47.33 | 61.49 | 44.27 |
注意: Windows Server 2025とUbuntu Server 24.04.4 LTSではFIOの報告方法が異なるため、LinuxのIOPSの結果は千の位に四捨五入されています。帯域幅、レイテンシ、CPU使用率の結果は、両プラットフォームで一貫して四捨五入されています。
数字は嘘をつかない
すぐにわかるように、UbuntuはすべてのカテゴリでWindowsを上回っているわけではありません。libaioとio_uringはランダム読み取り帯域幅テストで優れたスループットを発揮しましたが、MicrosoftのネイティブNVMeスタックのパフォーマンスには及びませんでした。Windows NTカーネルは、ランダム読み取り64KテストでLinuxカーネルを約17%上回り、ネイティブNVMeで91.165 GiB/sという結果を残し、io_uringの最高値は77.7 GiB/sでした。
しかし、トーバルズ氏の技術的脅威に対する希望が完全に失われたわけではない。Ubuntu Serverは、読み取り性能ベンチマークの1つであるシーケンシャル128Kテストで、Windows Serverをわずかに上回った。このテストでは、Linuxのlibaioが97.05 GiB/sで最高のパフォーマンスを発揮し、WindowsのネイティブNVMeは92.562 GiB/sで、その差は約5%だった。これは、ドライブの間接参照単位よりも大きなブロックサイズを管理する場合、Linuxがわずかに優位に立つ可能性があることを示している。
ランダム書き込み帯域幅は、LinuxとWindowsの両方で一貫しており、特に64Kベンチマークにおいて顕著でした。これらのテストにおける最高値と最低値の差はわずか0.05%であり、すべてのストレージ構成でドライブの性能が最大限に発揮されたことが示唆されます。
興味深いことに、Linux 6.8カーネルは、64Kと128Kのブロックサイズにおけるシーケンシャル書き込み帯域幅テストで勝利を収めた。その差はそれほど大きくはなかったものの、オープンソースのソフトウェアスタックは、どちらの場合もWindows ServerのネイティブNVMeを約2GiB/s上回った。
レイテンシの結果は、一般的にスループット テストの結果と一致しており、ランダム読み取りの平均値の差に最もよく表れています。残念ながら、Tux の場合、libaio と io_uring のレイテンシは高く、64 K のランダム読み取りでは、Windows Server ネイティブ NVMe (0.207 ms) と libaio (0.377 ms) の差が最大で 0.17 ms でした。
ベンチマークテストで最も衝撃的な結果は、Windows Server 2025とUbuntu Server 24.04.4 LTSのCPU使用率に大きな差があったことでしょう。ランダム読み取りとシーケンシャル読み取りのベンチマークテスト4つのうち3つで、Windows ServerネイティブNVMeのCPU使用率が最も低くなりました。最も顕著な結果は、シーケンシャル読み取り128Kベンチマークテストで見られ、WindowsはLinuxよりも27.34%低いCPU使用率でした。
libaioとio_uringを使用した場合のCPU使用率は、ランダム書き込みテストとシーケンシャル書き込みテストでわずかに優れていましたが、それでもWindows ServerのネイティブNVMeが3つのベンチマークで勝利するのを阻止するには十分ではありませんでした。注目すべき例外は、ランダム書き込み4Kテスト中のlibaioのCPU使用率で、システムのCPUの45.76%に達しましたが、他のストレージスタックは20%前後でした。
勝者、CPUディナー
結果が示すように、Windows ServerとUbuntu Serverは、異なるブロックサイズでのランダムおよびシーケンシャル性能テストを直接比較した場合、ほぼ同等のパフォーマンスを示しました。帯域幅に関しては、ネイティブNVMeを搭載したWindows Server 2025は、ほとんどの読み取りテストでLinuxを上回りましたが、書き込みテストではLinuxの方がわずかに優れた結果を示しました。レイテンシの数値も同様の結果を示しましたが、真に注目すべきは、ネイティブNVMeを使用した場合のWindows Server 2025のCPU効率でした。
マイクロソフトは最新のストレージスタックを最高のものにするために明らかに力を注いでおり、 libaioやio_uringに常に勝てるわけではないものの、善戦している。これらの結果はすべてのユースケースやサーバー構成に当てはまるわけではないが、ストレージ性能がOSの互換性よりも重要な場合に、サーバー管理者がWindowsサーバーとLinuxサーバーのどちらを導入するかを判断するのに役立つ可能性がある。
これらの結果についてのご意見を、弊社のソーシャルメディアやSR Discordにコメントしてお聞かせください!Windows Serverがこれほど好成績を収めると予想していましたか?それともLinuxを応援していましたか?Linuxサーバーディストリビューションやカーネルのテストをもっと見たいですか?皆様からのフィードバックを常に求めており、今回のような読者からのリクエストに基づくテスト記事は、私たちのお気に入りの記事になることがよくあります。
参考情報
Didona, D.、Pfefferle, J.、Ioannou, N.、Metzler, B.、Trivedi, A. (2022年6月13日)。最新のストレージAPIを理解する:libaio、SPDK、io_uringの体系的な研究。SYSTOR '22、120-121。2026年4月3日取得、https://atlarge-research.com/pdfs/2022-systor-apis.pdfより。




Amazon