タンデムコンピューターズ (Tandem Computers, Inc.) は、ATMネットワーク、銀行、株式市場その他のトランザクション処理を主とする用途向けに無停止コンピュータ(フォールトトレラント・コンピュータ)を製造していた企業である。無停止コンピュータは稼働時間をなるべく長くし、データ損失をゼロにすることを要求される用途で活躍する。1974年創業で、1997年まで独立企業として存続していた。ヒューレット・パッカードのサーバ部門に吸収され、その部門は分社化されたHPEの一部になっている。

## 概要

タンデムの NonStop システムは独立した同一のプロセッサを複数使い、冗長な記憶装置群とコントローラ群を使い、ハードウェアの故障やソフトウェアの誤作動が起きた場合に自動的で高速な「フェイルオーバー」を提供する。

故障やデータが壊れることを考慮し全体に共有される部品がないような設計になっており、それは主記憶装置でも同様である。通常のマルチコンピュータシステムは共有メモリを使い、データを共有して動作している。しかし NonStop のプロセッサは高信頼の配線を経由してメッセージを相互に交換することで協調動作し、ソフトウェアは定期的なスナップショットをとって、メモリ状態のロールバックに備えている。

故障にうまく対処できるだけでなく、この何も共有しない (shared-nothing) メッセージングシステムはスケーラビリティが非常によく、巨大な負荷にも対応できる。プロセッサ数が倍になればシステムのスループットも倍になり、最大4000プロセッサを構成可能である。対照的に一般のマルチプロセッサシステムは共有メモリやバスやスイッチの性能で全体の性能が制限される。4から8プロセッサが一般的な限界であり、それ以上プロセッサを増やしてもシステム全体としての性能向上は見込めない。NonStop システムは、フォールトトレラント性よりもスケーラビリティが評価されて購入されることが多かった。より単純なミニコンピュータの技術で構築されていながら、IBMの大型メインフレームとも互角に競合できた。

フォールトトレラント性とスケーラビリティに加え、NonStop には業界最先端のSQL関係データベースが実装されており、ネットワークや地理的に分散したシステム群のための業界最先端のサポートが存在した。

## 歴史

### 創業

タンデムコンピューターズは1974年、テキサス州出身のジェームズ・トレイビッグが創業した。トレイビッグはまずヒューレット・パッカードの HP 3000 コンピュータの部門のためにマーケティングチームを立ち上げ、オンライントランザクション処理 (OLTP) システムにおけるフォールトトレラント性の市場ニーズがあることを見つけた。しかし、HPはそのようなニッチのための開発には興味を持たなかった。次に彼はベンチャーキャピタルの1つクライナー&パーキンスに加わり、そこでタンデムの事業計画を作成した。トレイビッグは HP 3000 部門からマイク・グリーン、ジム・カッツマン、ジャック・ラストノといった中心的技術者チームを引き抜いた。彼らの事業計画は、停止することなくデータを決して失ったり壊したりしない極めて信頼性の高いシステムを構築することだった。あらゆる「単一障害点 (single point of failure)」を排除した新しいモジュール方式であり、フォールトトレラントでない通常のシステムに比べてそれほど大きなコスト増加にはならない。通常使われない待機系で冗長性を確保するフェイルオーバー型のホットスタンバイシステムよりも安価であり、スループット(処理能力)も高くなる。

それぞれの技術者はこのトリッキーな新設計の担当部分を迅速に進めていったが、他人の担当領域で進展があるとは思っていなかった。ハードウェアもソフトウェアも元になっているのは HP 3000 の設計であり、それを徐々に改良していく形で成り立っていた。HPからはさらに続々と技術者やプログラマがやってきた。カリフォルニア州クパチーノにあるタンデム本社(敷地は2006年4月以降はAppleが所有し、2013年着工以降〜現Apple Park)は、HP 3000 部門のオフィスから400メートルほどしか離れていなかった。タンデムコンピューターズに最初に資金を提供したトム・パーキンスは、かつて HP 3000 部門のゼネラルマネージャを務めていた。

事業計画には、トレイビッグの価値観を反映した独特の企業文化についての考え方の詳細も含まれていた。

最初の設計である Tandem/16 のハードウェアは1975年に完成し、1976年5月、1号機がシティバンクに出荷された。

タンデムは1983年まで右肩上がりで成長を続けた。Inc. 誌は、タンデムをアメリカで最も急成長している公開会社と評したことがある。

### 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日で、この日はロマ・プリータ地震があり、サンフランシスコが被害を受けた。タンデム本社も大きく揺れたが、人的被害はなかった。

### その他の製品シリーズ

1980年から1983年にかけて、タンデムは HP 3000 の影響から脱却すべく、ハードウェアとソフトウェアの全体を再設計することを試みた。コード名 Rainbow と名付けられたハードウェアは、32ビットのレジスタファイルを採用し、VAXより優れたものになることを目指している。主なプログラミング言語としては、Adaのサブセット TPL を採用。そのころ、Adaのコンパイラは最適化されていないものがかろうじて存在するだけだった。また、既存のTALで書かれたコードをTPLに移行させるための手段も全くなかった。OSとデータベースとCOBOLは全く新たに設計された。顧客から見れば全く無関係の新製品であり、ソフトウェア的にも互換性がない。ソフトウェア側の再設計は当初の計画よりも時間がかかった。ソフトウェアが完成したころには、NonStop TXP が Rainbow の性能を上回っていたため、Rainbowプロジェクトは破棄されることになった。その後タンデムは互換性と容易な移行経路の準備を重視するようになる。

Rainbowプロジェクトの一環で、クライアントサーバモデルのアプリケーション開発フレームワーク "Crystal" が開発されており、これが後に Cooperative Systems Inc から "Ellipse" の名で製品化されている。

タンデムは急成長するパーソナルコンピュータ市場に参入するため、1985年 MS-DOSベースの Dynamite というPC(ワークステーション)をリリースした。しかし、設計が独特でIBMのPCとは互換性がなかったため、単なる端末としてしか使い道がなく、早々に市場から撤退することとなった。

NonStop シリーズのOSはスケーラビリティ、信頼性、スペアのリソースを効率的に利用する能力で優れていた。しかし、小型でそれなりの信頼性のシステムを要望する顧客も多く、そのような顧客は慣れたUnix系OSと業界標準のプログラムを使いたがった。他社はそれに対してハードウェアのみで冗長性を持たせる多重化システムを提供していた。中でもそのようなシステムで成功していたのがストラタステクノロジーであり、同社のシステムはIBMの System/88 としても販売されていた。

そのようなシステムでは、予備のプロセッサは通常運用時のスループット向上に寄与せず、単にアクティブなプロセッサと全く同じ処理を「ロックステップ」方式で実行している。両方のプロセッサの結果に差異が生じると、障害が発生したことがわかる。したがって、アクティブなプロセッサ1個に対して、物理的に同一なプロセッサを2個用意して論理プロセッサを構成する必要があり、さらに自動フェイルオーバーで復旧するには論理プロセッサを3つか4つの物理プロセッサで構成する必要がある。このような方式はコストが3倍から4倍かかるが、CPUとして量産されているマイクロプロセッサを使えるため、コスト的に見合うようになっていた。

1989年、タンデムはこの市場向けに Integrity シリーズを投入した。CPUにはMIPSプロセッサを採用し、OSにはUnix系の "NonStop UX" を採用した。1991年、同じデータスレッドを3個の MIPS R2000 で実行させて1つの論理プロセッサを構成する Integrity S2 をリリース。3つのプロセッサの多数決で故障部品を検出する。クロック周波数が高すぎて正確にロックステップを同期させることができないため、多数決は割り込みの際に毎回行う方式だった。また、2個のプロセッサを1組としてさらにスペアの1組を持たせる方式の機種もある。2つのプロセッサがロックステップ実行を行い、結果に相違が生じるとそのペアが故障したと判断してスペアのペアに切り替える。1995年の Integrity S4000 は ServerNet(後述)を採用し、周辺機器なども NonStop シリーズと共通化するようになっていった。Integrity シリーズはNTTのCTRONプロジェクトに採用された。

1995年から1997年にかけて、タンデムはマイクロソフトと共同で Windows NT を使ったクラスターでのSQLの高可用化プロジェクトを行っている。このプロジェクトは "Wolfpack" と呼ばれ、1997年に成果として Microsoft Cluster Server が登場した。マイクロソフトはこの共同開発で大いに恩恵を被ったが、タンデムには何の利益もなかった。これに対応したタンデム製サーバは 2台分のパーツを1筐体に収納し、ハートビート用のネットワークをバスで直結し、障害検知が素早いのが謳い文句であった。しかし、内容は家庭用PC程度のパーツを納めていたに過ぎず、蓋を開けると、Micro-ATXマザーボードが2枚入っており、家庭用PCと大差ないのがありありと分かる。従って、性能も信頼性も低く、特にメモリに起因する障害が頻発した。

### Tandem NonStop のMIPSへの移行

タンデムが1974年に創業した当時、コンピュータ企業は自前でCPUを設計して構築し、独自の命令セットや独自のコンパイラなどを使用するのが一般的だった。半導体集積回路はムーアの法則に従って年々発展し、CPUをワンチップに収められるようになり、結果としてさらに高速化・低価格化が進んだ。しかしコンピュータ企業にとっては、自前でCPUを設計し製造しようとすると、莫大な費用がかかるようになっていった。1991年には、他社と競合できるだけの性能のCPUを設計・生産できるのは、ごく一部の大企業だけとなった。タンデムはそれほどの大企業ではなく、NonStop シリーズのCPUを他社製マイクロプロセッサに切り替える必要に迫られていた。

HP の HP 3000 およびそのOSであるMPEの部門も同様な問題を抱えていたが、1986年に賢い手段を見出した。HPの研究所でRISC設計のCPUが設計され、必須でない部分を全てそぎとってワンチップに収めた。命令パイプラインを効率よく動作するよう設計しており、ECLを使った当時のメインフレーム並みの性能を発揮した。HP 3000 が使っていたマイクロプログラム方式のスタックマシンの何倍も高速に動作した。

しかし問題は、既存製品のベンダー、顧客、サードパーティー製ソフトウェアをどうやって移行させるかである。一部ソフトウェアは移植性を考慮して書かれており、単に再コンパイルすればよい。他のソフトウェアは再コンパイルだけでは移行できない。HPの研究所は、エミュレータやオブジェクトコードの自動変換で古いバイナリを新しいマシンで実行する方法を考案し、それを広く公開した。同様の技法はAppleがMC68000系からPowerPCへと移行する際や、DECがVAXからAlphaへ移行する際にも用いられた。

HP 3000 の移行計画での問題として、プロセッサの移行と同時にOSを新たな言語で書き直そうとしていた点がある。これについてはエミュレーションを使おうとはしなかった。しかし、この書き換えは予想していたよりも何年も長くかかった。そのため、HPのRISCプロセッサはMPEがリリース可能となる前に古くなってしまった。タンデムはこの間違いから学んだ。

ビジネス上の理由から、タンデムはHPのPA-RISCやサンのSPARCを採用できなかった。そこでミップスと提携し、R3000とその最適化コンパイラを採用することにした。その後、NonStop シリーズはMIPSアーキテクチャを採用し続けることになった。

1991年、タンデムは Cyclone/R、またの名を CLX/R をリリース。これはCLXのコンポーネントを基にした低価格のミッドレンジシステムだが、CPUにR3000を採用している。市場に素早く投入するため、MIPS本来のソフトウェアを全く付属せずに出荷された。NSK (NonStop Kernel) というオペレーティングシステムとSQLデータベースに含まれるソフトウェアはTNSのスタックマシンの機械語にコンパイルされている。それらのオブジェクトコードは、カーネルのインストール時に Accelerator と呼ばれるツールを使って一部最適化されたMIPSの等価な命令列に変換される。比較的重要性の低いプログラムは事前に変換せず、TNSの持つコードインタプリタ(エミュレータ)が解釈して実行する。この移行技法は成功し、今も使われ続けている。どのソフトウェアもそのまま移行でき、ミッドレンジとしては性能もよく、プログラマは命令セットの違いを無視でき、機械語レベルでのデバッグも問題なく実施できる。Cyclone/R はその後のリリースでネイティブなMIPSのコードで書き直されたNSKを使うようになり、さらに高速化した。

R3000もその後のマイクロプロセッサも、内部のエラーチェックはほとんどしておらず、タンデムのニーズには不十分だった。そこで Cyclone/R ではR3000を2個ロックステップで実行し、全く同じデータスレッドを動作させた。この際のロックステップは一般的なものとは異なり、チェッカー・プロセッサがプライマリ・プロセッサから1サイクル遅れた形で実行する。マイクロプロセッサをロックステップ実行するには、そのチップが完全に決定論的に動作するよう設計しておく必要がある。隠れた内部状態は、チップをリセットすることで完全にクリアされなければならない。さもなくばリセット後しばらくたってから、2つのチップが目に見えない原因で障害が発生したわけでもないのに同期から外れることになる。チップ設計者も、製造時のチップの検査にそのような原則が有効だということには同意するだろう。しかし、新しいマイクロプロセッサはそのあたりに常に問題があり、ミップスとタンデムは問題解決のために何カ月も共同作業する必要に迫られた。

1993年、MIPS R4400を使用した NonStop Himalaya Kシリーズをリリース。ネイティブモードのNSK、Cyclone システムのコンポーネントを使った完全な拡張性を備えている。バスは相変わらず Dynabus、Dynabus+、独自I/Oバスであり、性能的には限界を迎えていた。

1994年、NSKにUnix風のPOSIX環境 Open System Services が加えられた。もともとの Guardian のシェルとABIはそのまま利用可能である。

1997年、タンデムは NonStop Himalaya Sシリーズ をリリースした。Sシリーズは NonStopファミリの基本設計を変更したシステムであり、I/O にも CPU間接続にも新たに ServerNet と呼ばれる相互接続バスを使用している。 Dynabus や FOX が CPU をリング状に接続したのに対して、ServerNet は完全な P2P ネットワークであり、より高速に動作し、網状の冗長性を持たせることができる。タンデムは ServerNet の利用を他社にも勧め、後に業界標準となるInfiniBandの基盤となった。

Sシリーズでは、MIPS の R4400 や R10000、R12000、R14000 が使用された。

MIPSアーキテクチャの後期のコアはシリコングラフィックス (SGI) の資金で設計された。しかし、インテルの Pentium Pro がRISCに対して性能的に優位に立つようになり、同時にSGIの業績も悪化した。R10000以降、MIPSアーキテクチャのハイエンドのコア設計は予算が削減され、単にプロセスルールを縮小してクロックを上げるだけとなっていった。そのためタンデムはNonStopシリーズのCPUを再び別のアーキテクチャに変更することを迫られた。

### コンパックによる買収とAlphaへの移行の試み

ジェームズ・トレイビッグは1996年に業績悪化するまでタンデムのCEOを務めた。

コンパックのx86サーバ部門は早くからタンデムの ServerNet/Infiniband 技術を採用していた。1997年、コンパックはタンデムコンピューターズを買収し、NonStopシリーズの顧客ベースを引き継ぐことでローエンドPC一辺倒のコンパックの事業形態の転換を図ろうとした。1998年、コンパックはさらにもっと大きな企業であるディジタル・イクイップメント・コーポレーション (DEC) を買収。DEC Alpha を採用したRISCサーバと OpenVMS および Tru64 UNIX の顧客ベースを引き継いだ。そのころタンデムはNonStopシリーズを MIPS R12000 からインテルの新たなマイクロプロセッサ Itanium に移行させようとしていた。しかしDECを買収したコンパックはNonStopをAlphaに移行させ、ハイエンドサーバの製品系列を整理しようとした。ところがコンパックは2001年にAlphaの新規開発をやめ、未知数のItaniumの採用を決定。Alpha版のNonStopは出荷されることなく終わった。そのためNonStopの移行プロジェクトは再スタートを余儀なくされ、Itanium 2 をターゲットにすることになった。

### HPによる買収とItaniumへの移行

2001年、ヒューレット・パッカード (HP) もPA-RISCから(もともとHPも設計に加わっていた)Itaniumへ移行することを選択した。コンパックとHPが合併を発表すると間もなく、類似する製品ラインの統合整理の計画が発表された。この議論を呼んだ合併は2002年5月に正式に行われた。統合には痛みを伴い、DECやHPの独自文化は破壊されたが、NonStop部門とその顧客を維持することの重要性はわかっていた。

言ってみればタンデムは、HPに触発されて創業し、HPをライバルとして成長し、HPに吸収されることで故郷に帰ったようなものだが、そのHPはかつてのHPと同一ではなかった。

NSKベースのNonStop製品をMIPSからItaniumへ移行させると、HP Integrity NonStop サーバというブランドで販売することになった。この場合の "Integrity" はHPのサーバが以前から使っていた名称であり、タンデムの Integrity シリーズとは無関係である。

Itanium 2 (McKinley) はクロックレベルでロックステップ実行することはできない。そのため Integrity NonStop ではもっと長い時間間隔、割り込みの時点やソフトウェアの中間同期ポイントでチップの状態比較を行う。中間同期ポイントは分岐命令を数えて n 回目の分岐で自動的に同期ポイントに入るようになっており、NonStop用コンパイラが長いループの中に明示的に挿入している。マシンには二重化または三重化の冗長性を持たせることができ、2個または3個の物理プロセッサで1つの論理プロセッサを構成する。三重化版は最も高い信頼性を求めている顧客向けである。この新たなチェックポインティング方式をNSAA (NonStop Advanced Architecture) と呼ぶ。

スタックマシンからMIPSへの移行のときのように、顧客のソフトウェア資産はソースを書き換えることなく移行された。ネイティブモードのソースコードは再コンパイルによりItanium向けのオブジェクトに変換。さらに古いネイティブでないソフトウェアは、スタックマシン向けのオブジェクトのままである。これはMIPSの際と同様にコード変換技術を使って自動的にItanium上に移行された。

Integrity NonStop はHPの品揃えの中でも最も大規模で高信頼性を求める顧客に対応している製品である。OSは NonStop OS と呼ばれるようになっており、Javaサポート、Visual Studio や Eclipse といった開発環境の統合といった拡張がなされている。

## 製品

(2009年1月現在)

- HP Integrity NonStop BladeSystem (HP BladeSystem対応のNonStop サーバ、Itanium搭載)
- HP Integrity NonStop サーバ NS-Series (Itanium搭載の超並列フォールトトレラントサーバ)
- HP NonStop サーバ S-Series (MIPS R16000搭載の超並列フォールトトレラントサーバ)