PCI Express
出典: フリー百科事典『ウィキペディア(Wikipedia)』
PCI Express(ぴーしーあいえくすぷれす)は、2002年にPCI-SIGによって策定された、I/Oシリアルインターフェースである。書籍、文書ではPCIeと表記されることも多い。この表記はPCI-SIG自身もウェブサイト上で使用している。名称がPCI-Xと紛らわしいが、別規格。
目次 |
[編集] 概要
PCIバス、及びPCI-Xバスの欠点を補うべく、インテルが開発を進めていた3rd. Generation I/O、3GIO(すりーじーあいおー)がその基になっている。
1レーンあたり2.5Gbpsの転送速度で、送信/受信を分離した全二重方式を採用し、計5Gbpsのバンド幅を持つ。これは従来のPCIバス(32ビット/33MHz)の3倍から4倍に迫るバンド幅である。バンド幅だけを見ればAGP_2xモードに迫る転送速度を出すことが出来る。従って、高度な3D描画を必要としないグラフィックスカードならばx1モードでも充分なバンド幅を確保できる。またレーンを複数束ね、さらに低レイテンシ、高バンド幅を可能とする、x2、x4、x8、x16、x32も仕様化されている。特にx16 PCI ExpressはAGPバスに代わるビデオカードのインタフェースとして利用される。バンド幅はAGP_8xモード比でおよそ4倍弱。
またPCI Express x1をベースとした新たなPCカードの規格であるExpressCardも策定されて、ノートPCへの採用が進んでいる。
[編集] 開発から普及までの経緯
[編集] パラレル・インタフェースの問題点
PCIバスのようなパラレルインタフェースにおいて、データ転送のバンド幅を上げる方法には大雑把に以下の2通りの方法がある。
- バス幅を大きくする(データ線の増加)
- 単位時間あたりの転送回数を増やす(高クロック化)
PCIバスはこれにならい、当初の32ビット/33MHz(133MB/秒)から64ビット/66MHz(533MB/秒)までデータ転送速度が引き上げられた。さらにPCI-XバスではクロックのDDR/QDR化も含め64ビット/1066MHz相当(7.95GB/秒)まで仕様化されている。
しかし、上記2手法の高速化にはおのずと限界がある。バス幅を太くすることはデータ線の増加につながり、それはLSIのピン増加となりコストに跳ね返る。またクロックの高速化は、データとクロックのタイミングを合わせる必要性から、非常に高度なLSI設計技術、ボード設計技術が要求され、同様にコストに跳ね返る。事実、PCI-Xは非常にシビアな設計が要求され、パーソナル向け製品として商品化するにはコストの問題からも無理があった。
これまではそれなりのコストがかかってもそれに見合うだけの性能向上が見込めた。しかし、この頃はある種の壁にさしかかっており、顧客を納得させるに足るパフォーマンスを望めば、それにかかるコストが甚大な物になることが予想された。折りしもインテルはメインメモリインターフェイスのシリアル化を主張したばかりの頃だった。
[編集] PCIバスの限界
PCIバス登場当初から一貫してパーソナルコンピュータ市場で広く普及しているPCIバスのモードは32ビット33MHz(=133Mバイト/秒)だった。バス帯域を食いつぶしていたのは主に3Dグラフィックスカードであり、こちらはAGPによってある意味隔離されていたため、PCIバスそのものはまだまだ安泰であった。しかしながらハードディスクの インターフェイスとして広く知られるIDEがサポートする帯域幅を次第に伸ばし、2000年には66Mバイト/秒をサポートし、2002年には100Mバイト/秒の転送速度をサポートするに至った。それでもハードディスクそのものの転送速度は単体では追いついていなかったものの、この頃を境にしてパーソナル市場においても自作ユーザーを中心にRAIDが流行、さらには高性能なビデオ編集用カードの普及も進み、ギガビットLANである1000BASE-T(1000Mbps=約125Mバイト/秒)も登場、ハイエンドユーザーがPCIバスの帯域幅を完全に食いつぶしてしまうのも、もはや時間の問題となっていた。
[編集] シリアル・インタフェースの台頭
1本の信号線でデータ伝送を行うシリアル・インタフェースは古くから存在し、かつてほとんどのPCに搭載されていたRS-232Cが有名である。しかし、信頼性の問題から低速なデータ転送にしか使えないという事情があり、しばらく表舞台に現れることはなかった。
ところが、IBMがパラレル・データにクロックを埋め込んでシリアル・データ化するという8b/10b技術を開発することにより、シリアル転送が急速に注目を集めはじめた。さらにイーサネットでこの方式が採用され、普及が広まると8b/10b機能を搭載したSERDESチップのコストも急激に低下し、さらにファイバーチャネルやギガビットイーサネット (GbE) の登場により転送速度も急激に高速化された。
[編集] PCI Expressの登場
I/Oインタフェースのバンド幅不足解消のために次世代のインタフェースを模索していたインテルは、NGIO (Next Generation I/O) というシリアル・インタフェースの開発を開始した。一方、同時期にヒューレット・パッカードやIBMも、PCIバスに代わるI/OインタフェースとしてFuture I/Oと呼ばれるシリアル・インタフェースを開発していた。
両者は後に統合され、InfiniBandと呼ばれるI/Oインタフェースとなるのだが、InfiniBandには決定的な欠陥があった。あまりにも先進的かつ理想的なI/Oインタフェースを目指したため、ソフトウェアレベルでPCIバスと全く互換性がなかったことである。このため、マイクロソフトなどもサポートに消極的であり、現在ではスーパーコンピュータのノード間接続のような低遅延・広帯域を要求される限られた分野でのみ利用されている。
インテルはこの失敗を教訓とし、3GIO (Third Generation I/O) の開発を開始した。ソフトウェア・レベルでPCIバス完全互換とし、正統なPCIバスの後継者とすべく、PCI Expressと名を変え、PCI-SIGでの仕様化が行われた。
[編集] ソフトウェアの対応
PCI Expressは従来のPCIバスが動作できるオペレーティングシステム (OS) であれば特に新しくサポートしなくても動作することは可能である。ただし、動作可能であることと機能をフルに使うことは別の問題であり、Windowsの場合ではVistaから正式にPCI Expressに対応した。
[編集] 普及
パーソナルコンピュータ向けマザーボードへの実装は比較的早くに行われた。主に搭載されるのはx16とx1である。帯域幅が何よりも要求される3Dグラフィックカードでは特に歓迎され、2005年頃にはAGPからの置き換えがほぼ完了し、現在では3Dグラフィックカードのシェアの多くを獲得するまでに成長している。(一方、かつての主力であったAGP用のグラフィックボードは、旧来のシステムを所有する消費者への救済措置扱いとして販売される程度のシェアとなっている)
マザーボード市場においてもAGPスロットを持つ製品はほぼ完全に姿を消した。しかし、汎用バスとして見ると2008年現在でも従来のPCIスロットを全廃したマザーボードは見受けられない。特にサーバー向けマザーボードでは依然としてPCI(64ビット)またはPCI-Xの実装が目立つ。
ATAカードをはじめとしたインターフェースカード類は比較的PCIe(x1)を採用する製品が多いがビデオキャプチャー、テレビチューナー、ディスクリートサウンドカードといったマルチメディア関連においてはPCIeは依然少数派である。特にディスクリートサウンドカードでは従来のPCIバスでも充分な帯域幅が確保できているのとノイズ特性に優れたハイエンド製品が多数を占めることから、ノイズ設計に充分な時間が必要であるためと推測される。 そのため2008年現在のATXマザーボードの拡張スロットはPCI Express x16、x1、PCIの3種類を採用したものが多い(x4やx8のスロットを備えたものも存在する)。 とはいえ、いわゆるオンボードデバイスにおいては、従来PCIバスを用いて接続していた物を完全にPCIe接続に置き換えたマザーボードは確実に増えており、こうした見えないところでは着々と移行が進んでいる。
さらに2007年後半からPCI Express 2.0に対応したマザーボードやビデオカードが発売され始めた。
[編集] 仕様
PCI Expressのデータ転送方式はPCIバスよりも、ネットワークでのパケットの送受信に近い形で行われる。このため内部構成もネットワークに似ており、トランザクション・レイヤ、データリンク・レイヤ、物理レイヤの3層構造となっている。
送信を例に取ると、CPUや他デバイスから発行されたリクエストは、トランザクション・レイヤでパケット化され、データリンク・レイヤに渡される。データリンク・レイヤーは、接続されている相手側デバイス間との送受信の制御を担っており、パケットにシーケンス番号、CRCを付加して物理レイヤに渡す。物理レイヤはシリアル転送を受け持つ部分で、8b/10b変換を行うSERDESによりパケットがシリアル・データとして送られる。
[編集] トランザクション・レイヤ
トランザクション・レイヤは主にトランザクション・レイヤ・パケット(Transaction Layer Packet:TLP)の生成と復号を担う。TLPはリードやライトといったコマンドやアドレス、データなどから成る。また、トランザクション・レイヤは接続相手とのフロー制御も行う。PCI Expressのフロー制御はクレジット・ベースで行われ、これは予め自分が受信することの出来るバッファのサイズを相手に通知しておき、バッファに空きが出来るたびにその旨を伝える方式である。送信側は自身が送信したパケットのサイズを積算していき、また送信相手からバッファの空きが伝えられるとその分を減算する。これにより送信相手のバッファ・サイズを超えることなく、パケットの転送が可能となる。
トランザクション・レイヤはまた、パケットを任意のサイズに分割する機能を有する。例えば、PCI Expressの場合、一つのTLPで最大4Kバイトのメモリ・リードを発行することが可能である。しかし実際にメモリから一度に4Kバイトを読むことは出来ない。それはCPUのキャッシュメモリサイズに依存するからである。全てのメモリ・リードはキャッシュ・コヒーレンシ維持のため、CPUに対しキャッシュに最新データの有無を問い合わせる。例えばインテル系の32ビットCPUはキャッシュ・ライン・サイズは64バイトであるため、4Kバイトのメモリ・リードは全て64バイトの64個のメモリ・リードに分割される必要がある。
このように、トランザクション・レイヤは自デバイス内で都合の良いようにパケットを分割する。また、データを返す場合は、もとの要求サイズで返す必要はなく、分割したまま返信することも可能である(但し返す順序は入れ換えられない)。
トランザクション・レイヤは以下の4個のアドレス空間をサポートする。
- Memory 空間
- I/O 空間
- Configuration 空間
- Message 空間
前者3空間はPCIバス互換の空間である。Message空間は、従来サイドバンド信号で通知を行っていたもので、割り込み、電源制御などの通知に使用される。
[編集] データリンク・レイヤ
データリンク・レイヤは、トランザクション・レイヤと物理レイヤの中間に位置し、主にPCI Expressリンクの管理、エラー検出と訂正を担う。
送信側データリンク・レイヤは、トランザクション・レイヤから渡されたTLPをバイナリ値とし、データを保護するためのCRCを算出し、さらにTLPの授受を確認するためのシーケンス・ナンバを、TLPに付加して物理レイヤに渡す。 受信側ではCRCによるデータ化けチェックと、シーケンス・ナンバによるパケット欠落チェックを行う。
受信側でエラーを見つけた場合、送信側に再送を促すためにNAK (Not Acknowledge) パケットをエラー検出したTLPのシーケンス・ナンバと共に送信側に返す。正常にTLPを受信した場合は、同様にACK (Acknowledge) パケットを返す。 エラーによるパケットの再送機能もデータリンク・レイヤが受け持っており、NAKを受信した場合そのシーケンス・ナンバから全て送信し直すことになる。このため、一般的にデータリンク・レイヤ内には再送バッファが実装される。
データリンク・レイヤはTLPの送受信の他にも、DLLP (Data Link Layer Packet) と呼ばれる、データリンク・レイヤ同士でのみ情報の交換を行うパケットの送受信も行う。ACK、NACKパケットや、フロー制御に使用するバッファ・サイズ通知などもDLLPが使用される。
[編集] 物理レイヤ
物理レイヤは入出力バッファの制御回路、シリアル-パラレル/パラレル-シリアル変換回路、PLL、インピーダンス調整回路などから成る。
PCI Express 1.1での物理メディアは、2線,800mV差動で400ps単位でデータのドライブが行われる。送信、受信専用の信号を必要とする全二重方式であることから、x1の場合、実際には4本の信号が使用される。
PCI Express 1.1までは2.5Gbpsでのデータ転送を行っているが、PCI Express 2.0では5.0Gbpsで転送が行われている。さらに、PCI Expressをケーブルで接続するための仕様検討も行われている。 このように、物理レイヤは将来的により高速なメディアに置き換えられていくレイヤであり、このため物理レイヤとデータリンク・レイヤ間のインタフェースは特に規定されておらず各ベンダの実装依存となっている。
[編集] 欠点
[編集] 相互接続性の問題
PCIバスでは32ビットバスのデバイス/スロットと64ビットバスのデバイス/スロットの全ての組み合わせにおいて動作する事が保証されていた。しかしPCI Expressでは、例えばx16仕様のカードをx8仕様のスロットに差し込む事が物理的にできない。端子レイアウト的には、x16仕様のカードをx8スロットに差し込んで使用できるようであるが規格上物理層は実装依存であり保証の限りではなく、さらにエッジ・コネクタの物理的切断・コネクタの一部を削り取るという乱暴な手段を講じなければならない。
なおエッジ・コネクタ側の電源供給のみで動作するx16カードをx8スロット以下のスロットに挿すと電源供給ラインが不足し、特定のラインに過電流が流れる原因に繋がる。最悪の場合、カードやマザーボードの電源ラインが焼損したり、即座に出火等に繋がらなくとも設計想定外の発熱がプリント基板を徐々に蝕むことにつながり、パターンの剥離・ビアの破断といった故障を招く恐れもある。
この問題に対する解決策の一つとしてアップルコンピュータのMac Proが採用した実装があげられる(後述の利点を参照)。
[編集] 利点
PCI Expressの利点の一つとしてレーン数のフレキシビリティが挙げられる。即ち、カードがx16でもx1モードで動作させることも(規格上は)可能であり、またスロットがx16だからといってx16通信である必要は無く、上記の相互接続の問題はあれ、上位のスロットに下位のカードを挿す事は容易である。さらにはBIOS上もしくはOS上からチップセットのサポートレーン数を上限にユーザーが任意に振り分け出来るように設計することも可能である。
- 例:合計レーン数の上限を26としx16用の物理スロットが4つあったらば、それに対し
- x8 x1 x1 x16 (余り0)
- x4 x4 x1 x16 (余り1)
- x8 x1 x8 x8 (余り1)
- x4 x4 x8 x8 (余り2)
などといった複数の振り分け方を選択できるようにすることも可能である。尚、レーンが余っても余ったレーンが未使用になること以上の不都合は無い。また、x16モードで動作するはずのスロットにx1専用カードを挿しても問題なく動作できるようになっている。
つまり、スロットの規格は単にそのスロットに割り振れる(規格上の)レーン数上限を示すのみである。このことから、マザーボード設計者は使用するチップセットのサポートレーン数の範囲内で自由にスロット配置を設計することが可能である。また、この特性を有効に利用したMac Proでは物理スロットをx16に統一し、内部のレーン数振り分けはOSのユーティリティ上で再設定(自動設定または予め用意された4パターンから任意に選択)することが出来るようにすることで相互接続の問題を解決している(x32対応製品は、スロット、カードともに市場には存在していない)。

