DSN 2008において、IBMのメインフレーム用のz10プロセサの高信頼設計について、アーキテクトのKevin Shum氏が発表を行った。

z10プロセサの高信頼設計について発表するIBMのKevin Shum氏

z10プロセサは65nmプロセスで製造され、クロックは4.4GHz、チップサイズは21.7x20mm、総トランジスタ数は993Mと発表された。

4コアのz10プロセサ(出典:HotChips19でのIBMの発表資料)

この写真に見られるように、4個のプロセサコアを持ち、その周囲に各3MBのキャッシュが配置されている。キャッシュに囲まれた中央の左側の部分はメモリバスコントローラ、右側の部分はI/Oバスのコントローラである。

IBMのメインフレームプロセサは、以前から論理回路のエラー検出を行い、エラーが発生しても、その命令を再実行することにより、中性子ヒットのような一過性のエラー(Soft Error:ソフトエラー呼ぶ)から回復する機構を備えていた。z10の前のz9プロセサでは、命令を1次キャッシュから読出し、デコードして発行する命令ユニットと演算を行う実行ユニットは、それぞれを二重化して比較を行ってエラーを検出していた。

しかし、二重化比較はチップ面積と消費電力が2倍になってしまう。また、z10では4.4GHzと高速のクロックとしたので、二重化した双方のユニットから長い配線で出力を引っ張ってきて比較を行うことが困難になってきた。このため、z10ではレジスタや演算器などにパリティーチェックなどを付け、部分部分でエラーをチェックする方式に変更した。また、演算器のエラー検出には、レジジューチェックを用いている。なお、この方法は、後述の富士通のSPARC64 Vプロセサとほぼ同じエラー検出方法である。

そして、ロードストアユニットから1次キャッシュ、2次キャッシュ、メモリに至る部分はECC(Error Correction Code)でエラー訂正を行っているというように、プロセサチップ全体にエラー検出やECCの網が掛けられている。

z10プロセサの特徴は、毎サイクルごとに、内容が変更されたアーキテクチャレジスタのデータをRU(Recovery Unit)と呼ぶ専用のユニットに格納している点である。そして、このデータを格納するメモリにはECCが付けられている。

次の図のように、CORE Xで論理回路のパリティーチェックなどでエラーが検出されると、RUからエラー発生前の状態を読出し、アーキテクチャレジスタに書き戻す。丁度、wordなどで間違えた操作をしてしまった場合にundoをやるような具合に、元の状態を回復するのである。そして、そこから実行を再開すると、もう、中性子ヒットのようなソフトエラーの場合は、その影響はなくなっているので、今度は正常に実行を継続することができる。詳細に見れば、undoのための時間だけ実行が遅くなっているが、エラーの発生頻度は低いので、それによる性能低下の影響は無視できる。

IBM z10プロセサのエラー回復

一方、undoをやっても回復しない場合は、断線などのハードエラーとみなして、ハイパーバイザプログラムでRUのチェックポイントの内容を別のCORE Yに転送し、CORE Yで実行を再開する。IBMのメインフレームでは、あらかじめCORE Y用の予備のプロセサコアが実装されており、電源や冷却系なども予備系が用意されているので、一つのハードウェア故障では、まず、ダウンしない構造になっている。

このプロセサの設計の過程では、エラー検出、リカバリ系のバグ修正が全体のバグ修正の12~15%に上ったという。例えば、電力を減らすために使用していない回路のクロックを止めるクロックゲートという手法を用いたが、そうすると、動作の止まった回路の出力のパリティーは保証されなくなり、誤ったパリティーの信号が出ることがある。この出力が別のユニットに繋がっており、そこのパリティーチェッカが動作していると、エラーを誤検出してしまう。このような場合には、無効な信号が来るタイミングでパリティーチェッカを止めてやる必要が出る。このような対策にかなりの手間が掛かったという。