Intel は本日、若干の遅延があった Xeon E5 v4 サーバー プロセッサを正式に発表しました。
これらのチップは、22nmプロセスとHaswellマイクロアーキテクチャを採用した2014年のXeon E5 v3の後継製品です。IntelはHaswellを14nmに縮小し、いくつかの調整を経て、最終的な設計にBroadwellというコードネームを付けました。
Broadwell ブループリントを採用したサーバーおよびワークステーション プロセッサは、2015 年初頭から登場しています。そして今、スケールアウト サーバーをターゲットとした Broadwell-EP Xeon E5 v4 が登場する時が来ました。
長々と話すよりも、忙しい皆さんのために簡潔にまとめます。また、姉妹サイトThe Next Platformで、Timothy Prickett Morgan による Xeon E5 に関する考察もご覧いただけます。
Xeon E5-2600 v4プロセッサの概要
新しいXeon E5 v4チップの概要と、同ファミリーとv3チップとの比較をご紹介します。記事内の画像をクリックすると拡大表示されます。E5-2600は、最大22コア(ソケットあたり最大44ハードウェアスレッド)、最大55MBの最終レベルキャッシュ(LLC、別名L3)、最大2400MHzのRAM、DDR4書き込みCRCをサポートできます。各コアは、2KBのデータL1キャッシュ、32KBの命令L1キャッシュ、そして256KBのL2キャッシュを備えています。
追加のコア、いくつかのアーキテクチャの改良、および機能サイズの縮小により、Broadwell は Haswell に対して優位に立っています。
2ソケットのXeon E5-2600 v4ラインナップをご紹介します。(例えば)14Cはコア数が14個で、消費電力とクロック速度は2.4GHz前後です。ハードウェアの買い替えを検討されている方は、これらのラインナップを注文すると良いでしょう。Xeon E5 v4パッケージは、E5 v3 Grantleyチップとソケット互換性があります。
さて、これが概要です。それでは本題に入りましょう。
コアの配置方法
Haswellと同様に、IntelのBroadwellは、物理CPUコアとキャッシュ、そして外部との通信を、対称的なリング状のバス構造で実現しています。例えば、22コアと72億個のトランジスタを搭載した高コア数チップでは、プロセッサは2つの独立したリングを持ち、それらは2つのインターコネクトで接続されています。1つのリングはQPIとPCIe Gen3インターフェースと通信し、2つのリングはそれぞれ2つのチャネルを備えたRAMコントローラーと通信します。
最終レベルのキャッシュはチャンクに分割され、各チャンクはコアの反対側にあるリングバス構造に差し込まれます。コアがメモリにアクセスすると、要求された物理アドレスがハッシュされ、その結果を使用して、キャッシュ ラインが格納されているリング上のキャッシュが検索されます。リング上の L3 キャッシュ スライスは、反対側にあるコア専用ではありません。スライスには、さまざまな他のコアのデータを保持できます。ハッシュ アルゴリズムにより、Intel はメモリ要求を構造全体に分散できます。キャッシュ要求がリングの長さをたどってキャッシュを見つけるには、おそらく最大で 12 個の CPU サイクルかかります。ほとんどのトランザクションは、要求元のコアからデータを保持しているキャッシュまでの最短パスをたどり、数サイクルで完了すると言われています。
Intel のエンジニアは、使用するアルゴリズムを公開していないため、コアが最も近いキャッシュ チャンクに解決される物理メモリのみにアクセスするようにカーネルを設計してシステムを操作することはできず、その結果、リングの周りで要求を実行する際のわずかな遅延が最小限に抑えられます。
以下に、コア数の多いプロセッサ用の 2 つのリング システムと、コア数の少ないパッケージ用の Intel の設計を示します。
マイクロアーキテクチャの調整
Intelは、Broadwellのシングルスレッド性能は、1秒あたりの命令実行数でHaswellより約5%高いと見積もっています。これは、様々なチューニングによって実現されたとのことです。
ベクトル浮動小数点乗算命令MULPSとMULPDのレイテンシが5サイクルから3サイクルに短縮されました。同様に、様々な浮動小数点除算命令(DIVSS、DIVSD、DIVPS、DIVPD)のレイテンシも短縮されました。例えば、256ビット単精度ベクトル除算のレイテンシはHaswellの20サイクルから16サイクルに、倍精度除算は34サイクルから22サイクルに短縮されました。スカラー除算は2つに分割して並列処理できます。
ADC、CMOV、PCLMULQDQ命令(後者はAES暗号化に有用)は1マイクロオペレーション(1命令)となり、プログラム実行速度がさらに向上しました。STLB(Translation Buffers)エントリ数が1,000から1,500に増加したことで、TLB(Translation Buffers)の効率が若干向上し、分岐と復帰のアドレス予測も改善されました。Broadwellには、コード実行をスムーズにするためのこのような細かな調整が随所に施されています。
数学的処理を混ぜて実行する場合の電力の有効活用
Intelのベクトル演算処理命令であるAVXはプロセッサの消費電力を増加させる傾向があるため、チップはソケット内での過熱を防ぐためにクロック周波数を下げます。以前は、IntelプロセッサコアがAVXコードの実行を開始すると、パッケージ内のすべてのコアのクロック周波数が低下していました。Broadwellでは、AVXコードを実行していないコアは速度低下せず、通常通り独立して動作できます。つまり、チップはAVXと非AVXソフトウェアが混在するワークロードを、ペナルティなしで実行できるということです。
コアが一定時間(約1ミリ秒)AVX命令を実行しないと、クロック周波数が制限されます。サーバーアプリが浮動小数点演算を多用する場合、AVXモードが維持されるため、この消費電力関連の機能はあまり目立たないかもしれません。
暗号化の加速
Intelは、PCLMULQDQを7サイクルから5サイクルに短縮し、暗号アルゴリズムに有用な新命令を導入することで、BroadwellのAES暗号化、ECDSA、RSA、DSA署名・検証を高速化できたと述べています。新命令は、ADOX(オーバーフローフラグを用いたキャリーイン/アウト付き符号なし整数加算)とADCX(キャリーフラグを用いたキャリーイン/アウト付き符号なし整数加算)です。新チップと追加命令を搭載したサーバーは、個人データの暗号化、復号化、検証をより容易に行うことができます。
上記のグラフは、Linux上でOpenSSL-1.0.2-beta3を用いた暗号化テストを実行した際の、8コアのBroadwell Xeon-D(2x8GB RAM搭載)と18コアのHaswell Xeon E5-2699 v3(4x32GB RAM搭載)の速度を比較したものです。例えば、Broadwell Xeonは2048ビット鍵を用いたRSA検証処理をHaswellの約1.5倍の速度で実行しました。
RDSEEDというものもあります。これは、強力な暗号化に不可欠な乱数生成器(PRNG)に乱数を事前入力するために使用されるはずです。ブラックボックス設計のため、IntelのRDRAND命令があまり好きでないなら、RDSEEDも気に入らないかもしれません。RDRANDとRDSEEDに関する技術ノートと分析は、こちらとこちら(PDF)でご覧いただけます。
Broadwellは、スーパーバイザモードアクセス防止(SMAP)も導入しました。これにより、カーネルは制御レジスタ(CR4)にフラグを設定することで、カーネルモードコードによるユーザーモードメモリへのアクセスをブロックできます。これにより、信頼された低レベルコードが、意図せず、あるいは悪意を持ってアプリケーションを改ざんするのを防ぎます。システムコールの処理中にアプリケーションとの間でデータのコピーを行うなど、プロセスのアドレス空間に本当にアクセスする必要がある場合、カーネルはフラグを反転することでこのチェックを一時的に無効にすることができます。
ところで、なんと、以前この技術に欠陥があることが判明した後、Intel の Transactional Synchronization Extensions (TSX) が、Xeon E5 v4 を含む Broadwell に復活しました。
TSXを使用すると、プログラマは並行コードのクリティカルセクションの開始と終了をマークし、これらの領域での実行中にメモリアクセスを監視できます。メモリへの書き込みと読み取りはハードウェアバッファにリダイレクトされ、クリティカルセクションの終了時に、データは期待どおりにアトミックにRAMにコミットされます。
2つのスレッドがこれらのセクションのいずれかで同時に同じデータを操作しようとすると、バッファは破棄され、スレッドはクリティカルセクションの先頭までロールバックされます。次に、従来のロックを使用して、一方のスレッドがクリティカルセクションを排他的に処理している間、もう一方のスレッドを所定の位置に保持します。
したがって、2つのスレッドが同じデータ構造(たとえ異なる部分であっても)を操作し、互いのメモリアクセスを侵害しない場合は、ロックは全く必要ありません。プロセッサは、クリティカルセクションにおける各スレッドの作業をアトミックトランザクションとして扱います。開発者は、クリティカルセクションを区別するために、Restricted Transactional Memory(RTM)またはHardware Lock Elision(HLE)のいずれかを使用できます。
ロックの使用を避け、楽観的実行を採用することで、ソフトウェアはデータを高速に処理できます。データベースはトランザクションを高速に処理し、アプリケーションは無駄な処理を減らして時間とエネルギーを浪費します。その複雑さを考えると、Intelがこれを実現するのに何度か試行錯誤を重ねた理由もお分かりいただけるでしょう。