Title: タンデムコンピューターズ (Tandem Computers)
Section: 歴史
Subsection: Tandem NonStop (TNS)

35年以上に渡り、タンデムの主力製品である NonStop シリーズは、最初の T/16 フォールトトレラントシステムから互換性を保ちつつ発展し続けた。その間に、モジュラー・アーキテクチャやプログラミングレベルの命令セットアーキテクチャの面で3回の大きな変更がなされている。各シリーズの中で、半導体集積回路技術の進歩に対応して何度か大きな再実装が行われている。メインフレームなどの当時の一般のシステムでは平均故障間隔 (MTBF) は数日のオーダーだったが、NonStop システムはその100倍の故障間隔で設計され、連続稼働時間は年単位となっている。それにもかかわらず、NonStop は一般のシステムと価格の上で競合可能な価格設定がなされた。当時のフォールトトレラントシステムが1CPUのメインフレームの4倍以上の価格設定だったのに対して、最小構成の 2CPUシステムは1CPUのメインフレームのほぼ2倍の価格であった。最初のシステム Tandem/16 または T/16 は、後に NonStop I へと改称。2 から 16個のプロセッサで構成され、全体としてフォールトトレラントなクラスターを構成したものが1つのラックに収まっている。各CPUには共有されないローカルメモリとI/Oプロセッサがあり、CPU専用のI/OバスにI/Oコントローラ群が接続されていて、独自の二重化されたCPU間バス Dynabus で相互接続されている。ディスクコントローラやネットワークコントローラも二重化されており、CPUから2つのコントローラに接続すると同時に、コントローラからも2つのCPUに接続している。個々のディスクはミラーリングされており、2つの独立したディスクコントローラそれぞれに接続されている。あるディスクが故障しても、中身はミラーリングされたコピーによってアクセス可能である。CPU、コントローラ、バスなどが故障した場合、多重化されたもう一方のCPU/コントローラ/バスを通してディスクにアクセスし続けることができる。電源も多重化しており、一方が故障してもシステムはそのまま稼動し続ける。顧客のシステムの巨大な部品構成とそれらの複雑な相互接続は「マッキー図」と呼ばれる形で文書化された。これはタンデムの営業部門のデイヴィッド・マッキーが発明した記法である。多重化された各部品はいずれも待機系として無駄になることはなく、通常運用時のスループット向上に寄与するようになっている。障害からの復旧だけでなく、T/16 は考えられるあらゆる間欠障害を素早く検出するよう設計されており、これを "fail fast" と称した。すなわち、データが壊れたとき、それが恒久的にデータベースやディスク上のファイルに書き込まれる前に検出して隔離する。T/16では誤り検出用に特別な回路が追加されており、若干コストを押し上げている。誤り検出のために主要部品を多重化するという方式（多数決方式など）は採用していない。T/16のCPUは独自設計である。HP 3000 ミニコンピュータの影響を強く受けている。どちらもマイクロプログラム方式で16ビットのスタックマシンであり、セグメント方式の16ビット仮想アドレッシングを採用している。高水準言語でプログラミングすることを意図した設計で、アセンブリ言語は基本的に使わない。どちらも当初は低集積度のTTLチップで、1チップあたり4ビット幅のALUを4つ連結して16ビットのALUを構成していた（ビットスライス）。スタックのトップ部分がレジスタとして実装されており、他にメモリ上のスタックにアクセスするためのアドレスレジスタなどを備えている。どちらもオペランドのアドレスオフセットにハフマン符号を使い、多種多様なアドレスモードやオフセットを16ビットの命令フォーマットに稠密に収めるようになっている。命令フォーマットの短さをカバーするため、どちらも間接アドレス参照を多用する。どちらもALUを複数回反復使用して32ビットや64ビットのオペランドの計算をサポートしており、メモリ間の文字列操作もサポートしている。どちらもビッグエンディアンである。これらの特徴は、同じくスタックマシンだった バロース B5500-B6800 メインフレームを手本としていた。T/16の命令セットは HP 3000 からは若干変更されている。T/16は当初からページ化仮想記憶をサポートしている。HP 3000 シリーズは、10年後にPA-RISCを採用するまでページング方式を追加しなかった。タンデムは2代目のマシンで32ビット・アドレッシングを追加サポートしたが、HP 3000 ではそれもPA-RISCまでサポートしなかった。ページング方式と大きなアドレス空間は、複雑で大規模なソフトウェアやアプリケーションにとって重要である。T/16ではスタックトップを表しているレジスタ群の扱いが HP 3000 とは異なっていた。HP 3000 ではスタックが深くなったときのレジスタからメモリへの転送、あるいはスタックが浅くなったときのメモリからレジスタへの転送はマイクロコードが行っており、全命令で余計なマイクロコード処理が必要だった。T/16ではそれをコンパイラに任せている。HP 3000 はCOBOLサポートのためにBCD演算を実装していた。T/16ではBCDと64ビット整数との変換命令のみを用意し、BCDを直接扱わないようにして単純化している。T/16の各CPUは、TTL論理回路とSRAMを搭載した2枚の基板で構成されており、約0.7MIPSで動作する。同時にアクセスできるのは4つの仮想記憶セグメント（システムデータ、システムコード、ユーザーデータ、ユーザーコード）で、それぞれ最大128kBとなっている。16ビットのアドレス空間は出荷時点には主なアプリケーションでは既に小さすぎた。T/16には当初 Tandem Application Language (TAL) という1つのプログラミング言語しかなかった。ハードウェアに依存した高効率のプログラミング言語で、オペレーティングシステムやコンパイラだけでなく、アプリケーションにも使われた。これは HP 3000 の System Programming Language (SPL) が元になっている。意味論的にはC言語に似ているが、文法はバロースのALGOLに基づいている。その後 COBOL74、FORTRAN、MUMPS をサポートした。NonStop シリーズでは、システムのフェイルオーバモード実現の鍵であった独自オペレーティングシステム Guardian を搭載していた。他社はフェイルオーバーを実現する際に他のCPUでプログラムを再始動させていたが、Guardian では全ての処理はメッセージパッシングを使い、全ての操作でチェックポイントが設定された。結果として Guardian ではプログラム中の任意の位置から処理を再開することができる。これにはスタックベースのプロセッサがほとんど内部状態を持っていないために、プロセスをCPUからCPUに移動しやすいという点も影響している。全ての命令はスタックからデータを取り出し、演算結果をスタックに戻す。演算中に障害が発生したら、スタックを他のCPUにコピーして失敗した命令から処理を再開することができる。NonStopシリーズのオペレーティングシステム (OS) は、UNIXや HP 3000 のMPEとは大きく異なる。当初 T/TOS (Tandem Transactional Operating System) と呼ばれていたが、間もなく Guardian と改称。ハードウェアの故障やソフトウェアの障害からあらゆるデータを守るという意味がこめられている。当時の一般的な商用OSとは異なり、Guardian はメッセージパッシングを基本としたプロセス間通信を採用しており、共有メモリは使わない。したがってプロセスがどのCPU上で動作していても同じ方式でやり取りできる。この方式は容易に大型のコンピュータ・クラスターにも拡張可能で、壊れたデータの影響が広がらないよう隔離するのにも役立つ。ファイルシステムプロセスや全てのトランザクション処理を行うアプリケーションプロセスは、マスタースレーブ構成になっていて、異なるCPU上でマスタープロセスとスレーブプロセスが動作する。スレーブプロセスは、マスタープロセスのメモリ状態を一定間隔でスナップショットしており、マスタープロセスで障害が発生した場合に作業を肩代わりして続行する。これにより、アプリケーションはCPUや周辺デバイスなどで障害が起きても、データを失うことなく処理を続行可能である。これにより、間欠的なソフトウェア障害からの復旧も可能となる。通常運用時、スレーブプロセスによる監視が若干のオーバーヘッドを伴うが、他のシステムでの100%の複写をとる方式よりもオーバーヘッドは少ない。初期の主なアプリケーションはこのようなチェックポイント型のコードを直接書いていたが、多くの場合タンデムが提供する抽象化ソフトウェア層を使い、詳細を隠蔽した形で書かれていた。1981年、T/16 CPU は全て NonStop II に置き換えられた。T/16からの主な違いは、「拡張データセグメント」をユーザーが切り替えられるようにして特別な32ビット・アドレッシングをサポートした点である。これにより、その後10年間のソフトウェアの成長に備えることができ、T/16や HP 3000 に対して大きな優位に立つことになった。しかしレジスタは16ビットのままであり、アドレス空間を拡張したことで他の32ビットのミニコンピュータよりも通常のメモリ参照にかかる命令数が多くなってしまった。その後のNonStopは、この不十分な命令セットに悩まされることになる。また、NonStop II は内部データパスも拡幅しておらず、32ビットアドレスを扱うのに余分なマイクロコードの処理が必要だった。NonStop II CPUは3枚の基板で構成され、使用しているチップや設計はT/16とよく似ている。NonStop II はまた、磁気コアメモリからバッテリーでバックアップされたDRAMへと切り換えている。1983年に登場した NonStop TXP CPU は、TNS命令セットアーキテクチャの全く新しい実装である。標準TTLチップとPLAで構成されており、CPUモジュールを4枚の基板で構成している。タンデムとしては初めてキャッシュメモリを採用した。32ビット・アドレッシングをより直接的に実装しているが、内部機構は依然として16ビットのままである。マイクロコードの改良で命令当たりにかかるサイクル数を減らしており、性能は2.0MIPSとなった。これまでと同じくラック型筐体で、コントローラ、バックプレーン、バス等も同じである。DynabusとI/Oバス群はT/16にはオーバースペックだったため、この新世代モデルでもそのまま利用できた。TXP と同時期に新たに光ファイバーバスシステム FOX が導入された。FOX は複数の TXP や NonStop II を相互接続し、最大14ノードを分散配置したシステムを構築することができ、全体で最大224CPUとなる。これにより、大型メインフレーム並みの用途にも対応可能となった。Guardian はこのネットワーク上でもフェイルオーバーを行う機能を備えていた。また、従来からある長距離ネットワークリンクを経由して最大4000CPUの世界規模のクラスターを構成することもできる。1986年、第3世代のCPU NonStop VLX がリリースされた。データパスを32ビット化し、クロック周波数を12MHzとして、性能を向上させている。ECLゲートアレイを採用し、3枚の基板でCPUを構成している。Dynabus も改良し、従来 13Mbit/sだった性能を40Mbit/sにした（2本合計の性能であり、ひとつのバスは20Mbit/s）。また、総延長を 1km から 4km に伸ばした FOX II もリリース。従来の FOX で VLX を従来機種（TXP や NonStop II）と混在させることができたが、FOX II は従来機種をサポートしていない。タンデムが当初サポートしていたのは Enscribe という階層型データベースで、関係データベースではなかった。これを関係データベースへと発展させたのが ENCOMPASS である。1986年、タンデムは最初のフォールトトレラントSQLデータベース、NonStop SQL を導入した。NonStop SQL は全くの独自開発で、Guardian の機能を取り込んでノード間のデータ整合をとる機能を持っていた。NonStop SQL はシステムにノードを追加してもリニアに性能向上することで有名であった。当時の多くのデータベースの性能は 2CPU程度で飽和状態となることが多かったのである。1989年にリリースされたバージョンでは、トランザクションを複数ノードに分散展開する機能（2相コミット）が追加された。当時、概念としては確立していたが、実用システムとしては珍しい機能であった。現在は、この機能は主だったデータベースシステムでは標準となっている。後にタンデムのSQLデータベース部門はマイクロソフトに売却され、マイクロソフトがクラスタシステム技術を発展させるのに寄与した。1987年、VLXのミニコンピュータクラスの小型マシン NonStop CLX もリリースされた。無停止コンピュータをローエンド市場にも広めることを目的とし、タンデムの大規模システムの遠隔サイトなどでの利用を意図していた。CLX は初期の TXP とほぼ同等の性能だがより小型で低価格化している。CLX は最終的には性能を向上させて1991年には VLX の 80% の性能を示した。VLX と CLX の違いは大きさと拡張性だけとなった。CLXのCPUはEDAで設計された6個のASICチップ（CMOS）で構成されている。CPUの中核となるチップは二重化されていて、ロックステップ実行によって誤りを早期に検出するようになっている。このようなチップ構成はピン数が最大の課題だった。マイクロコード、キャッシュ、TLBなどはCPU中核チップに外付けされるため、1つのバスをこれらで共有し、SRAMのメモリバンクもそのバスに接続する形となった。結果としてCLXは1命令に最低でも2クロックサイクルかかるようになった。1989年、タンデムはメインフレームクラスの高性能だが高価なシステム NonStop Cyclone をリリース。CPUは自身でチェックを行う方式で、ECLゲートアレイを搭載した3枚の基板とメモリ基板で構成されている。マイクロプログラム方式だが、スーパースケーラであり、1サイクルで最大2個の命令を実行できる。2つの命令の組み合わせごとにマイクロコードのルーチンを用意することで実現している。非常に高速化したが、システムの基本設計は従来機種と変わっていない（16ビット・アーキテクチャである）。そのため同時に実行する2命令で、通常の32ビット・ミニコンピュータの1命令相当の仕事をする。Cycloneの筐体1つには4CPUが搭載され、筐体間を Dynabus の光ファイバー版で相互接続する。タンデムが実施したベンチマークによれば、Cyclone は CLX 800 の約4倍の性能であった。ちなみに Cyclone が発表されたのは10月17日で、この日はロマ・プリータ地震があり、サンフランシスコが被害を受けた。タンデム本社も大きく揺れたが、人的被害はなかった。