通信研究会では、結構珍しい活動領域として「サーバー管理」というものがあります。しかもこれは、クラウドシステムの管理というよりもオンプレのサーバーを管理するというものです。つまり物理サーバーを扱っているわけですが、今回はそれ関連でお話をしてみようと思います。
「CPU」に注目してみましょう。
CPU
「CPU」は略称であり、正式には「Central Processing Unit」、日本語では「中央処理装置」となっています。コンピュータを構成する五大要素のうち「演算装置」と「制御装置」を現代のCPUは提供しています。
演算装置とは、その名の通り入力に対して加減算等の演算を施し、結果を出力するという装置です。他方で「制御装置」は、システムに対するあらゆる入出力を司るといった役割を持っています。つまりCPUは、入力に対して何らかの「処理」を行って出力を行う装置ということになります。
で、演算装置としての役割は各社がそれぞれ開発した「マイクロアーキテクチャ」が同じであれば大きな差が出る事はありません。まれにマーケティング的な側面から一部の演算機能が無効になったり、そもそも規模の問題から演算装置の個数に差が生まれたりと言うのはありますが。
ただ、性能を出すためのチューニングには差があります。ユースケースによりますが、コア数を集中してクロックをグンと上げたほうがいい場面、クロックを落としつつマルチスレッド性能を高めた方がいい場面など、様々ですからね。
制御装置としての役割については、やはりそのCPUがターゲットとしている領域に合わせて変わるものです。特にクライアント向けCPUとサーバー向けCPUだとその差は顕著です。
クライアント向けとサーバー向けの違い
では、今回はCPUを「クライアント向けCPU」と「サーバー向けCPU」に分けてそれぞれの違いを抑えていきましょう。
クライアント向けCPUを今回は、いわゆる「パーソナルコンピュータ」に搭載されているCPU全般を指すものとします。他方で、サーバー向けCPUを「ラックサーバー」に搭載されがちなCPUと定義しましょう。
クライアント向けCPUは基本的に、一人の人間が直接扱いやすいレベルの性能と仕様になっています。この場合、求められるのは何万ものタスクを並行してこなす能力というよりも、少ないタスクを高い性能でこなす能力のほうが重要です。となれば、コア数は絞り、他方でクロックを上げたほうが良さそうですね。結果として、そういったCPUが登場するわけです。
一方で、サーバーというものは、基本的に多くの人やシステムがアクセスしたりするので、耐他アクセス、あるいは十分な量の演算リソースが必要ですね。となれば、必要なのはコア数です。
【資料】各社の最新クライアント向けCPUラインナップ(最上位)
ベンダー | SKU | コア/スレッド | 最高クロック | μArch |
---|---|---|---|---|
Intel | Core Ultra 9 285K | 8P16E/24T | 5.7 GHz | Arrow Lake (Lion Cove+Skymont) |
AMD | Ryzen 9 9950X3D | 16C/32T | 5.7 GHz | Granite Ridge (Zen 5) |
Qualcomm | Snapdragon X Elite X1E-00-1DE | 12C | 4.3 GHz | Oryon(Armv8.2) |
Apple | Apple M4 Max | 12P4E | 4.5 GHz | Apple M4(Armv9) |
【資料】各社の最新サーバー向けCPUラインナップ
ベンダー | SKU | コア/スレッド | 最高クロック | μArch |
---|---|---|---|---|
Intel | Xeon 6980P | 128C/256T | 3.9 GHz | Granite Rapids (Redwood Cove) |
Intel | Xeon 6780E | 144C/144T | 2.7 GHz | Sierra Forest (Crestmont) |
AMD | EPYC 9755 | 128C/256T | 4.1 GHz | Turin (Zen 5) |
AMD | EPYC 9965 | 192C/384T | 3.7 GHz | Turin (Zen 5c) |
NVIDIA | Grace | 72C | Arm Neoverce V2(Armv9.0) | |
Microsoft Azure | Cobalt 100 | 128C | 3.4 GHz | Arm Neoverce N2(Armv9.0) |
AWS | Graviton 4 | 96C | 2.8 GHz | Arm Neoverce N2(Armv9.0) |
Ampere | Ampere One A192-32M | 192C | 3.2 GHz | カスタムArm(Armv8.6) |
富士通 | A64FX | 48C | 2.0 GHz | カスタムArm(Armv8.6 / SVE) |
クライアント向けCPUとサーバー向けCPUのそれぞれの各ベンダーの現在の最上位製品のラインナップを書き出してみました。
これを見ると、クライアント向けCPUよりもサーバー向けCPUのほうがコア数が多いことがおわかりいただけると思います。これが主な違いで、クライアント向けCPUは主に少ないタスクのためにコア数を絞ってクロックを高め、サーバー向けCPUはコア数を増やしてクロックもバランスを取るという形になっています。
クライアント向けCPUは物理コア数で20コア前後に収まっているのに対して、サーバー向けCPUは最大128コアなど非常に大きくなっている事がわかります。今後は、Intelが「Xeon 6900E」シリーズで288コア、AmpereがAmpere Oneで192コアの製品を投入することを明らかにしています。
ちなみに、近年では、クライアント向けCPUが使われるような場面においても、マルチスレッド性能が必要なケースが増えていたり、微細化などの技術の向上やTCO(総所有コスト)の観点から、サーバー向けCPUも含めて全体的にコア数は増加傾向にあります。
前述の通り、基本的にマイクロアーキテクチャが同じであれば、演算装置の増減のみで演算機能に大きな差はないはずです。ただしIntelに限っては、AVX-512拡張命令セットに必要な512-bitレジスタをクライアント向けCPUで意図的に欠いているため、使用できないという差はあります。
CPU部分以外での違い
では、CPUの演算装置部分以外での違いを見ていきましょう。
メモリ
まず、メモリ周りの話からしてきましょう。
クライアント向けCPUの場合、メモリは小容量・小帯域です。もちろん、メモリ容量は多いに越したことはありませんが、メモリを増やすということはCPU側の対応も必要になります。
通常のクライアント向けCPUの場合、64-bitメモリコントローラを2基有しており(あるいは16-bitメモリコントローラを8基)、128-bitのメモリバス幅(メモリインターフェイス)を実現しているものが多いです。128-bitのバス幅とはメモリが1クロックサイクルで転送する事ができるデータの量です。メモリの速度である「メモリ帯域幅」は、「メモリバス幅」 ✕ 「データレート」となります。
そして、この通常のクライアント向けCPUの場合、メモリコントローラ1基に対して、メモリスロットは最大2スロットとなるため、多くのマザーボードには4レーンのメモリスロットを搭載しているわけです。ちなみに、マザーボードの指定どおりにメモリを挿入することで異なるメモリコントローラに繋がるため、両方のコントローラが利用可能になりメモリ帯域が2倍(128-bitバス幅)になります。逆に、指定方法以外で挿入してしまうと2基あるメモリコントローラの片方しか使われない事があり、メモリバス幅が64-bitになってしまいます。
例として「Core Ultra 9 285K」を挙げますと、2-chでサポートされるメモリが「DDR5-6400」(6,400 MT/s)ですので、諸々計算しますと102.8 GB/sのメモリ帯域幅になります。
ちなみに、メモリコントローラ 1基あたりを、1メモリチャネル(1-ch)と表現することがあります。
で、サーバー向けCPUの場合、このメモリコントローラの数が圧倒的に多くなります。例として、Xeon 6-Pの最上位SKUである「Xeon 6980P」の場合、ソケットあたり12-chのメモリコントローラを有しており、シングルソケット(後述)でも24スロットのメモリを利用することが可能です。もし、12-chすべてを使った場合のメモリバス幅は768-bitとなり、Xeon 6がサポートするMR-DIMMの場合、データレートが最大8,800 MT/sとなるため、諸々計算して844.8 GB/sのメモリ帯域幅となります。
メモリスロットがクライアント向けCPUが最大4スロットであるのに対して、サーバー向けは最大24スロットという時点で搭載できるメモリの最大容量も異なっています。Core Ultra 9 285Kの場合、最大256GBのメモリを搭載可能ですが、Xeon 6980Pの場合、ソケットあたり最大3TBのメモリを搭載可能です。
また、サーバー向けCPUでは「ECC」メモリをサポートしていることが多いです。ECC(Error checking and correction※)メモリとは、メモリの中でもデータ破損やビット反転を検出・修正する事ができるメモリの種類のことです。
Dynamic-RAM(DRAM)の場合、電磁波の影響などによって特定のビットが反転することがあり、その影響は長時間の駆動が行われ、さらに金融などのデータ破損がどのような状況においても許されない環境が多いサーバーなどで顕著に現れます。そこでECCメモリを採用することで、そうしたデータ破損や反転を自動で検出して、修正することが可能というわけです。どうやってそれをやっているのかについては、パリティとか情報理論の話になって本筋とずれるので割愛。
※ ECCの正式名称はいくつかあり、他に「Error-correcting code memory」「Error check and correct memory」などがあります。日本語では、ECC単体で「誤り訂正」や「誤り訂正符号」という意味があり、ECCメモリを「誤り訂正メモリ」などととする文献もありますが、基本的に使用されません。
PCIeレーン
現代的なアーキテクチャで構成されたシステムの場合、クライアント・サーバー問わず、GPUやNPU、ベクトルエンジンやNIC、拡張ストレージは、PCIeやSATAを用いることが多いでしょう。今回はPCIeをメインにお話してまいります。
PCIeもそのコントローラの影響により、使用できるレーン数というのが決まっています。このレーン数はスロット数と異なるものです。例えば、グラフィックカードをx16のPCIeスロットに装着し、NVMe M.2スロット(PCIe x4)に SSDを装着した場合に消費するレーン数はx16 + x4で合計20レーンとなります。
クライアント向けCPUの場合、搭載されるチップセットにもよりますが、20レーン~30レーンほどしかサポートされていません。例えば、「Intel Core Ultra 285K」の場合、PCIe 5.0を20レーン、PCIe 4.0を4レーンの合計24レーンサポートされています(厳密にはPCIe 4.0は12レーンサポートされており、合計32レーンサポートされているがDMI(CPU-チップセット間接続)に8レーン使用されている)。
他方で、サーバー向けCPUの場合、ソケットあたり96レーン(Xeon 6980P/Ampere One)~128レーン(EPYC 9965)サポートしており、拡張性が非常に高くなっています。
主な使用例では、HPC向けではGPUやFPGA・アクセラレータなど、一般的なサーバーではNICやストレージ(RAIDカード)に使用します。
ソケット数
ソケット数というのはCPU自体の数の単位です。クライアント向けCPUは、基本的にソケット数は1ソケットのものが多いです。一方サーバー向けCPUの場合、2ソケット以上のものが多くなります。
現代のCPUにはメモリコントローラ、PCIeコントローラ、CPUを搭載していますが、これを複数搭載することで、システムを大規模にすることができます。
例えばソケット単体で192コア384スレッドの「EPYC 9965」の場合、2ソケットで最大384コア、768スレッドのシステムを構成することが可能です。またメモリサポートやPCIeのサポートは合算となるため、メモリチャネルは24-ch(48スロット)、PCIeは256レーンサポートされることになります。
HPCとサーバー
とここまでは、サーバー向けCPUとクライアント向けCPUの違いについて述べてきましたが、最後にHPC向けCPUとサーバー向けCPUの違いについてお話しようと思います。
サーバー向けCPUは、ここからまた更に「高密度プロセッサ」「性能型プロセッサ」「超高性能型プロセッサ」と3つに分類することが可能です。
高密度プロセッサとは、主にIntelの「Sierra Forest」やAMDの「Turin(Zen 5c版)」、Ampereの「Ampere One」が当てはまります。これらは主に、クラウド事業者やVPS事業者向けに、一つのシステムで多くのVM(仮想マシン)をホストできるようなCPUとなっています。そのため、性能を重視するというよりかは、ソケットあたりのコア数を重視するようなものとなっており、キャッシュが削られていたり、一部のアクセラレータ(AVX用の512-bitレジスタなど)などが省略されるなどしてコアあたりの面積が小さくなるように設計されています。
性能型プロセッサは、主にIntelの「Granite Rapids」やAMDの「Turin(Zen 5版)」、Ampereの「Ampere One」が当てはまります。これらは、どちらかといえば汎用型で、性能が必要な場面向けの製品となっています。これらは基本的に、アーキテクチャの標準的な機能を維持したまま規模を拡大したような製品となっています。
そして超高性能型プロセッサと勝手に分類しているのは、例えばIntelの「Sapphire Rapids-AP」(Xeon Max)やNVIDIAの「Grace」、富士通の「A64FX」といった、より性能を重視したプロセッサにあたります。こうしたプロセッサは、例えばメモリが特殊な構成になっていたり、インターコネクトやプロセッサ構成、ノード構成がスーパーコンピュータ用に最適化されていたりします。
例えばIntelの場合、性能型の「Sapphire Rapids-SP」ではDDR5メモリのみとなっているのに対して、超高性能型の「Sapphire Rapids-AP」はオンパッケージでHBMメモリを搭載しています。
また、AMDの「EPYC 9684X」は、CCD(Compute Complex Die)の3D方向にキャッシュを積層する3D V-Cahceを採用ことでパッケージで最大1.1GBを超えるキャッシュを搭載しています。
NVIDIAの「Grace」はメモリに高クロックのLPDDR5Xを採用する他、HopperまたはBlackwell GPUとの高速インターコネクト「NVLink C2C」を採用することでシステムのスループットを高めています。
これらの工夫は、普通のXeonやEPYCでは取り入れられていないようなものになっており、スループットを向上させている例です。超高性能型は、性能を高めるためにCPUだけでなく、CPUと接続するあらゆるものとのスループットを向上させる工夫が取り入れられているのです。
まとめ
今回は、クライアント向けCPUとサーバー向けCPUの違いを述べてまいりました。
今回の内容を簡単にまとめましょう。
- クライアント向けCPUは1人の人間が扱いやすい比較的小規模なCPUで、サーバー向けCPUは複数の人間やシステムが扱うことを想定した大規模なCPU
- サーバー向けCPUはクライアント向けCPUよりも、搭載できるメモリ、サポートされるPCIeレーン、マルチソケットのサポートなどで強化されている
- 超高性能型CPUは、より性能を確保するため、メモリやキャッシュ、インターコネクトでスループットを向上させている
クライアント向けとサーバー向け、それぞれのCPUは「何を重視するか」で設計思想が大きく異なります。性能の見た目だけにとらわれず、目的に合った選択をすることが、システム全体のパフォーマンスとコスト効率を最大化する鍵となるでしょう。
と、言ったところで今日はここまで。ほなまた。