ファイルのコピーでLinuxがWindows 10よりも30倍速いのはなぜですか?


20

20.3ギガのファイルとフォルダーがあり、合計で10万アイテムを超えました。これらすべてのファイルをWindows 10の1つのディレクトリに複製しましたが、3時間のコピーに耐えられませんでした。できた

先日、Linux Fedora 24で起動し、同じフォルダーとbamをコピーしました!同じ場所で別のディレクトリに複製するのにわずか5分かかりました。

Linuxがこんなに高速なのはなぜですか?そして、Windowsは苦労して遅いですか?

ここに同様の質問があります

(Ubuntu)LinuxファイルコピーアルゴリズムはWindows 7より優れていますか?

しかし、受け入れられた答えは非常に不足しています。


「Windows」や「Linux」を使用してファイルをコピーするのではなく、各オペレーティングシステムで実行されている特定のプログラムを使用します。プログラムは、使用する方法とトレードオフが大きく異なります。どちらを使用していましたか?そしてどうやって?
kreemoweet

5
@kreemoweet:オペレーティングシステムも同様です。WindowsのNTFSは、他のほとんどのファイルシステムと比較して、大量の小さなファイルを非常にうまく処理できないことが知られています。
user1686

2
そして、Windowsファンからのいい投票です。ファイルをコピーするのは簡単ですが、ビジネスにはデータのバックアップから科学的な研究まで、さまざまなアプリケーションがあります。たとえば、CERNでは、ペタバイト単位のデータを処理する必要があるため、遅いコピーは受け入れられません。
ジョーンズG

同じリンクから-下から2番目の回答を確認します。Linuxは、使用可能なRAMにすべてのファイルをキャッシュし、可能な場合はディスクに書き込みます。そのため、高速に見える理由があります(現時点では読み取りと書き込みが可能な場合のみ)。
ダリウス

@DominicGuanaファイルシステムがそれぞれの役割を果たします(ext3 / ext4は100MBのチャンクを一度に割り当てることができます)。Windowsでのウイルス対策も(遅い)役割を果たしていると考えましたか?BTWは、SLACデータ取得フローの同様の問題(第1レベルのトリガーの後、データが多すぎた)について、並列にHDDに書き込むことを学習しました...
Hastur

回答:


25

その基本は、システム全体のいくつかの主要コンポーネントに分類されます。UI要素(グラフィカル部分)、カーネル自体(ハードウェアと通信するもの)、データが保存される形式(ファイルシステムなど) )。

過去にさかのぼって、NTFSWindowsのデファクトはしばらくの間でしたが、主要なLinuxバリアントのデファクトはextファイルシステムです。NTFSファイルシステム自体はWindows XP(2001)以降変更されていません。存在する多くの機能(パーティションの縮小/修復、トランザクションNTFSなど)はOSの機能です(Windows Vista / 7/8/10)NTFS自体ではありませんextファイルシステムは、それの最後の主要な安定したリリース(持っていたext4ファイルシステム自体がどこでどのようにファイルがアクセスされた支配するものですので、使用している場合、2008年)をext4使用すると、NTFS以上の速度の改善に気付くでしょうおそらくチャンスがあります。ただし、使用したext2場合は、速度が同等であることに気付くかもしれません。

同様に、1つのパーティションが他のパーティションよりも小さいチャンクでフォーマットされている場合もあります。ほとんどのシステムのデフォルトは4096 byte 12クラスタサイズが、あなたがあなたのフォーマットされている場合ext4のようなものにパーティションを16k 3、その後の各読み取りext4システムはNTFSシステム対データ(4倍になるだろう可能性が保存されているものに応じてファイルを4X意味をどこ/どのように、どのくらいの大きさなど)。ファイルの断片化も速度に影響します。NTFSはextファイルシステムとファイルの断片化を非常に異なる方法で処理し、100k 以上のファイルでは、断片化が発生する可能性が高くなります。

次のコンポーネントはカーネルそのものです(UIではなく、実際にハードウェア、つまり真のOSと通信するコード)。ここでは、正直なところ大きな違いはありません。両方のカーネルは、ディスクキャッシュ/バッファリングなどの特定の処理を行うように構成して、読み取りと認識される書き込みを高速化できますが、これらの構成には通常、OSに関係なく同じトレードオフがあります。たとえば、キャッシュはコピー/保存の速度を大幅に向上させるように見えるかもしれませんが、キャッシュの書き込み中に電力を失う(またはUSBドライブを引き出す)と、実際にディスクに書き込まれていないすべてのデータが失われ、すでに書き込まれたデータが破損する可能性がありますディスクに。

例として、WindowsおよびLinuxでFAT形式のUSBドライブに多くのファイルをコピーします。Windowsでは10分かかりますが、Linuxでは10秒かかります。ファイルをコピーしたらすぐに、ドライブをイジェクトして安全に取り外します。Windowsではすぐにシステムからイジェクトされるため、USBポートからドライブを取り外すことができますが、Linuxでは実際にドライブを取り外すまでに10分かかる場合があります。これは、キャッシュが原因です(つまり、LinuxはファイルをRAMに書き込んだ後、バックグラウンドでディスクに書き込みましたが、キャッシュレスWindowsはすぐにディスクに書き込みました)。

最後はUI(ユーザーが対話するグラフィカル部分)です。UIは、いくつかのクールなグラフと素敵なバーを備えたきれいなウィンドウで、コピーされているファイルの数、すべてがどれだけ大きいか、どれくらい時間がかかるかについての一般的な考えを示します。UIは、終了時以外情報を出力しないコンソールでもあります。UIが最初に各フォルダーとファイルを調べて、ファイルの数とそれらの大きさを判断し、実際にコピーを開始するに大まかな見積もりを行う必要がある場合、UIが必要とするためコピープロセスに時間がかかることがありますこれを行う。繰り返しますが、これはOSに関係なく当てはまります。

ディスクキャッシュやクラスターサイズなど、いくつかの設定を同じにすることができますが、現実的には、すべての部分が結び付いてシステムを動作させる方法、具体的にはこれらのコードが実際に更新される頻度に帰着します。Windows OSはWindows XPから長い道のりを歩んできましたが、ディスクサブシステムは長年にわたってすべてのバージョンでOSのTLCをあまり見ていない領域です(新しいFSを見ると思われるLinuxエコシステムと比較して)またはかなり頻繁に改善)。

それが明確さを追加することを願っています。


私の意見では恐ろしい答えであり、反対票を投じました。違いがないところに違いを導入しています。パーティション分割されたドライブのパフォーマンスについては誰も尋ねませんでした。もちろん、質問の中心は「他のすべてが平等である」という教訓です。毎秒16ギガバイト以上のネイティブ読み取り速度で、8 nvme raid0のfsを自由に選択できますが、Windowsファイルコピーは常に1.4〜1.5ギガバイトで最大になります。キャッシング、fs、パーティションとは関係ありませんが、Windows OSの制限と関係があります。
マティアスウルフ

@MattどのファイルシステムでフォーマットされたRAIDアレイをフォーマットしていますか?NTFSの場合、速度低下を説明できますが、提供する情報があれば、特にコアWindows OSにソースコード(アセンブリダンプではない)がある場合は、関連する回答を自由に追加できます。なぜスローダウンが発生したのかを直接説明します(特に私はそのことに興味があるでしょう!)。
txtechhelp

私はNTFSを使用していますが、Windowsサーバー上にFSとしてより良いオプションはありますか?
マティアスウルフ

私はMSFTに連絡し、長年にわたって多くの議論を行い、多くのことを試しましたが、各マシンに100GBのNICがあり、Mellanoxプロファイリングツールごとに他のすべてのトラフィックが接続が完全にうまく機能していることを示していますが、1.5GB /秒を超えることはありませんでした94-95Gb /秒のスループット。Linuxマシン間で速度低下はありませんが、Windows OSマシンが関与するとすぐにそれらのボトルネックが表示されます
Matthias Wolf

私は単一のファイル転送、すべて単一のスレッドについて話している。ハードウェアのボトルネックはまったくなく、純粋にOSベースです。
マティアスウルフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.