MCL(98)

インデックスに戻る

前のMCLへ  次のMCLへ

▼ My Computer Life (98)

98. PCIe

 2002年に、それまでのPCIバス規格の後継として、PCI Expressが策定された。略して「PCIe」なんて書いたりもする。速度的に限界のあったPCIをリプレースするとともに、ビデオカード専用のインターフェイスだったAGPとの統合も期待されていた。

 そもそもバス、と何でもかんでも呼ぶけど、一応ちゃんとした定義はある。
 バスとは、コンピュータ内外の情報をやり取りする、信号線の事だ。元々の言葉の由来は、複数の機器を繋ぐ方式のうち、バス型ネットワークを採用している事による(他にはスター型、ツリー型などがある)。更にそのバス型ネットワークという言葉の語源は、あの交通機関のバスから来てるんだと思う(更に言うと、その交通機関のバスの語源は、ラテン語のオムニバスから来ているようだ。ただし、オムニバスという言葉の「意味」と、交通機関のバスの意味とに繋がりはない)。
 この由来で分かる通り、複数の機器を繋ぐための仕組みなので、1対1の接続に使う信号線は、あまりバスとは呼ばない。例えばPS/2接続のキーボードやマウスのコネクタは、バスではない。

 コンピュータの中で使われているバスとしては、まずCPUの内部、そして外部のバスが挙げられる。CPU内部のバスは、演算装置、制御装置、内部キャッシュなど、あのちっちゃい集積回路の中を流れるほっそーい電線となる。CPU外部には、それぞれメインメモリや、グラフィックなどの制御装置、外部キャッシュ、それから外部機器に繋がるような経路が普通ある。このCPU外部バスの事を、システムバスなどと言ったりする。昔は、CPUから直接そのメインメモリやグラフィック部分や外部機器とCPUが直接接続していたりした。今では、まずCPUからのバスは全てマザーボードのいわゆるチップセットに接続し、そこから各経路がぶら下がるのが普通だ。
 また、このようなCPU内部/外部バスは、一般的にアドレスバスとデータバスという2つの帯域で構成される。アドレスバスは、メモリなどの位置であるアドレスを指定し、データバスはその中身であるデータが情報として流れる事になる。

 それから、マザーボードから外の機器に繋がるバスもある。これは、マザーボードのスロットに挿す形のものもあれば、直接コンピュータの筐体の外に繋がるようなものもある。一般的にこれらは、コンピュータから見て外部に接続するので、外部バスなどと言ったりもする。が、上で書いたCPUから見て外という意味のCPU外部バスという用法もあるので、マザーから外に出る方は拡張バスなどと呼んだりする事もある。

 バスの種類を大きく分けると、シリアルバスとパラレルバスになる。
 名前で分かるとおり、シリアルバスは、実際の情報が流れる線が1本になる。パラレル(平行)は、複数の信号線が情報を送る。
 なんとなくイメージだと、シリアルよりパラレルの方がデータの転送能力は高いように思える。実際、昔はそうだった。1本の線で情報を送るより10本の線で送った方が速い。だから、昔のPCはなんでもかんでもパラレル方式で、結果としてケーブルが全部太かったし、そのコネクタもでかかった。大昔のプリンタケーブルとかFDD/HDDのケーブル見ると笑えるよ。ごつくて太くて。
 だが、近代になって、逆にシリアルバスの方が速度的に有利になった。と言うのも、まずパラレルバスと言うのは、同期の問題がある。複数の信号線が、「このタイミングで正しいデータになっているよ」というのが保証されないと、各信号が1なのか0なのか判断できない。この同期は、速度が上がるとシビアになっていくので、ある程度以上は上げられない。そしてまた、干渉の問題もある。複数の線を信号が流れると、電磁的なアレで他の線に信号が影響してしまい、ノイズが入る。これももちろん、高速になればなるほど問題になる。
 このように、同期・干渉の問題があるので、パラレル方式はある程度以上の速度を上げられないし、また距離も長くできない。
 逆に言うと、シリアルはこれらの問題が無いので、制御技術、信号線の精度、そして内部を流れる信号のソフト的な改良が進んでいき、ついにはパラレルを追い抜いた。今で言うと、USB、SATA、IEEE1394、LANなどがシリアル方式だ。そしてまた、今回取り上げるPCI Expressも、シリアル化した規格の一つだ。

 大昔は、拡張バスの規格なんか決まっていなくて、というかPCの規格自体共通してないので、各社バラバラだった。拡張バスに挿すカードなど、機種ごとに違っていて当然という考えだった。
 それが、やはりPC/AT互換機が出てきて、少しずつ共通化の流れになった。この、ATで使われていたバスは、のちにISAバスと呼ばれるようになった(詳しく言うと、XTバスを経て、ISAバスに繋がった)。この呼称は、後継規格であるEISAバスができた時に、「良く良く考えたら、これまでみんな使っていた拡張XTバスに名前がなくね?」ってなって、後付けで命名された。いわゆるレトロニムだ。

 また、PC-9801で使われていたバスはCバスと呼ばれるようになり、またAppleはMacにNuBusという規格を採用した。
 (※ところでISAって、Wikipedia先生によるとアイサって読むんだ…。ずっと脳内ではイサバスって呼んでたよ…)

 ISAバスは長い期間使われたが、最初から若干ポンコツ規格だった。
 と言うのも、元々はデータ8ビット・アドレス20ビットだったXTバスを拡張して、データ16ビット・アドレス24ビットにしているので、増えた分の端子を全然別のところにつけている。その他の継ぎ足しも、バラバラな印象がある。
 まあそれでどうにかこうにか、16ビット・8MHzの外部バスとしての規格になったが、そもそもこの速度では、PCの進化からは一瞬で取り残されてしまった。
 そこで、拡張規格としてEISAが作られたわけだ。

 EISAは、ISAを更に拡張して、データ・アドレスともに32ビットまで拡張した。そして、IRQのリソース番号の問題もある程度解決した。
 ちょっと説明しよう。コンピュータにおいては、外部機器からの信号というのは、割り込みという仕組みを使ってやり取りをする。CPUが一生懸命計算をしているところに、「うちのところからデータ行くやで〜」と直通電話をするイメージだ。CPUはこの直通電話をいくつか持っており、それぞれ1番、2番と順番に番号を振っている。これをIRQ番号と言う。
 ところが、ISA規格では、何番のIRQ番号に直通電話を送るかは、そこに挿す外部機器側が決めている。つまり、そこに挿すボードが「うちは10番に直通電話するやで」と決めていたら、そのボードが10番を占有する。従って、同じ10番を利用する他のボードとは衝突する。他に空いてる直通電話があっても、振り替えたりしない。
 これってコンピュータの仕組みとしてひどすぎるよね。まあ結局、元々規格化するつもりが無かった、PC/AT機がなし崩しに共通規格になっているところに原因があるんだけど…。
 さて、EISAはさすがに後継規格だけあって、このIRQの割り当ては、外部機器側ではなく、EISAのコントローラが振り分ける形になった。これで、衝突の問題は解決された。

 だが、EISAはISAの問題は解決したものの、さっぱり普及しなかった。というのも、バス幅は物理的にデータ・アドレスともども32ビットまで拡張したけども、ISAバスとの互換性を保つために、バス周波数は8MHzというトロさのままだった。
 先ほどのIRQの仕組みもそうだけど、EISAバスの規格を満たすためには、ボード側の機能を色々ISAから変更しなければいけないわりに、転送速度はISAからそんなに変わっておらず、メーカー側に乗り換えるだけの意義があまり見つからなかった、という話だろう。
 結果として、ISAバスが引き続き使われる事になった。このようなEISAにまつわる混乱の原因の一つは、そもそもAT機を作った親分のIBMが、EISA規格に反発していたという事情もある。

 しかし、もはやISAバスの速度では、特に高帯域を要求されるビデオカードなどは到底まかなえない時期が訪れていた。
 そこでメーカー各自、独自に信号線を追加したりしてどうにかしようとしていたのだが、「どうせそういう間に合わせをするなら、間に合わせの規格を作っちゃおう」と、VESAという団体がVLバスを策定した。
 これは、ISAバスに、インテルのCPUであるi486のバスを追加したものである。だからまず二重の意味で乱暴だ。まずは、CPUのバスをそのまま拡張バスにまで引っ張っているという無茶苦茶さだ。普通CPUバスと言うと、例えばメインRAMとの接続等に使われ、比較的短い距離で頻繁にデータのやり取りをするというような用途が想定されている。そしてまた、元々データやアドレス用の端子があるISAバスに更にそのようなCPU直結バスを追加しているので、VLバスはそのコネクタが異常に長い。マザーボードの全長にほぼ等しいくらいの幅になる。
 このような仕組みなので、VLバス部分は非常に不安定だったし、そして何よりも、CPUの仕様と直結しているので、i486以外のCPUで使う事ができず、Pentiumが出てきたあたりで破綻した。

 という状況で、ようやく新しい規格として、PCIが出てきた。
 これは、今まで書いてきた、XT/ISA/EISA/VLなどの各バスの欠点を全て解消される事を期待されて生み出された規格である。インテルが中心となって策定が進んだ。
 具体的には、32ビット/33MHzの幅、速度が定められ、CPUに依存しない事、IRQを共有する仕組みなど、普通に考え付く「当たり前」の仕様が規定された。これが作られたのが1992年の事だ。
 ただ、動作電圧は、5Vと3.3Vの両方が許容された。これは、当初は5Vで動作する機器が多かった事が関係しているのだろう。一般的には昔の機器の方が動作電圧が高い。その方が信号的に安定するからだ。しかし、電圧が低い方が消費電力・発熱の面で有利なので、次第に電子機器の動作電圧は下がる方向にある。

 やがてPCIは、2.0、2.1、2.2、2.3…とバージョンアップしていった。64ビット/66MHzの動作が許容され、また段々と電圧5Vの動作は許容されなくなり、3.3Vへと移行していった。
 もうそのあたりの時期になると、ISA/EISA/VLバスなどは完全に駆逐し、PCI用カードが基本となった。そして、CPUやアーキテクチャに依存しない仕組みとなっていたので、やがてPC-9821やMacintoshでも使われるようになり、業界全体が統一された。

 これでしばらくは安寧の時代が訪れたが、そのうちまたビデオカードで帯域が不足した。もうこの時期あたりから、3Dゲームがバリバリと登場しはじめ、単純に画像を表示すればいいってものじゃなくなってきた。計算量も多いし、テクスチャやZバッファも面倒見なければいけなくなるし。
 そこで、AGPという、PCIを更に拡張したバスが登場した。これはおおむねPCIなのだが、若干の拡張が加えられた規格となる。元々PCIという規格が、データバスとアドレスバスを共有しているのに対し、AGPは8ビットの幅のちょっとした独立アドレスバスを持っていて、高速化に寄与できる。それからまた、AGPを介して、ビデオカードとPCのメインメモリを直結する(つまりCPUを通さずに接続する)仕組みも搭載された。
 まあでもそんなサブ機能がどうとか言うより、AGPは1回のクロックで2度のメモリアクセスを行う機能が搭載されており、単純に転送速度が2倍だった。そこが、メインメモリとビデオカードの間での転送速度の向上に寄与した。これはAGPのバージョンが上がると、後に4倍速、8倍速となっていた。

 このようにして、AGP+PCIという時代が続き、ビデオカードの帯域不足に関してはAGPが進化するという形で対処がなされてきた。だが、そのうちそれ以外の機器の速度増加が、PCIの帯域不足を招くようになった。例えば、HDDも高速化およびRAID化により、転送速度が重要になってきたし、またイーサネットも高速化し、社内ネットワークなどの速度にも影響するようになってきた。
 これらの問題に対して、ISAバスからの継承規格となっているPCIバスの仕組みを抜本的に変更して、新しい規格を作っちゃおうぜという声が出てきた。こうして生まれたのが、冒頭に書いた、2002年のPCI Express(PCIe)である。長かった…。

 PCIeは、途中にもさらっと書いたが、パラレル方式だったISA/EISA/VL/PCIなどと違い、シリアル方式になっている。同期や干渉の問題から、一定以上に高速化できないパラレルに対し、すでにシリアル方式の方が高速な時代となっていた。
 このシリアル化により、バス全体の物理的な幅は大きく軽減され、配線・コネクタ幅・ケーブルの太さなどで旧規格に対して非常に有利になっていた。この利点を生かし、PCIeでは全二重通信となっている。全二重とは、通信する二者の間で、同時に情報を送りあえるだという事だ。従来のPCIでは、32ビットまたは64ビットの、太いバスを上り下りで共有しているため、完全な全二重通信はできなかった。
 また、一見シリアル化の利点と反しているように見えるが、その一つ一つのシリアル線のセット(これをレーンと呼ぶ)を複数本、例えば4本・8本・16本と束ねて使う事で、その分帯域を増やす事ができた。これはパラレルとは違う。パラレルはあくまで、例えば32本の端子で32ビットのデータを取り出すが、シリアルは1本の線でデータを取り出す。それを複数レーンで後から合算するのだ。
 レーンを増やす時は、その分バス幅を実際に増やす。なので、複数レーンを使う事を想定した拡張ボード等は、実際にコネクタもボードも横幅が長い。16本を束ねる16xと呼ばれる方式は、ビデオカードに良く使われ、ほとんどのマザーボードに搭載されている。この方がAGPより早いし、他の周辺機器との整合性も取れるので、PCIeはやがてAGPを駆逐した。

 これを書いている2016年現在でも、PCの拡張バスとして、PCIeの後継規格というのは特に生まれてはいない。PCIeの速度については世代があり、Gen1、Gen2…などと呼ばれているが、そろそろGen4が出てくるかな、と言ったところだ。

 こういう状態に落ち着くまで時間がかかったなー、という気はしている。もっと早く拡張バスの世界はまともな状況になって良かっただろ、という気はしているが、まーやっぱりそのへんはインテルが中心にならないとダメなのかな…と思う。


前のMCLへ  次のMCLへ

戻る

TOM 2019