次のCPUとGeekBenchスコアが与えられます。
Amazon EC2 z1d.largeインスタンス:Intel Xeon Platinum 8151 4061 MHz(1コア)シングルコアスコア:1094、マルチコアスコア:1300
Macbook Proラップトップ:Intel Core i5-8259U 2300 MHz(4コア)シングルコアスコア:1002、マルチコアスコア:4104
Xeonは、シングルスレッドベンチマークスコアで9.1%高速です。
ただし、両方のデバイスでJavaScriptアプリケーションコード(シングルスレッド)をコンパイルすると、Xeonはタスクを60%速く完了します。どうして?ベンチマークスコアによると、Xeonの方がわずか9%高速です。
どちらもNVMEドライブを備えているため、ボトルネックになることはありません。MacはLinuxベースなので、MacとLinuxOSの問題もあるとは思いません。
これは、Xeonがサーバー/デスクトップCPUであるためですか?Macbook Pro CPUはフルパワーで動作しておらず、Intel Turbo Boostが立ち上がるのを待たなければならないのに対し、100%の速度とパワーで動作していますか?
あなたが説明するタスク、Bableプロジェクトのコンパイル、および関連するCPUを考えると、パフォーマンスの違いの原因はわかっていると思います。私はもっと早く答えたかったのですが、私の予感を確認するために少し調査をしなければなりませんでした。
まず、システムにかかる負荷を特徴づけましょう。
Babel.jsは、並列処理のために非同期I / Oを主に活用するシングルスレッドのシングルプロセスコンパイラとして記述されています(少なくとも、私がグーグルで調べたところ、ワーカースレッドを使用していることは示されていません)。ディスクからファイルをコンパイルするコンパイラであるため、その実行の大部分はディスクからのデータを待つことを伴います。これにより、次のワークロードが得られます。
シングルスレッドなので、複数のコアまたはハイパースレッディングはコンパイルに大きな影響を与えませんが、1つの注意点があります。
Node.jsはワーカースレッドを使用してディスクI / Oを処理しますが、2つまたは4つのハードウェアスレッドを超えると、複数のコアに追加の利点はありません(https://nodejs.org/en/docs/guides/dont-block-theを参照)。-event-loop /)
並列処理のほとんどは、I / Oレベルで行われます。Babelは、できるだけ多くのファイルを並行して読み取ろうとします。
i5とXeonはどちらも、ポイント1と2に関してかなり同等です。それでは、CPUがポイント3を処理する方法を見てみましょう。Babelの並列ファイル読み取り要求を処理します。
2つのシステムの最初の大きな違いは次のとおりです。
Core i58259には16個のPCIレーンがあります
Xeon8151には48のPCIレーンがあります
したがって、Xeonはi5よりも多くの並列I / O操作を処理できることは明らかです。使用可能なメモリ転送レーンの数よりも多くのI / Oがある場合、OSは、使用可能なハードウェアスレッドの数よりも多くのタスクがある場合と同じように処理します。つまり、それらをキューに入れ、順番に実行します。
次に、NVMEが実際に複数のレーンを使用できるかどうかを知りたいと思いました。これは私が別の興味深い事実にぶつかったところです。NVME標準では、カードは最大4つのPCIレーンを使用できます(物理的には多くの接続が割り当てられています)が、一部のカードは2つしか使用せず、他のカードは4つを使用します。したがって、すべてのNVMEカードが同じように作成されるわけではありません。これだけで、BabelがRAMに並行してコピーできるファイルの数がほぼ2倍の帯域幅で2倍になります。
また、NVMEスロットがCPUにどのように接続されているかによっても異なります。16個のPCIレーンしかないCorei5は、間違いなく少なくとも8個のPCIレーンをGPU用に予約します。他のデバイス間で共有できるのは8つだけです。これは、NVMEカードがWifiまたは他のハードウェアと帯域幅を共有しなければならない場合があることを意味します。これにより、速度が少し遅くなります。
また、NVMEがCPUのPCIレーンに直接接続されていない場合もあります。Macbookは、実際にはGPU用に16レーンすべてを予約し、サウスブリッジ(追加のPCIレーンがある場合があります)を介してNVMEに接続する場合があります。Macbookがこれを行うかどうかはわかりませんが、これもパフォーマンスを少し低下させる可能性があります。
対照的に、Xeonには多数のレーンがあるため、マザーボードの設計者は非常に高速なI / Oプラットフォームをより自由に作成できます。さらに、AWSサーバーには通常GPUがインストールされていないため、GPU用にレーンを予約する必要はありません。繰り返しになりますが、AWSサーバーの実際のアーキテクチャは個人的にはわかりませんが、Babelプロジェクトのコンパイル時にMacbookよりも優れたアーキテクチャを作成することは可能です。
したがって、最終的にEC2インスタンスがMacbookよりも優れたパフォーマンスを発揮できるようにする主な要因は次のとおりです。
CPUによって直接サポートされるPCIレーンの数
NVMEドライブでサポートされているPCIレーンの数
NVMEレーンがCPUに接続されている方法
寄与する可能性のある追加の要因は次のとおりです。
I / Oバスの速度(PCI2とPCI3など)
RAMの速度
使用可能なDMAチャネルの数(これだけでも長い回答が必要なので、スキップしましたが、理由はPCIレーンと同様です)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加