PlayStation 3 での Linux 開発: 第 1 回 単なるゲーム機を超える

ぜひモニターを調整してみてください

ソニーの PlayStation 3 (PS3) は Linux® を実行することができます。しかし Linux を適切に実行させるためには少し調整が必要です。この記事はシリーズの第 1 回として、Peter Seebach が PS3 Linux の特徴や利点を紹介し、また少し調整するだけでメリットが得られる問題をいくつか説明します。

Peter Seebach, Freelance author, Plethora.net

Peter SeebachPeter Seebach は長年にわたってゲーム機を収集していますが、それらの上で Linux を実行するようになったのはごく最近です。これがテレビゲームもできる Linux マシンなのか、あるいは Linux も実行できるゲーム機なのか、彼はいまだにわからずにいます。



2008年 3月 18日

PlayStation 3 が Linux をネイティブで実行できるとソニーが最初に発表した際には、大きな興奮に包まれました。当初は Linux をネイティブでインストールする作業は少しばかり困難でした。PlayStation 3 がサポートするインストーラーによって実行されるカスタム・スクリプトは、Fedora Core 5 または 6 のインストール DVD を、特別な PS3 カーネルを持つ実行可能システムに無理やり押し込んでいたからです。そのため、例えば Ubuntu など他のシステムを動作させるために、何時間も費やさなければなりませんでした。そうした中で、Terrasoft による Yellow Dog Linux は PS3 上で実行する本物のグラフィカル・インストーラーを持っており、最も使いやすいものでした。

時は過ぎ、さまざまなものが大きく変わりました。Fedora 7 はそのままの状態で PS3 にインストールすることができ、インストールの中で最も難しい部分は、インストール DVD を検出できるように PS3 のストレージ・ドライバーを選択する部分と、インストーラーを見られるようにインストール用の最初のコマンドラインでビデオ・モードを忘れずに指定する部分、という程度です。

つまり PS3 で Linux を実行することができ、しかも簡単に実行することができるのです。問題は、必ずしも適切に実行できるとは限らないことです。安価な Cell 開発システムとして PS3 を選択したとすると、デフォルトのインストール手順に従ったにもかかわらず、シェル・プロンプトを表示させるまでにシステムでは百メガあるいはそれ以上のスワップが使われていることを知り、少しばかり苛立ってしまいます。

このシリーズについて

この 3 回シリーズの記事では、開発環境という視点から PS3 Linux を調べます。今回の記事は第 1 回として、基本的な構成のための PS3 特有の調整項目やウィジェットを紹介し、それらを効果的に使うための方法を説明し、そしてパフォーマンスの改善や使いやすい表示を実現するための、ちょっとした細工を提言します。第 2 回と第 3 回は、パフォーマンスとチューニングの問題をいくつか掘り下げ、そうした問題への対応はどのシステムにでもあてはまるものの、PS3 を概念検証デモから実際に動作するシステムに変える上で特に有効であることを解説します。

はじめに

Fedora 7 を入手します。(Fedora 8 もおそらく動作しますが、この記事の執筆を始めたときには Fedora 7 が手軽に使える状態でした。) もちろん、ネイティブ用に調整されたディストリビューション、あるいは小さく効率的なことを主眼に構築されたディストリビューションの 1 つを利用すれば、何らかの面でさらに良い結果が得られるかもしれません。しかし Fedora 7 には非常に大きな利点があります。Cell/B.E. SDK が Fedora 7 をサポートしているのです。(RHEL 5.1 もサポートされていますが、Fedora 7 の方がよくサポートされています。)

私はダウンロードに関しては Bittorrent の大ファンです。Bittorrent は負荷を分散してくれるからです。これは、少なくともダウンロードした量と同じだけアップロードするまではクライアントを実行しておく必要があるということでもあります。オープンソース・ソフトウェアには協力が欠かせません。そして帯域幅のコストに関して協力することは、そのための良い出発点です。DVD イメージ全体をダウンロードするのは少し時間がかかるため (「参考文献」を参照)、それが終わるのを待つ間、ここで PS3 Linux の背景を少し説明しておきましょう。

PlayStation 2 も Linux を実行することはできましたが、そのためには少し苦労を伴いました。ソニーは PS 2 用の特別なキットをリリースしましたが、そのキットは古く厚ぼったい PS2 でしか実行できず、またオプションのハード・ドライブが必要でした。新しい (より一般的な) 方の「スリムな」PS2 ユニットはサポートされず、しかもそのキットはすぐに消え失せてしまいました。しかし基本的に、キットが消え失せた理由は、そのキットがほとんど概念検証にすぎなかったためです。システムは大してメモリーを持たず、しかも特別なコンパイラー・ツールを使わない限り、CPU は単なるごく標準的な MIPS コアにすぎませんでした。ベクター・ユニットは専用ツールの範囲外では広くサポートされておらず、またドキュメンテーションも貧弱でした。

対照的に PS3 はリリース前から Linux の実行をサポートしており、しかもソニーはサポート・コードとサポート・パッケージを広く公開したのです。システムの発売とほぼ同時にリリースされた「Cell アドオン」 CD では、Fedora 5 と 6 が直接サポートされているだけではなく、他のディストリビューションで PS3 への移植版を開発するために必要なすべてのファイルも提供されています。その結果、Fedora 7 は PS3 で動作させるための個別の CD がなくても、PS3 でそのまま動作します (ただしブートローダーをインストールするために、やはりソニーのダウンロードを使う必要があります)。アドオン・ソフトウェアの CD (「参考文献」を参照) は新しいカーネル・バージョンと共に更新が続けられています。

ハイパーバイザーを理解する

PS3 の基本仕様は、256MB のメイン・メモリー、Cell/B.E. プロセッサー、有線イーサネット (そして一部のモデルでは 802.11b/g ワイヤレスも)、RSX と呼ばれるグラフィックス・ユニット (独自に 256MB のメモリーを持っています)、そして SATA ディスク・ドライブです。他にも、USB ポートや、一部のモデルではカード・リーダー、そして Bluetooth などの周辺機器を接続することができます。しかしこれは PS3 Linux を実行できるシステムではありません。

残りのSPE はどこに

Cell Broadband Engine は 8 つの SPE を持っています。PS3 Linux は 6 つ持っています。1 つはハイパーバイザーによって予約されています。残りの 1 つはどこにあるのでしょう。

その答えは、PS3 は 1 つの SPE を無効にした状態で出荷されているのです。これによって SPE の 1 つに欠陥があるチップも使うことができるため、チップの歩留まりを改善でき、そしてコストを削減することができます。従って、Cell/B.E. の理論的な設計では 8 つの SPE コアがありますが、PS3 のハードウェアでは 7 つしか利用できません。そのうちの 1 つはハイパーバイザーが割り当てたセキュリティー・タスクのみを実行するため、残りの 6 つを Linux、あるいはゲームに利用することになります。

PS3 では、Linux はハイパーバイザーの下で実行されます。簡単に言うと、PS3 Linux は Xen 仮想マシンに似た仮想マシン上で実行されます。ハイパーバイザーは PS3 のハードウェアへのアクセスの制御とフィルタリングを行います。例えば、Linux コードは RSX グラフィックス・プロセッサーに直接アクセスすることはできません。その代わりグラフィックス・プロセッサーへのアクセスを制限付きで許可する特別な機構が提供されており、妥当なレベルの効率的な 2D フレームバッファーを実現しています。

ハイパーバイザーはいくつかの変換を行います。例えば先ほど触れたように、ハイパーバイザーは仮想的なフレームバッファー機構を Linux に提供し、次にその機構を RSX グラフィックス・コアを使って実装します。同様に、Linux は SATA ハード・ドライブにアクセスすることはできません。その代わり Linux は SCSI ドライブにアクセスすることができ、このドライブが、内部ドライブの「他の OS」用のパーティションとして割り当てられた領域のみにマッピングされます。PS3 のゲーム・ソフトウェアが使用しているディスクの部分にアクセスすることは物理的に不可能です。

ネットワーク・ハードウェアはおそらく最も興味深い部分です。PS3 Linux はギガビットの有線イーサネットあるいは 802.11g ワイヤレスのいずれかを利用できますが、両方同時に利用することはできません。ネットワーク・インターフェースを構成する際には、SSID を使ってワイヤレス・インターフェースを指定すると、ハイパーバイザーはワイヤレス・インターフェースを利用します。それ以外の場合にはハイパーバイザーは有線インターフェースを利用します。

家庭用電化製品のビデオ・モードを理解する

この記事を PC ハードウェアのバックグラウンドを持つ人が読んでいるとすると、ビデオ・モードに違和感を感じるかもしれません。家庭用電化製品で使用されているビデオ・モードの大部分は、水平×垂直の解像度 (「1024x768」など) あるいは暗号のような名前 (「XGA」、「SXGA」など) ではなく、水平走査線の本数による解像度で表現されます。アメリカ合衆国では NTSC 標準が使われており、標準テレビ (SDTV: standard-definition television) の通常の解像度は 480 本です。しかし待ってください。

実際には、SDTV の信号にはフレームあたり 480 本の走査線を描画するのに十分な帯域幅がありません。そこで代わりに、240 本の走査線から成る 2 つのフレーム (1 つは奇数番号の走査線を表示するフレーム、もう 1 つは偶数番号の走査線を表示するフレーム) を用意し、この 2 つのフレームをインターレース方式により交互に表示します。これは「480i」と呼ばれ、i はインターレース方式による解像度であることを示しています。 (なかには 480i すらサポートしておらず、合計 240 本しか表示できないシステムもあります。)

多くの DVD プレーヤーや一部のゲーム・コンソール (前世代の Xbox や一部の GameCubes、PS2 など) は、コンポーネント・ビデオ・ケーブルを使用した場合にのみ利用できる、「480p」と呼ばれる他のオプションもサポートしています。「p」は「progressive (プログレッシブ)」を表し、480 本から成るフレーム全体がすべて一度に描画されることを意味します。一部のテレビ・メーカーは 480p のサポートを、HDTV (High Definition TV) と対比させて EDTV (Enhanced Definition TV) と呼んでいます。

さらに高解像度のモードには、720p (720 本のプログレッシブ・スキャン)、1080i (1080 本のインターレース・スキャン、540 本から成る 2 つのフィールドが交互に表示されます)、1080p (1080 本のプログレッシブ・スキャン) があります。こうしたモード間には競合するものもあり、またハードウェア開発者は予算を考慮するため、こうしたモードの一部しかサポートしていない機器もあります。

これらの解像度には、元々水平解像度が明記されていませんが、PS3 の場合、デフォルトの出力は通常 16x9 の比率の表示になっていると考えることができます。

そして、これらの解像度には、どれもオーバースキャンがあります。標準的なテレビでは、画像は通常、ディスプレイの端を少し超えるように描画されます。これによって、多くのユーザーが邪魔と感じる、画像の周囲の黒い枠を見せないようにするのです。そのため Linux でのデフォルトの処理で扱うのは、理論上表される解像度全体ではなく、その表示の一部を除いた残りの部分です。これらの各ビデオ・モードには、実際にスペース全体を使用する、各モードに対応した「フルスクリーン」ビデオ・モードがあります。Terra Soft はビデオ・モードに関する素晴らしいページを提供しています (「参考文献」を参照)。

では、修正した仕様を説明しましょう。PS3 Linux を実行する仮想マシンには、6 つの SPE を備えた Cell/B.E. プロセッサー、約 212MB のメイン・メモリー、1 つのネットワーク・インターフェース、1 台の SCSI ディスク (カード・リーダーがある場合は、さらに数台の SCSI ディスクを追加可能)、1 台の SCSI 機器 (DVD-ROM、CD-ROM、あるいはブルーレイ・リーダーなど)、そして動作する USB ポートと Bluetooth です。グラフィックスは広範な種類のビデオ・モードをサポートする特別なフレームバッファー機構によって提供されます (「家庭用電化製品のビデオ・モードを理解する」を参照)。

開発環境を計画する

PS3 を開発用に有効に利用するためには、開発環境に何が必要かを判断する必要があります。X を完全にあきらめても構わないのであれば、大量のメモリーを節約することができます (Fedora ではデフォルトで Gnome が実行されますが、これはとてもメモリーを節約できる方式とは言えないでしょう)。多くのシステム設定ユーティリティーは X を使えば非常に使いやすいのですが、そうすると実行時間が長くなってしまいます。私はグラフィカル・パッケージのアップデーターを Gnome の下で実行しましたが、数時間もかかりました。これはおそらく、このプロセスの合計メモリー・フットプリントが 375MB であり、利用可能な物理メモリーよりも大幅に多いためです。このプロセスは大部分の時間をスワップ・ディスクを待つことに費やし、VAX で Emacs を使っているような状態になったのです。

ここでの教訓は、利用可能なメモリーの量が PS3 の大きな弱点になる、ということです。必要のないサービスを、できるだけ早くオフする必要があります。gnome-terminal ではなく、xterm を実行することです。複数のウィンドウが必要ならば、複数の xterm ではなくscreen を実行することを考えます。

ディスプレイ・オプション

ディスプレイなしで実行するつもりであれば、あまり心配する必要はありません。しかし作業内容を表示するためのディスプレイを使って実行したい場合には、ディスプレイ・オプションを考慮する必要があります。最高の画質は PS3 の HDMI 出力を使うことで得られます。コンピューター・モニターを持っている人であれば、HDMI - DVI 変換ケーブルは非常に安価に入手できると思いますが、モニターが HDCP (High-bandwidth Digital Content Protection) をサポートしていることを確認してください。HDCP がサポートされていないと、黒い画面か、場合によると明るい一色の静止画面になってしまうかもしれません。KVM スイッチを使っている場合には、ディスプレイだけではなく、そのスイッチも HDCP をサポートしている必要があることに注意してください。残念ながら、この「機能」をオフする方法はないようなので、暗号化されていない信号を表示することはできません。この機能は高品位の映画を再生する機器などには金銭面で少し意味があるかもしれませんが、X デスクトップを見るために特別な許可が必要というのには少しばかり苛立つものです。HDMI/DVI は、PS3 が提供するほとんどすべてのビデオ・モード、つまり家庭用電化製品のモード (720p など) と PC モード (WXGA など) の両方をサポートしています。

HDCP を使えない場合や、DVI 対応のモニターを持っていない場合、HDMI の次に高画質な出力はコンポーネント・ビデオ出力です。コンポーネント・ビデオ信号は大部分のテレビに入力でき、一部のコンピューター・モニターにも入力できる信号であり、昔ながらの単純な VGA に非常によく似ています (ただし出力が RCA コネクターによる 3 本のケーブル (赤、緑、青が各 1 本) である点のみが異なります)(訳注: もちろん著者の国での状況であり、日本での状況とは多少異なるようです)。コンポーネント・ビデオ・ケーブルには追加のコストがかかりますが、PS2 を持っていれば、PS2 用のコンポーネント・ケーブルを使うことができます。コンポーネント・ビデオは 720p の表示と 1080i の表示を確実にサポートできますが、1080p には使えないかもしれません (これらのモードを理解できない場合には「家庭用電化製品のビデオ・モードを理解する」を参照)。コンポーネント・ビデオ信号は、下記の 2 つのオプションよりも解像度、画像のシャープさ共に優れています。

もしコンポーネント・ビデオ信号が使えない場合には、S ビデオ信号をサポートする機器が使えるかもしれません。S ビデオ信号は 480i をサポートしていますが、信号を輝度と彩度 (つまり「明るさ」と「色」) という 2 つの別のチャネルに分けるため、最後のオプションであるコンポジット・ビデオ信号よりもシャープな画像が得られます。コンポジット・ビデオ信号は昔ながらの単純な RCA ジャックで通常は黄色に色分けされ、ほとんどすべてのものに接続できます。もしコンポジットを避けられるのであれば、ぜひ避けた方が賢明です。

Fedora 7 インストーラーは基本的に、強制的にテキスト・モードにしない限り、720p よりも下のモードではどれも使い物にならないことに注意してください。実際のところ、PS3 を開発システムとして使うつもりであれば、もっと解像度の高いモードを使用する必要があります。Linux システムには大型のディスプレイが必要になってきており、Fedora のウィンドウ操作環境は、低解像度のディスプレイでは恐ろしいほどひどい表示になります。さらに、低解像度のディスプレイでは、特にコンポジット・ケーブルを使用した場合には、表示がぼやけ、非常に読みにくくなります。

私のシステムは WXGA (1280x768) に設定され、DVI を使っていますが、これは十分使用に耐えます。デスクトップには、2 つか 3 つのウィンドウを重ならずに表示できるほど十分なスペースがあります。


Fedora をインストールする

ここを読む頃には、Fedora の DVD をダウンロードできているはずです。そこで次のステップは Fedora をインストールすることです。PS3 の通常の指示に従ってディスク・パーティションを行い (これを行うとすべてのデータは失われるため、必ずバックアップが必要です)、そして Other OS ブート・ローダーをロードします。Fedora の DVD を挿入してそこからブートする段階になったら、kboot プロンプトから linux64 text または linux64 video=720p と入力します。720p は Fedora のインストールに耐える、最低限のビデオ・サイズです。もしコンポーネント出力あるいは DVI 出力が使えない場合には、テキストを使います。デフォルトのオプションでブートすると、インストーラーは画面に Fedora ロゴを表示した状態でどうやらフリーズしたようです。実はインストーラーのウィンドウはデフォルトの表示領域よりも大きかったのです。そのため私はマシンの電源を落として再試行する以外に選択肢がありませんでした。

これが終わったら、Fedora のアップデート・サーバーから最新の更新をすべて取得し、それらをインストールします。これは (最初のインストールと同じように) しばらく時間がかかります。どちらの場合も、いったんインストールが始まったら、2、3 時間他のことをしていてください。


次回は: PS3 のアドオンをインストールする

このシリーズの第 2 回では、最新の PS3 アドオンをインストールし、システムを更新する方法を説明します。また少し構成を変更し、少し余裕を持たせられるまで基本的なメモリー・フットプリントを減らす方法についても説明します。

参考文献

学ぶために

製品や技術を入手するために

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux, Open source, Multicore acceleration
ArticleID=299825
ArticleTitle=PlayStation 3 での Linux 開発: 第 1 回 単なるゲーム機を超える
publish-date=03182008