順次読み込みが比較的遅いのはなぜですか?
Win10のCrystalDiskMarkは約5GB / s(読み取りと書き込み)を報告しますが、Linuxでのパフォーマンスはそれには至りません。 (Windowsで同じドライブに数百GBをコピーして貼り付ける平均速度は約2.5GB / sなので、ここではCDMが実際の値と大きく変わらないと思います。)
単純な
dd if=/dev/nvme0n1 of=/dev/null bs=1M count=10k
報告はわずか1.5GB/sです。
他のNVME(どちらもCorsair Force MP600 1TB)では、ddは1.4GB / sを報告します。
私はこのようなシーケンシャルアクセスがすべてのストレージデバイスから読み取るのに最適なケースであると期待しているので、ここで何が起こっているのか実際にはわかりません。
(StackExchangeでいくつかの同様の質問を見たことがありますが、すべてこの「簡単な質問」とは異なる方向に進みます。)
注:私が正確に覚えている場合、CrystalDiskMarkは「実際のファイル」を使用します。したがって、追加のファイルシステムのオーバーヘッドもあり、dd呼び出しが可能な限り最高でなければなりません。そうではありませんか?
システムメッセージ:
- どちらのNVMEも4つのPCIe 4.0レーンを介して接続されています。
- 両方のNVMEの温度< 60℃
- ルートとしてマウントする速度が速いほど、削除速度が遅くなります。
- Zen2 Threadripper(したがって、PCIe 4.0レーンで十分です...)
- カーネル 5.6.4
- BIOSアップデート
- NVMEファームウェアアップデート
正しい方向へのアイデアやアドバイスは大変感謝します!
答え1
犯人は順次アプローチです。 NVME は、同時要求が多い場合にのみパフォーマンスを示します。したがって、「cp」は、dd と hdparm と同様に、単一の [順次] 読み取りのみを発生させます。 「並列性」などのトリックを使用してファイルごとにcpプロセスを作成すると、全体のスループットが向上します。大容量ファイルの場合でも、Windowsエクスプローラはこれを行うことができるようです(複数のセグメントを並列にコピー - 少なくとも私が推測しているのはそうです)。
答え2
真剣に受け入れ、hdparm
マニュアルページをお読みください。 Linuxで読み取りパフォーマンスを向上させるのに役立つコマンドの1つは次のとおりです。
sudo hdparm -tT --direct /dev/nvmexxx
パフォーマンス測定の問題dd
は、明らかにLinuxがメモリからページングする方法です。私自身はまだそれを完全に理解しようとしています。私はWindowsにも同じ機能があると思います。コマンドがないため、隠されている方が良いでしょうdd
。私が知っているのは、hdparm
オペレーティングシステムの周りのデバイスのパフォーマンスを測定することはCrystalDiskMarkが行うのと同じです。
マンページオプション--direct
で説明されています。