Linux

Fedora 11にCellクロス開発環境(SDK 3.1)をインストール

超久々にLinux & Cellの記事を書きます。記事数的には、Cell/LinuxよりArduinoの記事数が多くなっているのですが依然としてベスト3はCell系の記事です。PS3 Linux, Arduinoともニッチな世界だと思うのですが、PS3 Linuxの方がユーザー数が多いのでしょうか。

少し古い数字ですが、2008/12時点でPS3の総出荷台数は2130万台です(日本経済新聞出版の「任天堂”驚き"を生む方程式」より)。国内向けの出荷台数は266万台です。その中で、Linuxをインストールする方は1%以下だと思いますので、国内のPS3 Linuxユーザーは1万人以下といったことろでしょうか。

一方、Arduinoの出荷台数は、2008/12時点で6万ユニットとあります。クローン込みの総出荷台数が10万ユニット、日本のユーザー比率が8%とすると(PS3の日本向け比率と同じと仮定)、日本向けの出荷が8千、ユーザー数で4~6千程度と思われます(一人当たり複数台所有と仮定)。

Fedora 11のインストール

前置きが長くなってしまいました。これまで、Fedora 9を使っていたのですが、PC LinuxをFedora 11に更新しました。Linux上でARMの開発環境を試してみたいと思っており、Linux自体を最新化しようと思ったのがことの始まりです。最終的にはWindowsベースになりそうな気もしますが、GNU/gccやmake toolなどはLinuxの方が親和性が高いように思うためです。

Fedora 11のインストールはいろんなところに解説がありますので説明するまでもないと思います。ただ、1点だけハマった箇所がありました。Nvidia proprietary driverのインストールです。

Fedora 11ではオープンソースのnouveauドライバがデフォルトになっています。別にゲームをするわけではないのですが、nvidia proprietaryドライバに比べるとウインドウの移動など通常の操作でももたついてしまうことがありました。そのため、nvidia proprietaryドライバのインストールをいつもの手順で実行しました。 RPM Fusion のリポジトリを設定して、
# yum install akmod-nvidia
で必要なパッケージをインストールして再起動すると、立ち上がりません、、、
(Ferora 9の時代はkmod-nvidiaを使っていましたが、最近はakmod-nvidiaの方がよいことを今回知りました)

ログを見ると,カーネルは起動しており、X Windowのドライバ初期化のところで止まっています。lsmodすると、nouveauとnvidiaドライバの両方がロードされており、後からロードされたnvidiaドライバがGPUを初期化できずにX Windowが立ち上がらない模様。さらに調べると、以下の設定を追加することでnouveauドライバのロードを抑止できるとあります。

1) /etc/modprobe.confに以下を追加
alias nouveau off

2) /etc/modprobe.d/blacklist.confに以下を追加
   blacklist nouveau

上記の設定を加えても、nouveauがロードされnvidiaドライバと競合してしまいます。他の方のインストール例ではこの設定で動作しているため、最新のドライバ or カーネルで何か変更があったのか? 諦めかけたのですが、initrdを再構築すると問題が解消するというforum discussionを見つけ、こちらを試したところ、ビンゴでした。以下の手順でinitrdを再構築します。

# cd /boot
# mv initrd-2.6.30.5-43.fc11.i586.img  initrd-2.6.30.5-43.fc11.i586.img.bak
# mkinitrd /boot/initrd-2.6.30.5-43.fc11.i586.img 2.6.30.5-43.fc11.i586

initrd-2.6.30.5-43では、initrdの起動イメージの中でnouveauを組み込んでしまうため、blacklist.confを書いても意味がなかったということのようです。1)2)の修正を行ってmkinitrdを行うと、再構築したinitrdからはnouveauが削除され問題が解決します。

2009/11/2追記:
kernelを2.6.30.9-90にアップデートしました。この版数では、nvidiaドライバとnouveauドライバの競合は発生しませんでした。最新版では、問題が解消しているようです。

Cell SDK 3.1のインストール

こちらは、「Cell SDK 3.1のインストール」に示した手順通りで問題なくインストールができました。

Fedoraのリポジトリから以下のspu-binutilsが配信されています。(執筆時点)
spu-binutils          i586          2.19.50.0.1-3.fc11

yum updateで上記パッケージに更新を行うとspeプログラムのコンパイルができなくなりました。そのため、以下の設定を追加して、自動更新を抑止しています。
/etc/yum.conf に以下を追加
exclude=spu-*

EclipseのCell SDK IDEが動くかが懸念点でした。Eclipse/CDTはFedora 11収録パッケージのEclipse 3.4.2とCDT 5.0.2をyumでインストール。JREも同時にインストールされるOpen JDK 1.6を使用。SDK 3.1指定のFerora 9ではCDT4.0を使用しているため互換性の問題が考えられしたが、こちらもOKです。以前最新のCDTを使った際に、新規プロジェクト作成画面にCellプロジェクトが現れない現象があったように記憶しているのですが、下のキャプチャー画面にあるようにOthersの中に隠れていました。

Eclipsecell31

ビルドを行う際に以下のワーニングが出ますが問題なくビルドができています。
****  WARNING: The "ppu-gnu32-debug" Configuration may not build  ****
****  because it uses the "PPU GNU 32 bit Debug Tool Chain"  ****
****  tool-chain that is unsupported on this system.  ****

****  Attempting to build...  ****

「使用するtool-chainが未サポートである」云々を言っていますが、プラットフォームがFedora 9であることをチェックしているだけなのかもしれません。今のところ動作に問題はありません。

Cellプログラムのデバッグ」に示したPS3実機を使ったリモートデバッグも動作しています。

おわりに

Cell SDKはFedora 11であっけなく動作しました。

Nvidiaドライバのトラブルに関しては、Ubuntuのように、nvidia GPUを検出した場合は、積極的にnvidiaドライバをインストールしてくれた方が私にはメリットが高いです。UbuntuだとSunのJava VMもaptパッケージとしてインストールができ便利です。Fedoraはオープンソースしか収録しないというポリシーにこだわりすぎているのではと思うのですが。

実は、Fedora 11をインストールする前に、一度Ubuntu 9.04をインストールしています。Cell SDKもrpmパッケージをdebパッケージに変換することでインストールが出来、サンプルソースのコンパイルやEclipse IDEでのコンパイルは通っていました。唯一PS3を使ったリモートデバッグが動作せず、Fedora 11をインストールした次第です。今思うにPS3側がFedora 9であったためリモートデバッグができなかった可能性があります。短時間の使用でしたがUbuntuの方が使い勝手に好感が持てたため、PS3側とセットで再度Ubuntuに更新してみようかと思っています。

| | コメント (0)

Fedora 9でのサウンド設定

PS3へのFedora 9デフォルトインストール状態ではサウンドの出力ができません(確か以前使用していたFedora 7でも)。PS3 Linuxでサウンド出力が必要になることがなかったので放置していたのですが、Webカメラの接続でサウンド関連の問題(詳細は最後に記載します)が出たためサウンド設定の見直しを行いました。

□PS3でのサウンド出力設定

lsmodではサウンド関連のモジュールはロードされているように見えます。

# lsmod
Module     Size  Used by
snd_ps3      33208  0
snd_pcm     140284  2 snd_ps3,snd_pcm_oss
snd        115664  9
soundcore     26184 1 snd

以下の手順にてサウンド出力が可能となりました。

1) pulseaudioを削除

# yum erase pulseaudio*
Loaded plugins: allowdowngrade, fastestmirror, refresh-packagekit
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package pulseaudio-core-libs.ppc 0:0.9.10-2.fc9 set to be erased
---> Package pulseaudio-module-x11.ppc 0:0.9.10-2.fc9 set to be erased
---> Package pulseaudio-libs-glib2.ppc 0:0.9.10-2.fc9 set to be erased
--> Processing Dependency: libpulse-mainloop-glib.so.0 for package: pavucontrol
--> Processing Dependency: libpulse-mainloop-glib.so.0 for package: padevchooser
--> Processing Dependency: libpulse-mainloop-glib.so.0(PULSE_0) for package: pavucontrol
--> Processing Dependency: libpulse-mainloop-glib.so.0(PULSE_0) for package: padevchooser
---> Package pulseaudio.ppc 0:0.9.10-2.fc9 set to be erased
--> Processing Dependency: pulseaudio for package: alsa-plugins-pulseaudio
---> Package pulseaudio-utils.ppc 0:0.9.10-2.fc9 set to be erased
---> Package pulseaudio-libs.ppc 0:0.9.10-2.fc9 set to be erased
--> Processing Dependency: libpulse.so.0 for package: gstreamer-plugins-pulse
--> Processing Dependency: libpulse.so.0(PULSE_0) for package: gstreamer-plugins-pulse
---> Package pulseaudio-libs-zeroconf.ppc 0:0.9.10-2.fc9 set to be erased
---> Package pulseaudio-module-gconf.ppc 0:0.9.10-2.fc9 set to be erased
---> Package pulseaudio-esound-compat.ppc 0:0.9.10-2.fc9 set to be erased
--> Running transaction check
---> Package pavucontrol.ppc 0:0.9.6-1.fc9 set to be erased
---> Package padevchooser.ppc 0:0.9.4-0.4.svn20070925.fc9 set to be erased
---> Package alsa-plugins-pulseaudio.ppc 0:1.0.16-4.fc9 set to be erased
---> Package gstreamer-plugins-pulse.ppc 0:0.9.5-0.5.svn20070924.fc9 set to be erased
--> Finished Dependency Resolution

2) サウンド出力デバイスの設定

GNOME Desktopのシステム→設定→ハードウェア→サウンドを開き、「音の再生」デバイスをALSAに設定。

□USB Audioの問題

pulseaudioを削除する前に、PS3にUSB入力のマイク付きWebカメラを接続すると、以下のログを吐いてUSBポートが停止しました。

Dec 23 09:55:08 ps3 kernel: usb 1-2.3: new high speed USB device using ps3-ehci-driver and address 5
Dec 23 09:55:08 ps3 kernel: usb 1-2.3: configuration #1 chosen from 1 choice
Dec 23 09:55:08 ps3 kernel: usb 1-2.3: New USB device found, idVendor=046d, idProduct=09a2
Dec 23 09:55:08 ps3 kernel: usb 1-2.3: New USB device strings: Mfr=0, Product=0, SerialNumber=2
Dec 23 09:55:08 ps3 kernel: usb 1-2.3: SerialNumber: 09C73120
Dec 23 09:55:11 ps3 kernel: Linux video capture interface: v2.00
Dec 23 09:55:11 ps3 kernel: uvcvideo: Found UVC 1.00 device <unnamed> (046d:09a2)
Dec 23 09:55:11 ps3 kernel: input: UVC Camera (046d:09a2) as /devices/ps3_system/sb_05/usb1/1-2/1-2.3/1-2.3:1.0/input/input4
Dec 23 09:55:11 ps3 kernel: usbcore: registered new interface driver uvcvideo
Dec 23 09:55:11 ps3 kernel: USB Video Class driver (v0.1.0)
Dec 23 09:55:11 ps3 kernel: usbcore: registered new interface driver snd-usb-audio
→ ここまではUSBデバイス(カメラ)を正しく認識

# ここからの挙動が怪しい #
Dec 23 09:55:13 ps3 pulseaudio[2629]: alsa-util.c: Device hw:1 doesn't support 44100 Hz, changed to 16000 Hz.
Dec 23 09:55:13 ps3 pulseaudio[2629]: alsa-util.c: Device hw:1 doesn't support 2 channels, changed to 1.
Dec 23 09:55:13 ps3 pulseaudio[2629]: alsa-util.c: Device hw:1 doesn't support sample format s16be, changed to s16le.
Dec 23 09:55:14 ps3 kernel: ps3-ehci-driver sb_05: force halt; handhake d000080080020014 00004000 00004000 -> -19
Dec 23 09:55:14 ps3 kernel: ps3-ehci-driver sb_05: force halt; handhake d000080080020014 00004000 00000000 -> -19
Dec 23 09:55:14 ps3 kernel: ps3-ehci-driver sb_05: force halt; handhake d000080080020014 00004000 00004000 -> -19
Dec 23 09:55:14 ps3 kernel: ps3-ehci-driver sb_05: HC died; cleaning up
Dec 23 09:55:14 ps3 kernel: usb 1-2: USB disconnect, address 2
Dec 23 09:55:14 ps3 kernel: usb 1-2.1: USB disconnect, address 4
Dec 23 09:55:16 ps3 kernel: irq 45: nobody cared (try booting with the "irqpoll" option)
Dec 23 09:55:16 ps3 kernel: Call Trace:
Dec 23 09:55:16 ps3 kernel: [c000000007ff7ce0] [c000000000011964] .show_stack+0x6c/0x16c (unreliable)
Dec 23 09:55:16 ps3 kernel: [c000000007ff7d90] [c0000000000e7bd0] .__report_bad_irq+0x50/0xb8
Dec 23 09:55:16 ps3 kernel: [c000000007ff7e10] [c0000000000e7f74] .note_interrupt+0x33c/0x40c
Dec 23 09:55:16 ps3 kernel: [c000000007ff7ef0] [c0000000000e8ebc] .handle_fasteoi_irq+0x13c/0x1cc
Dec 23 09:55:16 ps3 kernel: [c000000007ff7f90] [c000000000029794] .call_handle_irq+0x1c/0x2c
Dec 23 09:55:16 ps3 kernel: [c00000000079f990] [c00000000000d92c] .do_IRQ+0x130/0x22c
Dec 23 09:55:16 ps3 kernel: [c00000000079fa40] [c000000000004da8] hardware_interrupt_entry+0x28/0x2c
Dec 23 09:55:16 ps3 kernel: --- Exception: 501 at .raw_local_irq_restore+0x9c/0xb4
Dec 23 09:55:16 ps3 kernel:    LR = .raw_local_irq_restore+0x8c/0xb4
Dec 23 09:55:16 ps3 kernel: [c00000000079fdc0] [c000000000013f24] .cpu_idle+0x11c/0x1b8
Dec 23 09:55:16 ps3 kernel: [c00000000079fe60] [c000000000484b80] .rest_init+0x7c/0x94
Dec 23 09:55:16 ps3 kernel: [c00000000079fee0] [c00000000066ccb4] .start_kernel+0x488/0x4b0
Dec 23 09:55:16 ps3 kernel: [c00000000079ff90] [c000000000008584] .start_here_common+0x4c/0xc8
Dec 23 09:55:16 ps3 kernel: handlers:
Dec 23 09:55:16 ps3 kernel: [<c000000000785cb8>] (usb_hcd_irq+0x0/0x10)
Dec 23 09:55:16 ps3 kernel: Disabling IRQ #45
Dec 23 09:55:16 ps3 kernel: usb 1-2.2: USB disconnect, address 3
Dec 23 09:55:16 ps3 kernel: usb 1-2.3: USB disconnect, address 5

pulseaudoがマイクを正しく識別せず、その後USBドライバが落ちているように見えます。pulseaudoの設定で改善できたかもしれませんが、pulseaudioを削除したところエラーが回避できるようになりました。

サウンド設定にて、「音のキャプチャ」デバイスにUSB Audioを設定すると、依然として上記のUSBドライバ停止が発生します。そのため、音声入力は無音の設定で使用中です。

x86用のFedora 9では、pulseaudio, USB audio共にデフォルト設定にて問題なく動いていますので、PS3のUSBドライバに何か問題があるのかもしれません。カーネルのバージョンは執筆時点での最新版である2.6.27.7-53です。

| | コメント (0)

Cell SDK 3.1のインストール

久しぶりの更新になります。

Cell SDK 3.1が公開されましたので、PS3とPC(クロス開発環境)にインストールを行いました。SDK 3.1はFedora 9が動作条件のため、Linux環境もFedora 9に更新しました。インストールの手順と気がついた点を記載します。

PS3へのSDK 3.1インストール

□1. ファイルのダウンロード

IBM Cell Broadband Engine resource centerからインストールに必要なファイルをダウンロードします。上記のページから、「Download SDK 3.1 for Fedora 9 from developerWorks」のリンクに進み以下のファイルをダウンロードします。(ダウンロードにはUser ID登録が必要です)。

  • CellSDK-Devel-Fedora_3.1.0.0.0.iso
  • CellSDK-Extras-Fedora_3.1.0.0.0.iso
  • cell-install-3.1.0-0.0.noarch.rpm

ダウンロードしたファイルを適当なディレクトリに保存します。例えば;
   /tmp/cellsdk31

□2. インストール手順

1)yum update daemonが動いている場合事前に停止

デフォルトではインストールされないと思います。以下のコマンドを実行して、エラーになったらそのまま次に進みます。
# /etc/init.d/yum-updatesd stop
bash: /etc/init.d/yum-updatesd: そのようなファイルやディレクトリはありません
 →エラーの例

2)インストールに必要なパッケージを追加

# yum install glibc-devel.ppc64 numactl numactl-devel rsync sed tcl wget
glibc-devel.ppc64/numactlはサンプルソースのコンパイル時に必要となります。

3)インストールスクリプトの実行

ダウンロードファイルを保存したディレクトリ移動して以下のファイルを展開
# rpm -ivh cell-install-3.1.0-0.0.noarch.rpm

/opt/cellに移動して、インストールスクリプトを実行
# ./cellsdk --iso </tmp/cellsdk31> install
< >内は、ダウンロードファイルを保存したディレクトリ名を指定

インストーラーの指示(ライセンス条件に同意など)に従えば作業完了です。

4)後処理

libspe2などがyumで更新されないように、/etc/yum.confに以下の定義を追加
exclude=blas blas-devel elfspe2 kernel lapack lapack-devel libspe2 libspe2-debuginfo libspe2-devel oprofile oprofile-devel

#./cellsdk verifyにてインストール内容を確認。

追加インストールしたいパッケージがあれば、以下の手順で追加が可能。
#opt/cell/cellsdk --iso /tmp/cellsdk31 mount
#yum install <追加したいパッケージ名>

パッケージの概要はマニュアルを参照。


PCへのSDK 3.1のインストール

基本的には、PS3へのインストールと同様です。

1)事前作業

# yum install rsync sed tcl wget
PCによるクロス開発環境の場合、yum-updateの影響はないため、yum updateの停止やexcludeの設定は不要だと思います。

2)インストールスクリプトの実行

PS3版と同様です。

3)後処理

#./cellsdk verifyにてインストール内容を確認。


Cell IDEのインストール

Eclipse IDE用に、Cellプログラム開発用プラグインが提供されています。導入手順は以下の通りです。

1)Eclipse IDEのインストール

EclipseはFedora 9のディストリビューションに入っている3.3を使用します。Eclipseはデフォルトではインストールされないため追加が必要ですが、Fedora 9のパッケージ管理(gpk-application)はグループ単位の指定ができず、Eclipseのパッケージが列挙されてしまうため、最低限何をインストールすればよいのかが分かりません。以前のPuirtの方がよっぽど使いやすかったのですが、、、 YumExをインストールして、Fedora Eclipseグループを指定すればOKです。

2) IBM Java環境の導入

Fedora 9のデフォルトでは、以下の通り、Open JDKがインストールされます。

$ java -version
java version "1.6.0"
OpenJDK  Runtime Environment (build 1.6.0-b09)
OpenJDK Server VM (build 1.6.0-b09, mixed mode)

IDEのインストールマニュアルによると、IDEにはIBMのJREが必要となるため、以下の手順でインストールします。

# /opt/cell/cellsdk --iso /tmp/cellsdk31 mount  → ダウンロードしたisoイメージをマウント
# yum install ibm-java2-i386-jre

パスを以下のように編集
JAVA_HOME=/opt/ibm/java2-i386-50/jre
SYSTEMSIM_TOP=/opt/ibm/systemsim-cell
PATH=$JAVA_HOME/bin:$SYSTEMSIM_TOP/bin:$HOME/bin:$PATH

export SYSTEMSIM_TOP
export JAVA_HOME
export PATH

$  java -version
java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pxi32dev-20080710 (SR8))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi3223-20080710 (JIT enabled)

3)シミュレーターのインストール

SDKのisoイメージには入っていないため、「IBM Full-System Simulator」サイトから追加ダウンロードが必要です。ダウンロードしたrpmファイルをインストールします。
# yum install sysroot_image-3.1-1.noarch
# yum install libBLT24.so
# rpm -ivh systemsim-cell-3.1-8.f9.i386.rpm

ただし、シミュレーターの起動スクリプトに問題があるようで、IDEのデバックモードでシミュレーターを使うことはできませんでした。以前投稿した方法で、PS3実機をリモートマシンとしてPCのIDEからデバッグが可能です。

4)IDEプラグインのインストール

# yum install cellide
/opt/cell/ide/eclipseにプラグインのファイルが展開されます。

Eclipseを起動して、以下のメニューをたどり、プラグインをインストールします。
Help→ Software Update→ Find and Install→ Select new features to install →
next→ New local site→ /opt/cell/ide/eclipseを指定


使ってみて

IDEはCDT 4.0ベースとなったため、コード補完機能が賢くなり以前より使い勝手が向上しました。SDK 3.0 (CDT 3.1)で作成したプロジェクトは概ね自動変換ができました。(ただし、一部変換がエラーになり、プロジェクトを再作成したケースがありました)。

IDEからのデバックですが、SDK 3.0では、speプログラム内に設定したブレークポイントでうまく停止しない問題によく遭遇しましたが、今のところspeプログラム内のブレークも問題なく動いており、SDK 3.0のデバック環境より安定していると感じています。

以前このブログで投稿した、行列積の計算プログラムが今回も添付されていますが、speプログラムがフルアセンブラ化され、より最適化が進んでいます。gccでコンパイルして3072 x 3072の行列積計算を実行してみると、何と152.24 GFlopsとなりました;

# ./matrix_mul -i 5 -m 3072 -p -H -s 6 -o 4
Initializing Arrays ... done
Running test ... done
Performance Statistics:
  number of SPEs     = 6
  execution time     = 1.90 seconds
  computation rate   = 152.24 GFlops/sec
  data transfer rate = 9.62 GBytes/sec

SDK 3.0では同様の条件で、139.36 GFlopsでしたので、かなり性能が向上しています。152.24 GFlopsは論理性能(153.6GFlops)の99%に達しており、いくらアセンブラでカリカリにチューニングしているとは言え、この値を信じてよいものか若干疑問ではありますが、、、

自作の行列和プログラムをSDK 3.1でコンパイルして実行したところ、SDK 3.0と同一の実行時間となったため、コンパイラの最適化レベルは上がっていないようです。SDK 3.0, 3.1ともgcc 4.1.1を使用しているため当然です。

と言う訳で、IDEを使用したPCのクロス環境を使う場合、SDK 3.1に切り替える価値はありだと思います。

| | コメント (0)

Cell SDK 3.0のアップデート

Cell SDK 3.0.0.3 (Fix Pack)を使用したSDKのアップデートを行いましたのでその際の手順を以下に示します。SDKのインストール・アップデートを行っているLinuxはFedora 7です(SDK 3.0の指定バージョンです)。

SDK 3.0.0.3でのアップデート内容

今回のアップデートでは、主に以下のモジュールがアップデートされます。

  • GCC C/C++コンパイラ
  • Fortranコンパイラ
  • GNAT
  • GDB
  • newlib Cライブラリー
  • blas
  • lapark(こちらは新規に追加されたように思います)
  • libmc-rand-devel
  • ppu-mass-devel, spu-mass-devel
  • ドキュメント

アップデートに必要なファイルのダウンロード

newlib Cライブラリーまでの部分は、BSCからダウンロードします

blas以下のパッケージ(科学技術計算ライブラリ関連)は、IBMのサポートサイトからダウンロードします。左記のリンクからFix Central → QS Blade(version = 3.0, platform = linux) を選択してダウンロードに進むと、 CellSDK-3.0.0.3.tarがダウンロードできます。

Cell SDKには、Fedora 7用とRHEL 5.1用が存在しますが、今回のアップデートはRHEL用のようです。上記のtarには以下のファイルが含まれます

  • CellSDK-Updates-RHEL_3.0.0.3.0.iso → 名前からRHEL用のisoイメージ
  • cell-install-3.0.0-3.0.noarch.rpm → インストールスクリプト

最初に、SDK 3.0をインストールした際に使用した/opt/cell/cellsdkスクリプトのupdateオプションではアップデートができませんでした。Fixstarさんのサイトにも、3.0.0.3を直接インストールすることができないという記載があります。

そのため、インストールはrpmコマンドを使用して行います。

CellSDK-Updates-RHEL_3.0.0.3.0.isoを指定して、3.0.0.3のインストールスクリプトをinstallオプションで起動するとコンパイラ類も含めてアップデートパッケージを自動インストールしてくれたのですが、yumレポジトリが中途半端に書き換わってしまい、サンプルソースなどインストール済みのパッケージが一部見えなくなってしまいました(yum list installedで表示がでない)。Fedoraユーザーは手動アップデートが必要と思われます。

コンパイラ類のアップデート

BSCからダウンロードしたrpmファイルをrpmコマンドでインストールします。

# rpm -Uvh ppu-* spu-*

アップデート前後のバージョンは以下の通りです:
 ppu-gcc-4.1.1-57 → ppu-gcc-4.1.1-57.3
 ppu-gcc-c++-4.1.1-57 → ppu-gcc-c++-4.1.1-57.3
 spu-gcc-4.1.1-107 → spu-gcc-4.1.1-107.5
 spu-gcc-c++-4.1.1-107 → spu-gcc-c++-4.1.1-107.5
 spu-gdb-6.6.50-12 → ppu-gdb-6.6.50-29

科学技術計算ライブラリーのアップデート

ダウンロードしたCellSDK-Updates-RHEL_3.0.0.3.0.isoを以下のコマンドでマウントします。

# mount -t iso9660 -o loop  /tmp/CellSDK-Updates-RHEL_3.0.0.3.0.iso  マウントディレクトリ

マウントディレクトリに移動して、アップデートしたいモジュールをrpmコマンドで以下のように更新します。

 # rpm -Uvh libmc*
 # rpm -Uvh ppu-mass* spu-mass*
 # rpm -Uvh lapack*
 # rpm -Uvh blas*

追加パッケージのインストール

/opt/cell/cellsdkスクリプトを使用したSDK 3.0の標準インストールでインストールされなかったオプションパッケージをインストールする方法は以下の通りです。

1) SDK 3.0 isoイメージのマウント

 # /opt/cell/cellsdk --iso isoイメージディレクトリ mount

  • isoイメージディレクトリには、CellSDK-Devel-Fedora_3.0.0.1.0.isoとCellSDK-Extras-Fedora_3.0.0.1.0.isoの両方を格納しておきます

2) インストール済みパッケージのリストを表示

 # opt/cell/cellsdk verify

3) 追加インストールしたいモジュール名を探す。例えば;

 optional  CellPerformanceTools      cell-spu-timing not installed
 yum installコマンドで上記モジュール名を指定してインストール
 # yum install cell-spu-timing

Fedora 8でのSDK 3.0インストール

PC側のCPUを交換した際にHDDも交換したため、PC側にFedora 8+SDK 3.0をインストールしました。SDK 3.0のインストール自体は問題がなかったのですが、Eclipse IDE用のプラグインがうまく動作せず、結局Fedora 7に戻しています。当面はPS3側も含めてFedora 7で行こうと思っています。ちなみに、Fedora 8 + IDEの問題点は以下でした。

  1. Cell SDKのEclipse IDE用プラグインは、Eclipse 3.2とCDT 3.1に依存した作りになっているようです。Fedora 8では、Eclipseは3.3 + CDT 4.0の組み合わせになります。CDT 4.0では新規プロジェクトの作成時に、Cell PPU/SPU executableの選択メニューが出なくなりました
  2. 仕方なく、Fedora 8上にEclipse 3.2をインストールしたのですが、Eclipseがうまく起動してくれませんでした。Java runtimeの問題のようなのですが、SunのJavaに入れ替えてもうまく動作せず

CDT 4.0はコードの補完など機能が向上しているため使ってみたかったのですが残念な結果です。

| | コメント (2)

システムソフトウェア2.10でkbootが起動しない

本日システムソフトウェア2.10にバージョンアップを行ったのですが、以下の問題が発生しています。

  • XMBから優先起動システムを「他のシステム」に変更して再起動するとディスプレーに何も表示が出ない状態で止まってしまう
  • ディスプレーはHDMI接続の液晶テレビ(起動した際に720p等の解像度表示が出ないため、PS3からの信号を認識していないように思われます)
  • 電源ボタン長押しで一旦電源を切り、電源ONの際に電源ボタン長押し(ピッと音がするまで)でXMBが復旧(解像度設定がリセットされた状態で起動)
  • kbootはv1.5(20071023版Addon CDに添付)を使用

試しに、kbootをv1.4(20070817版)に戻したところ正常に起動しました。

v1.4では、kbootがディスプレー解像度を1080iに自動設定するのですが、私の液晶テレビの解像度では文字がつぶれて読めません。その点、v1.5は480pで起動してくれるためこちらの方が使い勝手がよかったのですが。。。。


(2007/12/22追記)

Addon-20071220版のkboot(v1.5.1)で問題が解決しました。CHANGES-j.txtに以下の記載がありました。
--------------------
  PS3 System Software 2.10 では、GPU へのコマンドが格納されるバッファのサイズを
  2MB 以上にしないと処理が正常に行われません。v1.5 の Linux kernel はこれが原因で
  モニタに正常に画面出力を行うことができません。

| | コメント (1)

Cell SDK 3.0のインストール

前回投稿した通り、PS3にFedora 8をインストールしていたのですが、GNOMEデスクトップの安定性がいまいちであったため、結局Fedora 7に戻すはめになりました。時を同じくしてPC側のFedora 7でファイルシステムが損傷してしまい(FSCKでも修復できず)、こちらもHDDのフォーマット&再インストールとなってしまいました。

そのため、最近公開されたCell SDK 3.0をインストールしました。IBMが公開しているCell SDK 2.1のファイルは既にダウンロードができなくなっており、Eclipse IDE用の修正版プラグインが入手できなくなってしまったこともCell SDK 3.0に移行する要因となりました。

PS3/PC LinuxへのCell SDK 3.0インストール手順

インストールは、FixStarsさんのWebページに掲載されている手順で行いました。PS3/PC Linuxとも同様の手順で行うことができます。SDK 3.0からインストールがyumを使った方法になり、インストールスクリプトを実行すると、必要なファイルを自動的にダウンロードしてくれます。ただ、サーバーが混雑しているようで、ダウンロードにはかなりの時間を要しました。

インストール後は、インストールに使用したisoイメージがマウントされたままになっていますが、この状態で「ソフトウェアの追加/削除」を実行するとデフォルトでインストールされなかったオプションパッケージを追加インストールできます。

XLCの導入

IBMが提供しているXLCはデフォルトではインストールされないため、追加インストールする必要があります。XLCはgccに比べてCellに最適化されたコードを生成してくれるため、速度比較用にインストールしていますが、こいつがちょっと曲者です。

インストール用のisoイメージにXLCが含まれているのですが、このXLCは「シングル・ソースコンパイラ」と呼ばれ、SDK 2.1で配布されたバージョンと動作が異なります。具体的には、一回のコンパイラ起動で、ppu・spuのソースを同時にコンパイルできるため、ppu-gcc, spu-gccのようにコンパイラを起動するコマンドにppu, spuの区別がありません。

そのため、シングル・ソースコンパイラではmakefileの作り方が変わってしまうようで、SDK 3.0に添付のサンプルプログラムがコンパイルできなくなります。同様に、Eclipse IDEで作成した既存のプログラムもコンパイルできなくなります。

ではどうするかと言うと、SDK 2.1のXLCと同様の動作をしてくれる、「XL C/C++ for Multicore Acceleration for Linux」というバージョンがあり、こちらを使用します。ファイルは、以下のURLからダウンロードできます:

インストール方法は、ダウンロードしたファイルを適当なディレクトリに展開して、xlc_installを実行するだけで完了します。

Eclipse IDEの設定

まずは、「ソフトウェアの追加/削除」を起動し、「開発」→「Cell Development Tools」からcellide-3.0.0-18-noarchをインストールします。/opt/cell/ideにプラグインのファイルが展開されます。

Eclipseを起動して、「Help」→「Software Update」→「Find and Install」→「Search for new features for install」→「New local site」から上記のプラグインディレクトリを指定します。

私の場合、Eclipseも新規インストールした状態でしたが、SDK 2.1のプラグインがインストールされている場合、事前に削除してからSDK 3.0のプラグインをインストールするのがよいと思います。

gccを使用したコンパイルはこれで可能となりますが、xlcに関してはコンパイラのパス名を変更する必要があります。「Window」→「Preferences」→「Cell」→「Managed Builder Paths」→「XL Tools Managed Build Paths」を/opt/ibmcmp/xlc/cbe/9.0/binに修正します。

Eclipse IDEのManaged Make C Projectで、ppu-gnu32-release等を選択するとエラーとなる場合があります。この場合、Restore Defaultsを行うとエラーが解消しました。

| | コメント (4)

Automountの設定

CD/DVDやサーバーの共有ディレクトリを自動的にマウントするため、以下のようにautofsを設定しました。

</etc/auto.masterの設定>
/misc   /etc/auto.misc  --timeout=60

</etc/auto.miscの設定例>
#BD-ROM mount
cd              -fstype=iso9660,ro,nosuid,nodev   :/dev/scd0

#NFS mount
pc_tmp        -fstype=nfs,hard,intr                  pc:/tmp

#CIFS mount
share           -fstype=cifs,username=xxxx       ://sv/share

  • /dev/scd0はBD-ROMドライブのデバイス名です
  • pc, svは共有ディレクトリを公開しているサーバーのhost名です(ipアドレスを直接指定するか、/etc/hostsファイルにて設定を行います)
  • 設定後autofsサービスを再起動(/etc/rc.d/init.d/autofs restart)

cd /misc/cd,  cd /misc/pc_tmp, cd /misc/shareなどcdコマンドでマウントディレクトリに移動すると、自動的にマウントが行われます。

| | コメント (0)

PS3にFedora 8をインストール

Fedora 8をインストールしてみました。Fedora 7での問題がどこまで解決できたか楽しみです。

インストール前の作業

ブートローダーを最新版に更新しました。Sonyが配布しているPS3 Linux用AddOnの最新版(2007/10/23日版)に入っているブートローダーをインストールします。インストール方法はここを参照して下さい。

現在使用しているブートローダー(2007/8月版)は、ディスプレー解像度の自動選択機能によって、kbootのプロンプト表示の際に解像度が1080iとなり我が家の液晶TVでは文字が潰れて非常に見づらい状態でした。最新版のブートローダーでは、解像度の自動選択を止めて480p固定で表示するようになったため見やすくなりました。

インストール用のDVD-imageは理研さんのFTPサーバーからゲットしました。

インストール手順

基本的には以前ご紹介したFedora 7のインストール手順と同様です。

PS3のBDドライブにインストール用のDVDを挿入後、XMBから優先起動システムを他システムに変更してkbootを起動し、プロンプトが表示されたら以下のコマンドを入力します。

 kboot:linux64 xdriver=fbdev video=720p

インストーラーが起動したらメニューの指示に従って進めます。

  1. 言語・キーボードの選択で日本語を指定
  2. パーティションの設定
    デフォルトのお任せ設定にしました(LVMを使用したパーティションが設定されます)
    「メモリーが不足しているため新しいパーティションを直ちに書き込まなければなりません」という警告が出た場合は、「はい」を選択します
  3. ネットワークの設定
    ・ホスト名をデフォルトから変更(必要な場合)
  4. タイムゾーンの設定
  5. ルートパスワードの設定
  6. インストールパッケージの選択
    ・ソフト開発」を追加します
    ・「Additional Fedora Software」という項目は選択しません
  7. インストールの開始
    一時間以上かかりますが辛抱強く待ちます

インストール後のチューニング

PS3はメモリー量が少ないのがLinuxを動かす上での弱点ですので、少しでも空きメモリーを確保するために以下のチューニングを行っています。

  1. 不要なプロセスを止める
    Linuxインストール後のカスタマイズでいつもお世話になっているwebサイトの情報を参考に、不要になプロセスを停止しました。
    SE Linuxも無効にして関連プロセスを停止しています。
  2. IPv6を無効にする
    IPv6を使用しているサイトは殆んどいないこと(当然私のインターネットアクセス環境もIPv4のみ)、IPv6のドライバーを無効にすることで多少メモリー使用量を減らすことができるため、以下の手順でIPv6を無効にしました。
    1) /etc/sysconfig/networkに以下の設定行を追加
      NETWORKING_IPV6=no
    2) /etc/modprobe.confに以下の設定行を追加
      alias net-pf-10 off
      alias ipv6 off

解決した問題点

  1. shutdonw/rebootが途中で停止する
  2. 起動時にLVMボリュームを認識できない
  3. ps3-boot-game-os実行後のrobootでkbootが立ち上がってしまう(電源off後の次回起動でXMBが立ち上がる)

未解決・新たな問題

  1. X-Windowが不安定
    ログイン画面(GDM)からログインした際に、X-Windowが落ちてログイン画面に戻ってしまうことが数回ありました
  2. GNOME Desktopが不安定
    GNOME Desktopにログイン後、メニューバーをクリックしても反応しないことがかなりの確率で発生
  3. BD-ROMドライブにCD/DVDを挿入した際に、GNOME Desktopにてメディアを自動的にマウントしてくれない(USBメモリーは自動マウントできる)
  4. 音量調整アプレットが動作しない

問題2は深刻で、発生するとログアウトもできません。そのため、デスクトップ環境は使用に耐えない状況です。もともと、デスクトップ環境はメモリー不足で快適と言えないため、PCからのリモート接続主体で使用しながらアップデート待ちといったところです。

| | コメント (15)

kernel-2.6.23-rc3の導入

Sonyが配布しているPS3 Linux用AddOnの最新版(8/17版)にて、kernelが2.6.23-rc3に更新されました。修正内容にshotdown/rebootが途中で停止する問題が対処されているとあったためインストールしてみました。

1. kernel-2.6.22以降のHDDドライバ変更とLVMの関連

ネットでも情報が流れていますが、kernel-2.6.22から、PS3 LinuxでLVM (Logical  Volume Manager)を使用している場合、Linxuが起動できなくなってしまいました。Fedora 7インストーラーのデフォルトがLVMのため、私もLVMでHDDの領域設定を行っていましたが、yum updateでカーネルを2.6.22に更新したら起動できなくなりました。

起動時にカーネルはブートしていますが、LVMを使用している論理ボリュームをルートディレクトリにマウントする段階で「VolGroupが見つからない云々」のエラーを吐いて停止します。ネットで調べてみると、kernel-2.6.22からPS3のHDD driverが変更になり、デバイス名が/dev/sdaから/dev/ps3daになったことでPS3 HDD上のLVMボリュームを認識でなくなったことが原因のようです。

LVMはこれまでデフォルトインストールのままで使用していたのですが、こちらもネットで調べてみると、以下の機能であることが分かりました。

  • HDDを数MB単位のブロック(PEと呼ぶ)に分割し、このPE単位に論理ボリューム(LV)に割り付けを行う
  • LVは/homeや/varなどのファイルシステムにマウントする単位となる(これまでは物理ディスクのパーティション単位でマウントしていた)
  • 同一物理ディスク配下のPEを異なるLVにマッピングできる。例えば、/homeと/verの容量を増やしたい場合、増設したHDDのPEを追加割り当てすることで容量の拡張ができる。LVMを使用していない場合は、パーティションの再設定など繁雑な作業が必要になる

考えてみるとLVMは大量のストレージを管理するエンタープライズサーバーに必要な機能であって、HDDの増設を行うことができない(外付けのUSB HDDなら増設できますが)PS3 Linuxではそもそも必要がない機能だったのですが、そいつに足を引っ張られてしまいました。

LVMの最新パッケージは対策を行っているという情報があったので、LVMのパッケージをアップデートしたり、2.6.22-rc3のソースを再コンパイルするなど色々とトライしたのですがどうしてもLVMを使用した状態で起動することはできませんでした。なんでHDDのデバイス名が変わるような設計変更をやったのでしょうか?

最後はあきらめて、HDDをext3で領域確保する形で(LVMを使用しない形で)Ferora 7を再インストールしました。インストール方法は、「PS3にFedora 7とCell SDK 2.1をインストール」を参照してください。

2. kernel-2.6.23-rc3のインストール

AddOnをダウンロードしてCD-ROMに焼いたら、CD-ROMをマウントして以下のrpmをインストールします。必要なファイルは/target配下にあります。

  # rpm -ivh kernel-2.6.23-20070817.ppc64.rpm
  # rpm -ivh kexec-tools-20070810-1.ppc64.rpm
  # rpm -ivh ps3pf_utils-2.0-1.ppc.rpm
  # rpm -Uvh glibc-kernheaders-2.6.23-20070817.ppc.rpm
  # cp initrd.img-2.6.23 /boot

インストールが終わったら、/boot/etc/yaboot.confを編集して、2.6.23-rc3の設定を追加します。

(2007/9/11追記)
yaboot.confの編集内容を追記します(書こうと思っていたのですが、ついつい手抜きしてしまいました)。私のyaboot.confを以下に示します。

  1:  # yaboot.conf generated by anaconda
  2:
  3:  boot=/dev/ps3da1
  4:  init-message=Welcome to Fedora!\nHit <TAB> for boot options
  5:
  6:  partition=1
  7:  timeout=80
  8:  install=/usr/lib/yaboot/yaboot
  9:  delay=5
10: enablecdboot
11: enableofboot
12: enablenetboot
13: nonvram
14: mntpoint=/boot/yaboot
15: usemount
16:
17: default=2.6.23-rc3 ← デフォルトで起動するカーネルのラベル名を指定
18:
19: image=/vmlinuz-2.6.23-0.164.rc5.fc8
20:        label=2.6.23-0.164.rc5
21:        read-only
22:        initrd=/initrd-2.6.23-0.164.rc5.fc8.img
23:        append="video=720p root=LABEL=/"
24:
25: image=/vmlinux-2.6.23  ← 新たに追加したカーネル
26:        label=2.6.23-rc3   ← ラベルを付与して起動時にカーネルを選択
27:        read-only
28:        initrd=/initrd.img-2.6.23
29:        append="video=720p root=LABEL=/"

  • 25~29行目を追加します(image=とinitrd=の後には、今回/bootに追加インストールしたファイル名を記載)
  • 17行目のdefautlコマンドを追加
  • その他の行は現状まま変更しません
  • kboot:のプロンプトが表示された時点で、delayで指定した時間(例では5s)何も入力しない場合は、defaultで指定したカーネルが起動します
  • kboot:のプロンプトが表示された時点で、TABキーを押す毎にyaboot.confで指定したlabelが交互に表示され、起動するカーネルを指定できます
  • これまで起動実績があるカーネル指定部分(例では、19~23行)を残すことで、万が一新カーネルが起動しない場合も旧カーネルで起動できます(私は4項に示したFedora-developmentのカーネルを既にインストールしているため2.6.23になっていますが、インストール直後の場合、2.6.21のカーネル起動設定が存在します)

3. kernel-2.6.23での変更点

主要な変更点は以下です

  1. hddのデバイス名が/dev/sda → /dev/ps3daに変更となった
  2. usbメモリーは/dev/sdaとなる
  3. XMBに戻すコマンドがboot-game-os → ps3-boot-game-osに変更となった(boot-game-osは正常に動作しません)
  4. kbootも2.6.23-rc3ベースに変更となっているため再インストールがおすすめです(kbootのプロンプトからXMBに戻す際に、旧kbootのboot-game-osが動作しないため)

デバイスドライバー関連のソースコードはかなり変更が入っているようです。
Fedora 7のカーネルと異なり、addon版のカーネルパッケージではデバイスドライバーがPS3で必要なものしか入っていません。

問題のshutdown/reboot/poweroffコマンドはやっと正常に動作するようになりました。

4. Feroraのカーネルパッケージ

(2007/12/16追記)
最新のFerora 7はカーネルが2.6.23のリリース版に置き換わっています。そのため普通にyum updateを実行するとkernel-2.6.23がインストールされます。Add-on CDのカーネルは必要最小限のドライバのみが有効になっており、nfs/autofsなどが使えないため、私はFedora kernelに変更しています。ps3-boot-game-osの問題も解決しています。

| | コメント (2)

PS3用Fedora 7 kernelの再構築

PS3 LinuxをFedora 7に更新して問題なく使えているのですが、shutdown/rebootが途中で停止してしまう既知問題をなんとかしたいと思っています。Yumで一度カーネルの更新を行ったのですが問題は解消しませんでした。

LinuxHQで最新のソースを調べると、PS3用のvideoドライバであるps3fb.cにkernel-2-6-21-git5で修正が行われていることが分かりました。ひょっとしてこの修正パッチを当てると問題が解決しないかと期待したのですが、Fedora 7のkernel source rpmを展開したところ、このパッチは既に取り込み済でした。

そのため、単に最新のパッチをあててカーネルをビルドし直せば問題解決という目論見は崩れ去ったのですが、PS3用のカーネル再構築にトライすることにします。

以下にカーネル再構築の手順を示します。カーネルの再構築を行うような方はそれなりの経験者だと思いますが、ひとつ間違うと、二度とシステムが起動しなくなる場合もありますので、カーネルの再構築を行う場合は十分ご注意ください。

カーネルソースの入手

最初は、最新のカーネルをベースに再構築を行うのがよかろうと思い、kernel-2.6.21-5のソースをLinux Kernel Archivesからダウンロードしたのですが、このソースツリーではconfigをどういじってもkernelをブートすることができませんでした。まったくkernelが起動する気配がないので、ディスクドライバ周りに問題ありかと思い色々と調べてみると、2.6.21-5のソースツリーには、ps3_strage.cというHDDのドライバが入っていないことが分かりました。そのほかにも、snd_ps3.c、gelic_net.cなどPS3に必要なソースコードが欠けているようです。

kernel-2.6.21からPS3のコードが統合されたと思っていたのですが、まだ部分的な統合にとどまるようで、Fedora 7のカーネルは不足分を独自に取り込んでビルドされていることが分かりました。

そのため、PS3用カーネルの再構築のためにはFedora 7のsrc.rpmが必須になります。

src.rpmの入手と展開

src.rpmの展開方法はこちらのサイトを参考にしました。

1. 最新版のsrc.rpmをダウンロードします
    # yumdownloader --source kernel
    kernel-2.6.21-1.3228.fc7. 100% |=========================|  45 MB

2. rpmファイルの展開
    # rpm -Uvh kernel-2.6.21-1.3228.fc7.src.rpm
       以下の警告が出ますが、気にせず進めます
  警告: グループ kojibuilder は存在しません - root を使用します

3. カーネルソースの展開
    rpmbuildを実行するために以下のパッケージをインストール。
  # yum install sparse

    # cd /usr/src/redhat/SPECS/
    # rpmbuild -bp --target $(uname -m) kernel-2.6.spec
    ビルド対象プラットフォーム: ppc64
    ターゲット ppc64 用にビルド中
         (以下略)
/usr/src/redhat/BUILD/kernel-2.6.21/linux-2.6.21.ppc64 にソースが展開されます。/usr/src/redhat/SOURCESに展開されたパッチファイルを見ると、PS3関連で21本のパッチを当てていることが分かります。ディストリビューションとしてまとめる際は、単純にソースツリーを持ってくるだけではなく色々と手を入れているのですね。

4. ソースディレクトリにシンボリックリンクを設定
    # ln -s /usr/src/redhat/BUILD/kernel-2.6.21/linux-2.6.21.ppc64 /usr/src/linux
これからのmake等は、/usr/src/linux をホームに作業を行います。

Makeの準備

1. /usr/src/linux/Makefile に以下の定義を追加
    EXTRAVERSION = -1.3228.ps3
    CROSS_COMPILE   ?= ppu-
     → cell SDKのppu-gccでコンパイルします(多少最適化する?)

2. configファイルの設定
   # cd /usr/src/linux
 # cp /boot/config-2.6.21-1.3228.fc7  .config
 # make menuconfig →  リモートPCから行っているためmenuconfigです

/bootからコピーしたFedora 7のconfig設定が読み込まれた状態になります。オリジナルのconfigはどんなマシン構成にも適合するように、あらゆるドライバーがModuleとして指定されているため、PS3では必要がないモジュールの選択を外してカーネルサイズのダイエットとコンパイル時間の短縮化を図ります。

/usr/src/linux/arch/powerpc/configs/ps3_defconfig がPS3のための最小レベルのconfigになりますが、このconfigではカーネルを起動できませんでした。冒頭に示したps3_strage等の設定が抜けているため追加したのですが、まだ不足があるようです。そのため、Fedora 7のconfigをベースに不要な設定を抜いていきました。

今回のビルドで使用したcofigはこちらです。

Makeとカーネルイメージのコピー

1. Make
   # make
   # make modules_install

2. カーネルイメージのコピー
   # cp -p arch/powerpc/boot/zImage.ps3 /boot/vmlinuz-2.6.21-1.3228.ps3
   # cp -p System.map /boot/System.map-2.6.21-1.3228.ps3
   # mkinitrd -v /boot/initrd-2.6.21-1.3228.ps3.img 2.6.21-1.3228.ps3

3. yaboot.confの編集
/boot/etc/yaboot.confに以下の行(青字の部分)を追加します。

default=2.6.21-1.3228.fc7
image=/vmlinuz-2.6.21-1.3228.fc7 → 起動実績がある旧カーネル
        label=2.6.21-1.3228.fc7
        read-only
        initrd=/initrd-2.6.21-1.3228.fc7.img
        root=/dev/VolGroup00/LogVol00
        append="video=720p"
image=/vmlinuz-2.6.21-1.3228.ps3 → 新規にビルドしたカーネル
        label=2.6.21-1.3228.ps3
        read-only
        initrd=/initrd-2.6.21-1.3228.ps3.img
        root=/dev/VolGroup00/LogVol00
        append="video=720p"

上記のように、必ず起動実績のあるカーネルイメージのエントリを残しして、いざというときは旧イメージで起動できるようにします。

PS3 Linuxのカーネル

このwebページにあるように、PS3のハードウェアはLinuxに対してHypervisorで仮想化されています。HDD/BDはATA接続ですが、HyprevisorとLinuxのドライバ(ps3_strage)を介して、Linux上ではSCSIディスク(/dev/sda)して見えています。そのため、カーネルのconfigでATA関連のドライバを全て無効にしても問題なく動作します。

ネットワークは、gelic_net 、gelic_wireless というPS3専用のドライバが提供されているため、その他のドライバ(intel/realtekなど)は全て無効にできます。

オリジナルFedora 7カーネルと比較して

不要なドライバーの削除をできる限り行ったところ、カーネルのサイズは以下に示すようにかなり小さくなりました。
 7567248  vmlinuz-2.6.21-1.3228.fc7 → オリジナル
 5764512  vmlinuz-2.6.21-1.3228.ps3 → 今回ビルド

しかしながら、ドライバーモジュールは以下のように、サイズが大きくなってしまいました。
   90392   ps3_storage.ko  → オリジナル
 397083 ps3_storage.ko  → 今回ビルド

Fedora7オリジナルのドライバーイメージは圧縮を行っているように思えるのですが、モジュールコンパイル時に圧縮を行うオプションが分からず、ドライバーのサイズを小さくする方法は不明です。ドライバーの数は大幅に削りましたが、合計のディスク占有量では今回ビルド分の方が大きくなってしまいました。

カーネルのサイズ自体は今回ビルドしたカーネルの方が小さいのですが、起動時(runlevel=3で起動)のメモリー量(freeコマンドの結果)を比べるとオリジナルカーネルの方が小さくなりました。
  オリジナルカーネル起動時の空きメモリー      : 146,644
  今回ビルドしたカーネル起動時の空きメモリー: 130,640

オリジナルカーネルは無駄なドライバーが多くメモリー効率が悪いと思っていたのですが意外な結果です。これだと、無理にカーネルを再構築するメリットはないと思います。

ps3fb_shudown問題のパッチ

冒頭の問題に関連しそうなパッチがLinuxppc-devのM/Lアーカイブにありましたが、Fedora 7のソースにはうまくパッチがあたりませんでした。そのため、shutdown時の問題を解消するためのパッチは断念しました。

ということで今回は、Fedora(ディストリビューション)添付のカーネルは結構優れモノであることがよく分かったというのが成果(?)でした。

| | コメント (1)

PS3にFedora 7とCell SDK 2.1をインストール

5月末にFedora 7がリリースされました。7からCoreとExtraのレポジトリが統合されたため、Fedora Core 7でなく、Fedora 7と呼ぶそうです。

Fedora 7ではkernelにPS3のコードが統合されたため、Add-on CDなしでインストールができる、加えて通常のGUIインストーラーが使用できるとのことです。これはぜひお試しせねばということで、YDL5からFedora 7への切り替えを行いました。あわせて、Cell SDK 2.1の再インストールも行いました。YDL5ではライブラリの依存性問題があったのですが、Fedora 7にはあっさりとインストールできました。インストールの概要を以下に記載します。

Fedora 7のインストール

現在使用しているYDL5は消去して、Fedora 7を新規にインストールしました。
インストール用のDVD-imageは理研さんのFTPサーバーからゲットしました。

FIXSTARSさんのFedora 7導入解説では、ブートローダーを最新版に入れ替える必要があるとのことです。20070516版のアドオンCDをダウンロードし、/PS3/otherosディレクトリのotheros.bldをPS3にインストールします。

PS3のXMBから優先起動システムを他システムに変更してkbootを起動し、プロンプトが表示されたら以下のコマンドを入力します。

 kboot:linux video=720p

インストーラーは720pのHD解像度を前提にしているため、videoモードを720pに変更しないと、[次へ→]といったマウスクリックのボタンが画面の表示範囲外になってしまい操作ができなくなります。そのため、GUIインストールを行うためには、HDMI接続されたHD解像度のディスプレーが必要になります。

インストーラーが起動すれば、以下のようにインストーラーの指示に従うだけでよく、通常のLinuxインストールと同等でした。

2007/9/8更新: インストール時のHDDフォーマット形式をLVMにすると、インストール後yum updateでkernelを2.6.22に更新するとLinuxが起動しなくなります(詳細は別途投稿します)。デフォルトはLVMですが、インストール時にカスタムレイアウトを選択してext3のパーティション設定がおすすめです。

  1. 言語・キーボードの選択で日本語を指定
  2. パーティションの設定
    デフォルトのお任せ設定にしました(LVMを使用したパーティションが設定されますが特に問題は出ていません)
    カスタムレイアウトを選択して、パーティションを設定します。私は以下の領域設定としました。
    ・/boot   :  200MB
    ・swap    :  512MB
    ・/         :  残り全部

    「メモリーが不足しているため新しいパーティションを直ちに書き込まなければなりません」という警告が出た場合は、「はい」を選択します
  3. ネットワークの設定
    ホスト名をデフォルトから変更(必要な場合)
  4. タイムゾーンの設定
  5. ルートパスワードの設定
  6. インストールパッケージの選択
    「ソフト開発」を追加します。インストールパッケージのカスタマイズを行ったら、インストール開始時にエラーが発生しました。カスタマイズに関しては、「後でカスタマイズ」を選択した方がよいです
  7. インストールの開始
    一時間以上かかりますが辛抱強く待ちます
  8. インストール完了後自動的にリブートがかかるのですが、この際にうまくリブートができません。30s程度電源ボタンを押しつづけて強制的に電源を切り、再度パワーオンで起動すればめでたくFedora 7が起動します

PS3 Fedore 7の問題点

インストールの章でも述べましたが、再起動や停止(シャットダウン)が正常に行えない問題があるようです。再起動中にファイルシステムのシャットダウンを行った後;
 Syncronizing SCSI chache for disk sda
   --> ps3fb_shutdown : 1144
   --> ps3fb_remove: 1130
と表示された後、先に進まなくなってしまいます。

面倒ですが、毎回電源ボタンの長押しで強制終了するしかなさそうです。ファイルシステムの停止まではできているので、強制終了しても次回起動時に問題が出ることは今のところありません。

この問題については今後のアップデートで解決することを期待したいと思います。
(2007/9/9追記)
2007/08/17版のアドオンCDに収録されたkernel-2.6.23-rcをインストールするとこの問題が解決します。
詳細はこちらを参照願います

Fedora 7インストール後のチューニング

PS3はメモリー量が少ないのがLinuxを動かす上での弱点ですので、少しでも空きメモリーを確保するために以下のチューニングを行っています。

  1. 不要なプロセスを止める
    Linuxインストール後のカスタマイズでいつもお世話になっているwebサイトの情報を参考に、不要になプロセスを停止しました。
    SE Linuxも無効にして関連プロセスを停止しています。
  2. IPv6を無効にする
    IPv6を使用しているサイトは殆んどいないこと(当然私のインターネットアクセス環境もIPv4のみ)、IPv6のドライバーを無効にすることで多少メモリー使用量を減らすことができるため、以下の手順でIPv6を無効にしました。
    1) /etc/sysconfig/networkに以下の設定行を追加
      NETWORKING_IPV6=no
    2) /etc/modprobe.confに以下の設定行を追加
      alias net-pf-10 off
      alias ipv6 off
    3) /etc/hostsの以下の行を削除(もしくは#でコメントアウト)
      ::1    localhost6.localdomain6     localhost6

    2007/6/10: IPv6無効化手順を追記

おすすめツールのインストール

mc (midnight commander)のインストール

PC側でコンパイルしたファイルをPS3に転送することがよくあるのですが、PC Linux側からsshでリモートアクセスしてcpコマンドでコピーするのは面倒です。mcはコンソールウインドウにファイルの一覧を表示して、コピーや削除が視覚的に行える、いわゆるファイラーの一種です。MS-DOSを使ったことがある方はfd(有名なフリーソフト)みたいなヤツと言えばイメージが湧くと思います →なんだか年がばれそうですが、、

yum install mc  でインストール可能です


Cell SDK 2.1のインストール

(2007/12/16追記)
SDK 3.0が公開されたため、SDK 2.1用のファイルがIBMのWebサイトから削除されてしまいました。そのため、新規のインストールはSDK 3.0になります。SDK 3.0のインストールはこちらに記載しました。

最後にFedora 7にCell SDK 2.1をインストールします。標準ではインストールされない以下のパッケージがSDK 2.1では必要となるため、yum installで追加インストールします。

  • tcl
  • tk
  • freeglut
  • freeglut-devel
  • mesa-libGLU-devel
  • numactl-devel → サンプルソースのビルドに必要

今回はCell SDKのisoイメージに入っているインストールスクリプトを使用してインストールを行いました。

初めてSDKをインストールする方は、先ずIBMが配布しているCellSDK21.isoをダウンロードします(ダウンロードにはアカウント登録が必用です)。isoイメージをCD-ROMに焼いて、/softwareのファイル一式をPS3 Linuxの適当なディレクトリ(/tmp/cellsdk-2.1など)に展開します。

私の場合は、前回のインストールで使用したファイルをPC Linuxの/tmp/cellsdk-2.1に残しているため、PC LinuxのファイルをNFSで共有してインストールを行っています。こうすれば、後で出てくるBSCからのダウンロードが不要となります。

インストールファイルを格納したディレクトリに移動して、以下のコマンドを実行すればSDK2.1が自動的にインストールされます。CellのシミュレーターをPS3上で動かすことはないため、--nosimオプションをつけて、シミュレーターのインストールをスキップしています。

 # ./cellsdk install --nosim

SDKのisoイメージに収録されていないファイルは、バルセロナスーパーコンピュータセンタ(BSC)のLinux on Cellのサイトから自動的にダウンロードします。BSCのwebサイトが混雑している場合、ダウンロードが途中で止まってしまうことが以前はありました。その場合は、以下のファイルを個別にダウンロードして、isoイメージと同じディレクトリに格納します。(今日ためした感じでは、以前のような混雑はなさそうでした)。

nosimオプションでインストールした際に必要となるファイルは以下です。

<BSCからダウンロードするパッケージ>

・GNU Toolchain for PPU
ppu-binutils-2.17.50-8.ppc.rpm
ppu-gcc-4.1.1-10.ppc.rpm
ppu-gcc-c++-4.1.1-10.ppc.rpm
ppu-gdb-6.6-15.ppc.rpm
・GNU Toolchain for SPU
spu-binutils-2.17.50-8.ppc.rpm
spu-gcc-4.1.1-9.ppc.rpm
spu-gcc-c++-4.1.1-9.ppc.rpm
spu-gdb-6.6-12.i686.rpm
spu-newlib-1.15.0-7.ppc.rpm
・SPE Runtime Lib v1.2 (deprecated)
libspe-1.2.2-0.ppc64.rpm
libspe-1.2.2-0.ppc.rpm
libspe-devel-1.2.2-0.ppc64.rpm
libspe-devel-1.2.2-0.ppc.rpm
・SPE Runtime Lib v2.1
elfspe2-2.1.0-0.ppc.rpm
libspe2-2.1.0-0.ppc64.rpm
libspe2-2.1.0-0.ppc.rpm
libspe2-devel-2.1.0-0.ppc64.rpm
libspe2-devel-2.1.0-0.ppc.rpm

<SDK2.1のisoイメージに添付>
・IBM XL C/C++ Compiler
xlc.cmp-8.2.0-20.ppc64.rpm
xlc.lib-8.2.0-20.ppc64.rpm
xlcpp.cmp-8.2.0-20.ppc64.rpm
xlcpp.help-8.2.0-20.ppc64.rpm
xlcpp.lib-8.2.0-20.ppc64.rpm
・SIMD math library
simdmath-2.1-1.ppc.rpm
simdman-2.1-1.noarch.rpm
spu-simdmath-2.1-1.ppc.rpm 
・MASS library
ppu-mass.lib-4.4.0-20.ppc64.rpm
ppu-mass.lib-4.4.0-20.ppc.rpm
spu-mass.lib-4.4.0-20.ppc.rpm 
・Prototype libraries and samples package
cell-sdk-lib-samples-2.1-2.noarch.rpm
・ALF library
cell-alf-2.1-2.noarch.rpm
・Tool
cell-spu-timing-2.1-1.ppc.rpm
fdprpro-5.4.0-8.ppc.rpm

インストールが終わったら、以下のコマンドでインストール状態の確認を行います。
 # ./cellsdk verify

以下のコマンドでサンプルソースをビルドします。
 # ./cellsdk build --gcc
fft.cをビルド中に<numa.h>が見つからないことでビルドがエラー終了してしまいます。YDLでは全てのサンプルソースをビルドできたのですが、、 ほぼ全てのサンプルソースはビルできているため、SDKのインストール自体は問題ないと考えます。
2007/6/10追記: numactl-devel をインストールしたところビルドエラーの問題が解決しました。

ベンチマーク用に自作した行列計算のプログラム(コンパイルはPC Linux側で行っていますが)を実行しましたが、YDL5で実行した計算時間と比べて誤差レベルの差分で実行できました。

ということで、SDKも含めてPS3は最新のFedora7に無事移行できました。PC Linuxは、当面Fedora Core 6のままにしておく予定です(特にFC6で不満はないですし、Fedora7にした場合の各種カスタマイズの時間が取れないためです)。

PS

最近当ブログをリンクして下さった方が出始めたため、訪問者数が少し増えてきました(それでも、一日20~30人程度ですが)。この先もウソを書かないように注意していきたいと思います。
余談ですが、GateKeeper.Sony.CO.JPから結構な頻度でアクセスがあるのが見張られているみたいでちょっと気になります、、(基本的にはPS3ファンですので、悪口は書きませんが)。

| | コメント (1)

PC LinuxにCell SDK2.1をインストールする

今回は、前回の「PS3 LinuxへのCell SDK2.1インストール」に続いて、PC Linux(Intel CPU)へのCell SDKインストールを行いました。なぜPCでCellのプログラムを作成する必要があるのかというと、Todotani的には以下の理由になります:

  • Eclipseのような統合開発環境(IDE)が使いたい
    プロな人とたちは、Emacs一本で、コーディング・コンパイル・Tag Jumpを使用したエラー箇所の修正・デバッグまで行うのでしょうが、私はEmacsの複雑なキーバインディングについていけないので、GUI環境でお気軽にプログラミングができるIDEが重宝します
  • 我が家ではPS3はリビングにおいてあり、32型セミHD(720p)の液晶TVにHDMI接続しているのですが、液晶TVではどうしても文字が滲んでしまい、フォントサイズを大きくする必要があるためプログラミングには向きません
  • プログラミングでリビングのTVを占有していると家族からブーイングが出ます

ということで、PC上でCellのプログラムを作成・デバッグできると便利です。幸いなことに、Linux PCにCell SDK2.1のIntel CPU版とEclipse IDEをインストールするとこれらが全部実現できます。PC用のLinuxとしてはFedora Core6 (FC6)が必要です。

なんとCellのシミュレーターまであり、PPC用のLinux kernelとCellのプログラムをIntel CPUの上で動かすことができます(エミュレーションですので速度は遅いですが)。まだ使ったことはないのですが、SPUの稼働率をグラフ化することで、SPUへの負荷分散が適切に働いているかを確認することもできるようです。

Cell SDK 2.1のインストール

前回のPS3 LinuxへのCell SDK2.1インストールで使用したSDK2.1のisoイメージがそのまま使えます。また、前回バルセロナスーパーコンピュータセンタ(BSC)のLinux on Cellのサイトからダウンロードしたパッケージが/tmp/cellsdk-2.1ディレクトリに残っている場合、CPU種別に依存しないパッケージはそのまま使用できるため、再ダウンロードの手間が省けます。今回はインストールするパッケージ数が多いため、SDKに添付のインストールスクリプトを使用します。実はSDKのisoイメージを、以下のようにそのままmountしてインストールを行います。私はこんな事ができることを始めて知りました。

isoイメージのmout point作成
#mkdir –p /mnt/cellsdk

isoイメージをmount
#mount –o loop CellSDK21.iso /mnt/cellsdk

パッケージの格納ディレクトリに移動してインストールスクリプトを実行
#cd /mnt/cellsdk/software
#./cellsdk install

ISOイメージをCD-ROMに焼いてファイルを消去してしまった方は(何を隠そう私もそうです)、CD-ROMの/sofware ディレクトリをHDDにコピーして、./cellsdk install でインストールスクリプトを実行します(CD-ROM上のファイルを指定しても、書き込み許可がないせいか起動できません)。

前回も書きましたが、私がインストールを行った際はBSCからのダウンロードが途中で止まってしまう現象が何回も発生しました。ダウンロードが進まなくなったら、ダウンロードが再開するのを待つよりも、CTRL-Cで一旦スクリプトを止めて、再度最初からやり直した方が早いと思います。やり直しと言っても、ダウンロード済のパッケージはダウンロードをスキップするので中断した続きから作業を再開することができます。注意しなければならないのは、ダウンロードを中断した際の不完全なファイルが/tmp/cellsdk-2.1に残ってしまうため、このファイルを削除してからインストールスクリプトを再実行する必要があります。不完全なダウンロードファイルが存在すると、このファイルのダウンロードをスキップしてしまうため、ファイルをディスクに展開する段階でエラーが発生します。

インストールが完了したら、以下のコマンドを実行します。
# ./cellsdk verify
INSTALL SUMMARYで全てのモジュールがinstalledと表示されればインストール完了です。

環境変数(PATH)に以下の指定を追加して、SDKのコンパイラ類にPATHを通しておきます。
PATH=$PATH:$HOME/bin:/opt/ibm/systemsim-cell/bin:/opt/cell/bin:/opt/ibmcmp/xlc/8.2/bin:/opt/ibm/cell-sdk/prototype/bin
gccを実行するとx86のコードが生成され、ppu-gccでPPCのコードが生成されるクロス開発環境のできあがりです。

最後に以下のコマンドを実行してサンプルプログラムがビルドできることを確認します。
# ./cellsdk build

Eclipse IDEとCell SDKプラグインのインストール

IDEというと、私はこれまではWindows上で動く、Microsoft Visual StudioやBoland Jbuilderしか使ったことがなく、Eclipseは今回初めて知りました。EclipseはJavaのIDEとしてはメジャーな無償ソフトで、書店のJavaコーナーに行くと関連書籍が多数見つかります。これだけで、私がプログラマーとしてはもぐりであることがバレバレですね。

Eclipseは元々はJavaの開発環境ですが、プラグインによって各種の開発環境に柔軟に拡張が可能です。C/C++用の開発環境としてCDT (C/C++ Development Tools)が存在します。Cell SDKでは、Cell用のプラグインが提供されます。従って、Cellの開発環境としてはCDT+Cell SDKプラグインを使用します。

Eclipseをインストールする前に、先ずJavaの実行環境(JRE)をインストールしておきます。FC6のディストリビューションにはjre-1.4が入っていますが、SDKのドキュメント(Software Development Kit 2.1 Installation Guide)によると、FC6のJava実行環境は不完全なので、IBMもしくはSunのJREをインストールする必要があると書いてあります。FC6に入っているJREを使用した状態でEclipseを動かして、簡単なCのコードをコンパイル・デバックする範囲では特に問題はなかったのですが、念のためにSunのJREをインストールします。確かにFC6標準のJava環境では、Javaアプリが動作しないため、JREをアップデートしておくと何かメリットがありそうです。

JREは以下のSun Javaダウンロードサイトから取得します。
ダウンロードに進み、Linux RPM (自己解凍ファイル)を選択します。その他の詳細はダウンロードサイトに掲載されている「手順」のリンクに従います。インストールが終了したら、環境変数にJREのディレクトリを追加します。旧版のjava-1.4.2-gcj-compatはパッケージマネージャーを使用して削除しました。

JAVA_HOME=/usr/java/jre1.6.0_01
PATH=$PATH:$HOME/bin:/opt/ibm/systemsim-cell/bin:/opt/cell/bin:/opt/ibmcmp/xlc/8.2/bin:/opt/ibm/cell-sdk/prototype/bin:$JAVA_HOME/bin

最後にEclipseの導入になります。
FC6にはEclipseが入っており、パッケージマネージャーで開発-> Eclipseを選択すると、Eclipse本体とCDTがインストールされます。これにCell SDKのプラグインを追加するだけでインストールは終了です。

ただ、一点だけ注意すべき点があります。SDK 2.1に添付のCell SDKプラグインはversion 2.1.0ですが、デバッグ時にPPU/SPUコードをシミュレーターにロードする段階で異常終了してしまう問題があります。私は当初この原因が分からずに思いっきりはまりました。修正版のcom.ibm.celldt_2.1.1.2007032901.tar.gzが公開されているためこちらをダウンロードしてインストールします。インストール方法は以下です。
・上記のプラグインを適当なディレクトリに解凍。
・EscipseのHelpメニュー → Software Updates → Find and Install... を選択
・Search for new features to installを選択して、Nextをクリック
・New Local Site... をクリック
・解凍したファイルを指定して、OKをクリック
・Finishをクリック

これでEclipse上でPPU/SPUプログラムのコーディングとデバックができるようになりました。プログラム開発の流れについては、Helpメニュー → Help Contents → IDE for Cell Broadband Engine SDK にTutorial(チュートリアル)がありますので、こちらを参照して下さい。

これでやっと開発環境が整いました。あとは、SPUのSIMD命令を使用したプログラミングのお勉強や、Pentium4とのベンチマークを行いたいと思います。

| | コメント (0)

YDL5にCell SDK 2.1をインストール

YDL5のインストールが終わったので、次はPS3 LinuxにIBMが配布しているCell SDK 2.1をインストールします。例によって、インストールの方法はフィックスターズさんのwebページを参考にしています。それではインストールの概要と実際にやってみて気がついた点を下記に示します。

ご注意:下記のインストール手順は一発でできたわけではなく、パッケージダウンロードの不調やインストールパッケージの競合など、インストール中に発生した問題をクリアするための試行錯誤を行ってインストールを完了した後に、最短手番でインストールするための手順を再整理したものです。再度下記の手順でインストールをやり直して手順の正常性を確認したわけではありません。そのため、下記手順でインストールした際に、何らかの問題が発生した場合はご容赦下さい。

(2007/5/5追記) Fedora Core 6 (FC6) をPS3にインストールの追記に記載した通り、アドオンCD20070425バージョンを使用すればFC6のインストールが可能になります。私が使用したYDL5はSDK 1.1を前提にしており、SDK 2.1のインストールには適しません(記事に示すように、glibcの入れ替えなど無理をしています)。そのため、これからSDK 2.1をインストールされる方はFC6上にインストールされることをお勧めします。

SDK 1.1の削除

私が使用しているYellow Dog Linux 5.0 (YDL5) では、デフォルトでCell SDK 1.1が導入されていますが最新のSDK 2.1をインストールするために、先ずは以下の操作でSDK 1.1を削除します。

  • GNOME Desktopにrootでログインして、アプリケーションメニュー → Add/Remove Softwareからパッケージマネージャを起動します
  • Base System → Cell Libraries、開発 → Cell SDKのチェックマークを取り消して更新を実行

私の環境では、一部のパッケージが削除されずに残ってしまいました。SDK 2.1のパッケージをインストールする際にエラーになってしまうため、以下のようにマニュアル操作で削除しておきます。

# rpm -qa | grep spu
spu-newlib-3.3-73
spu-binutils-2.17.50-8
上記のspuライブラリーが残っているため削除します。

# rpm -ev spu-newlib-3.3-73 spu-binutils-2.17.50-8

glibcの強制アップデート

Cell SDK2.1はFedora Core6 (FC6) にインストールすることを前提にしているため、FC5ベースのYDL5にインストールすると、一部のパッケージでglibcとの依存性チェックでエラーになってしまいインストールができません。ちなみに、以下のようなエラーが発生します。

# rpm -ivh ppu-binutils-2.17.50-8.ppc.rpm
エラー: 依存性の欠如:
        rtld(GNU_HASH) は ppu-binutils-2.17.50-8.ppc に必要とされています

そのためFC6をインストールしようとして玉砕したのは前回述べたとおりです。しかたがないので、YDL5にFC6に添付のglibcを強制的にインストールします。FC5のUpdate配布サイトから以下のモジュールをダウンロードして適当なディレクトリに格納します(2007/5/3時点の最新モジュールです)。

・glibc-2.5-10.fc6.ppc.rpm
・glibc-2.5-10.fc6.ppc64.rpm
・glibc-common-2.5-10.fc6.ppc.rpm
・glibc-devel-2.5-10.fc6.ppc.rpm
・glibc-devel-2.5-10.fc6.ppc64.rpm
・glibc-headers-2.5-10.fc6.ppc.rpm

次に、以下のコマンドで強制インストールします
#rpm -Uhv glibc* --nodeps --force

インストールが終わったら、以下のコマンドでアップデートの状態をチェックします。
# rpm -qa | grep glibc
glibc-headers-2.5-10.fc6
glibc-common-2.4-11.ydl.1
glibc-2.5-10.fc6
glibc-devel-2.5-10.fc6
glibc-kernheaders-3.0-5.2
glibc-devel-2.5-10.fc6
glibc-2.5-10.fc6
glibc-common-2.5-10.fc6

glibc-common-2.4-11.ydl.1だけ、なぜかYDLのパッケージが残っています。glibc-common-2.5-10.fc6で置き換えられるべきだと思うので、以下のコマンドで削除してしまいます。
# rpm -ev glibc-common-2.4-11.ydl.1

glibc-kernheaders-3.0-5.2はFC6で置き換えるべきモジュールが存在しないため、削除せずそのままにしておきます。
ここまで終わったら念のためにシステムをreload。動作保証外の荒技になると思いますが、今のところはこの処置で動いています。

(2007/5/5更新) glibc-kernheaders-3.0-5.モジュールは、YDL5に含まれるモジュールです。YDL5のインストールでは使用しませんが、FC5をインストールする際に必要となるアドオンCDには、PS3専用のglibc-kernheaders2.6.16-20061207が入っています。PS3用のYDL5に入っているモジュールなので、アドオンCDとバージョンが異なりますがそのままとしておきます。また、yum updateによってPS3 linux専用のモジュールが勝手に更新されないように以下の設定を/etc/yum.confに加えました。
  exclude=kernel-*, glibc-kernheaders-*, kernel-headers-*, kexec-tools-*, spu-*

SDK 2.1インストールに必用なパッケージ

先ずIBMが配布しているCellSDK21.isoをダウンロードします。ダウンロードにはアカウント登録が必用です。上記のisoイメージの他に、SPUコンパイラなどは、バルセロナスーパーコンピュータセンタ(BSC)のLinux on Cellのサイトからダウンロードします。
SDK2.1のisoイメージにインストールスクリプトが収録されており、インストールスクリプトを実行するとBSCから必用なパッケージを自動的にダウンロードします。ただし、BSCのサーバー負荷が高いようで、ダウンロードが途中で止まってしまうことが度々ありました。そのため、必用なパッケージを事前にダウンロードして、マニュアル (rpm -ivh パッケージ名) でインストールするのがよいと思われます。また、インストールスクリプトはCellのシミュレーターもインストールするようになっていますが、PS3ではメモリー不足のため動作しないと思うためインストールの対象外にします。Cellシミュレーターは別途インストールするPC Linux上でのクロス開発環境で使用します。

それでは、以下のパッケージをインストールします。必用なパッケージを/tmp/cellsdk-2.1ディレクトリーにコピーしておいて、rpm -ivh * コマンドを使用してひとまとめにインストールします。

<BSCからダウンロードするパッケージ>
・GNU Toolchain for SPU
spu-binutils-2.17.50-8.ppc.rpm
spu-gcc-4.1.1-9.ppc.rpm
spu-gcc-c++-4.1.1-9.ppc.rpm
spu-gdb-6.6-12.i686.rpm
spu-newlib-1.15.0-7.ppc.rpm
・SPE Runtime Lib v1.2 (deprecated)
libspe-1.2.2-0.ppc64.rpm
libspe-1.2.2-0.ppc.rpm
libspe-devel-1.2.2-0.ppc64.rpm
libspe-devel-1.2.2-0.ppc.rpm
・SPE Runtime Lib v2.1
elfspe2-2.1.0-0.ppc.rpm
libspe2-2.1.0-0.ppc64.rpm
libspe2-2.1.0-0.ppc.rpm
libspe2-devel-2.1.0-0.ppc64.rpm
libspe2-devel-2.1.0-0.ppc.rpm

<SDK2.1のisoイメージに添付>
・SIMD math library
simdmath-2.1-1.ppc.rpm
simdman-2.1-1.noarch.rpm
spu-simdmath-2.1-1.ppc.rpm 
・MASS library
ppu-mass.lib-4.4.0-20.ppc64.rpm
ppu-mass.lib-4.4.0-20.ppc.rpm
spu-mass.lib-4.4.0-20.ppc.rpm 
・Prototype libraries and samples package
cell-sdk-lib-samples-2.1-2.noarch.rpm
・ALF library
cell-alf-2.1-2.noarch.rpm
・Tool
cell-spu-timing-2.1-1.ppc.rpm
fdprpro-5.4.0-8.ppc.rpm

GNU Toolchain for PPUはYDL5のデフォルトでインストールされるモジュールをそのまま使います。

パッケージのインストールが完了したら、SDK2.1 isoイメージの/sofware/cellsdk  をPS3 Linuxの/opt/ibm/cell-sdk/prototype にコピーし、以下のコマンドを実行します。

# /opt/ibm/cell-sdk/prototype/cellsdk verify

IBM Cell System Simulator:
  systemsim-cell-2.1-10.ppc64 ...  missing

Cell System Simulator System Image:
  sysroot_image-2.1-8.noarch ...  missing

GNU Compiler Toolchain:
  spu-newlib-1.15.0-7.ppc ...  found
  spu-gcc-c++-4.1.1-9.ppc ...  found
  spu-gcc-4.1.1-9.ppc ...  found
  spu-binutils-2.17.50-8.ppc ...  found
  spu-gdb-6.6-12.ppc ...  found
  ppu-gcc-c++-4.1.1-10.ppc ...  found
  ppu-gcc-4.1.1-10.ppc ...  found
  ppu-gdb-6.6-15.ppc ...  found
  ppu-binutils-2.17.50-8.ppc ...  found

IBM XL C/C++ Compilers:
  xlc.lib-8.2.0-20.ppc64 ...  missing
  xlc.cmp-8.2.0-20.ppc64 ...  missing
  xlcpp.lib-8.2.0-20.ppc64 ...  missing
  xlcpp.cmp-8.2.0-20.ppc64 ...  missing
  xlcpp.help-8.2.0-20.ppc64 ...  missing

IBM Cell Prototype Libraries and Samples:
  cell-sdk-lib-samples-2.1-2.noarch ...  found
  cell-alf-2.1-2.noarch ...  found

Cell Libraries:
  libspe2-2.1.0-0.ppc ...  found
  libspe2-devel-2.1.0-0.ppc ...  found
  libspe-1.2.2-0.ppc ...  found
  libspe-devel-1.2.2-0.ppc ...  found
  libspe2man-2.1.0-1.noarch ...  found
  simdmath-2.1-1.ppc ...  found
  simdman-2.1-1.noarch ...  found
  ppu-mass.lib-4.4.0-20.ppc ...  found
  spu-mass.lib-4.4.0-20.ppc ...  found
  spu-simdmath-2.1-1.ppc ...  found
  libspe2-2.1.0-0.ppc64 ...  found
  libspe2-devel-2.1.0-0.ppc64 ...  found
  libspe-1.2.2-0.ppc64 ...  found
  libspe-devel-1.2.2-0.ppc64 ...  found
  ppu-mass.lib-4.4.0-20.ppc64 ...  found

Cell FDPR-PRO Utility:
  fdprpro-5.4.0-8_20070226.ppc ...  found

IBM Cell SPU Timing Utility:
  cell-spu-timing-2.1-1.ppc ...  found

INSTALLATION SUMMARY
==============================================================================
IBM Cell System Simulator        : Not Installed  (0 of 1 found)
Cell System Simulator System Image : Not Installed   (0 of 1 found)
GNU Compiler Toolchain         : Installed     (9 of 9 found)
IBM XL C/C++ Compilers                  : Not Installed  (0 of 5 found)
IBM Cell Prototype Libraries and Samples: Installed   (2 of 2 found)
Cell Libraries                : Installed     (15 of 15 found)
Cell FDPR-PRO Utility          : Installed     (1 of 1 found)
IBM Cell SPU Timing Utility        : Installed    (1 of 1 found)

Cell System SimulatorとIBM XL C/C++ Compilersはインストールしていませんので、それ以外がInstalledと表示されればインストール完了です。

動作テスト

SDK付属のsampleプログラムをビルドしてみます。以下のコマンドを入力してエラーが発生せずビルドが終了すれば動作OKです。

# /opt/ibm/cell-sdk/prototype/cellsdk build

長々と手順を記載しましたが、これで最新のCell開発環境がインストールできました。これだけの開発環境が無償で手にはいるのはすばらしいことです。また、SDKのisoイメージでは膨大な量のドキュメントが収録されいます(全部英語ですが、、)。

| | コメント (2)

Yellow Dog Linux 5.0 (YDL5) をPS3にインストール

前回のブログ投稿に引き続き、今回はYDL5インストールのお題です。YDL5はPS3へのインストールを考慮して構築されているため、PCにLinuxディストリビューションをインストールしたことがある方なら問題なくインストールができます。私が感じたYDL5のメリットは以下です;

  • PS3用のカーネルやドライバーモジュールがディストリビューションに組み込まれており、PS3固有デバイスの設定が不要
  • GUIベースのインストーラーが付属
  • インストール時にインストールパッケージは選べないが、適度なパッケージをデフォルトでインストールしてくれる

インストール作業の概要

インストールの手順はフィックスターズさんのYellow Dog Linux for PS3を参考にしています。インストール用DVD-ROMを作成するためのisoイメージですが、以前はKDDI-LabのFTPサーバーに置いてあったのですが、今チェックするとYDL5のisoイメージはなくなっていました。Googleで海外のミラーサイトを検索したところ、いくらかダウンロードが可能なサイトがありました。その他の入手方法としては、本を買う必用がありますが、インプレスから出ているPLAYSTATION3 Linux完全攻略ガイドにDVD-ROMがついてきます。この本は、フィックスターズさんのwebサイトにある記事を半分くらい流用していますが興味のある方は買っても損はないと思います。

(2005/5/5追記) Fedora Coreをインストールするためには、アドオンCDが必要になりますがYDL5の場合は不要です。

使ってみて

インストール後はgdmが起動してX Windowsも問題なく動作します。PS3でLinuxが普通に動作して、Cell開発環境を導入すればLinux上でCellを使用した並列プログラミングの体験ができることは、私のようなLinuxインストールおたく(インストールまではOKだが、その後の使いこなしが今一歩、、)にとっては画期的な出来事です。
標準でCell SDK 1.1がインストールされますが、最新のCell SDK 2.1をインストールするためにはCell SDK 1.1は削除する必用があります。Cell SDK 2.1のインストールは別途投稿します。

ではLinuxマシンとして実用的かと言うと今一歩と言わざるおえません。インストール前から想定していたのですが、PS3のメインメモリー256MB(OSやアプリケーションが使用できる領域は200MB程度です)がLinuxマシンとしては決定的な制約となります。Firefoxを使ってwebを閲覧する程度ならなんとかなりますが(こちらはXMBのブラウザーより軽快かも)、Eclipse統合開発環境のようなJavaをバリバリ使ったメモリー喰いのアプリケーションではswapの嵐となり使い物になりません。また既に言われていることですが、Cellのスカラー演算(普通のCPUとして使用する演算)性能は、Pentium4やCore2より劣るため全体的に軽快感に欠けます。例えば、パッケージを大量にインストールする際の依存性チェック(diskアクセスはないのでswapは起きていないと思います)の時間が、Pentium4 530 3.0GのMy PCに比べて体感的に2倍程度かかるように思えます。ですので、実用的なLinux環境を構築するならメモリーを1GB積んだPentium4 or Core2搭載PCを用意する方がよいです。

とはいえ、繰り返しになりますが、Cellを使った並列プログラミングの醍醐味はPCでは味わえません。リベンジとして、SPEでのSIMD/並列化を駆使した演算で、少なくともMy PCのPentium4はぶち抜ける性能を出せることを確認してみたいと思っています。

トラブル対策

YDL5のインストールで遭遇した問題点2点の対応策を下記します。

1. SCIMの依存性チェック問題

YDL5に同梱されているSCIM(日本語入力関係のパッケージ)にはlibstdc++との依存性チェックに問題があります。標準で自動的にSCIMがインストールされますが、その後yum updateでパッケージのアップデートを行うと以下のエラーが表示されupdateが止まってしまいます。

Error: Missing Dependency: libstdc++-20060428.so.7(GLIBCXX_4.2) is needed by package scim
Error: Missing Dependency: libstdc++-20060428.so.7(CXXABI_1.4) is needed by package scim

私は、yum updateを一括で行うために(excludeという技があることを知らず)、scimを一旦削除したら今度は上記のエラーでインストールができなくなってしまいました。やっぱり日本語入力が使えないと不便なのでこれは何とかしないといけません。
YDL5のインストールDVDに添付されているのはscim-1.4.4-9.7.fc5.ppc.rpmとなっており、FC5(Ferora Core5)のパッケージをそのまま流用しているようです。FC5のupdateサーバーを調べるとscim-1.4.4-9.8.fc5.ppc.rpmが公開されています。ということで、最新版のscimをダウンロードしてインストールしてみます。

# rpm -ivh scim-1.4.4-9.8.fc5.ppc.rpm
 準備中...                ########################################### [100%]
 1:scim                   ########################################### [100%]
# rpm -ivh scim-anthy-1.2.2-1.fc5.ppc.rpm
 準備中...                ########################################### [100%]
 1:scim-anthy          ########################################### [100%]

今度はうまくいきました。日本語入力の動作も、(数行程度入力しただけですが)問題ないようです。

2. kbootでportmapのtimeout errorが発生する

同一ネットワーク上にnfsが動いている他のLinuxマシンが存在すると、kbootのプロンプトが出る直前に以下のtimeoutメッセージが数回繰り返され起動に時間がかかってしまいます。

portmap:  server localhost not responding, timeout
RPC:  faild to connect portmap (errno -5)

起動時の問題なので、kboot(ブートローダー)に問題があるようです。PS3用のkbootには、 YDLのサポートサイトで公開されているotheros.bldと、Sony PS3 Linuxのftpサイトで公開されているアドオンCDに添付のものがあります。YDL5のインストールには前者が必用なのですが、インストール後はkbootを後者に入れ替えても問題なく起動できます。kbootを後者に入れ替えると、問題のtimeoutは発生しなくなりました。またkbootのプロンプトが出るまでの時間も、まわりでnfsが動いていない条件で比較して若干短くなったように思えます。

3. 追記(2007/5/5)

yumの設定で注意点があることが分かりました。PS3用にビルドされたkernelなどPS3専用パッケージがyum updateで更新されないように、/etc/yum.confに以下の設定を追加しました。

exclude=kernel-*, glibc-kernheaders-*, kernel-headers-*, kexec-tools-*, spu-*

| | コメント (1)

Fedora Core 6 (FC6) をPS3にインストール

PS3にインストールできるLinux (当然PPC版ですが)は、Yellow Dog Linux (YDL) とFedora Core (FC) があります。

元々My PS3にはYDL5.0がインストールしてあったのですが、次の点が不満で、FC6をインストールしてみました。

  1. IBMが配布しているCell SDK 2.1は、FC6を前提に構築されており、libspe2, spu-gccなどYDL5.1にインストールしようとすると、rpmパッケージの依存性チェックでエラーとなりインストールできない。どうも、FC6で使用しているglibc2.5が必用な模様(YDL5.1はglibc2.4を使用)
  2. YDLはFCに比べてyumで追加インストールできるパッケージの種類が少ない

インストールの方法は、フィックスターズさんのPS3 Linuxのインストールサイトを参考にしました(このサイトは色々な情報があって重宝します)。結果は以下のように惨敗となり、結局はYDL5.0に戻すことになりました。YDL5.0のインストールは次回のネタとしまして、今日はFC6インストールの顛末を書きます。

(2007/5/5更新) PS3 Linuxのインストールには、Sony PS3 Linuxのftpサイトで公開されているアドオンCDが必要です。私がFC6インストールに使用したのは20061208バージョンでした。最新版をチェックしたところ、20070425バージョンが公開されておりました。Readme.txtを見ると、20070425バージョンはFC6に対応していると記載があります。もう少し早く20070425バージョンに気がついていればFC6がインストールができたことになります。残念!!

YDL5.0に比べるとインストーラーが貧弱です
カーネルがブートできる最小限の構成で開発環境・X Windowsなど一切インストールされないminimun installか、インストール後のディスク占有量が9GB超にもなるfull installのどちらかしか選べません(10GBのHDD区画を確保しても空き容量が0になってしまいます)。
先ずは、full installしてから不要なパッケージを削る方針で作業をはじめましたが、full installに3時間ちょっとかかりました。削除はyum groupremoveコマンドに以下のgroup名を指定してやるとgroup単位で削除ができてらくちんです。
   Office/Productivity
  Authoring and Publishing
   Games and Entertainment

FC6に限った話ではなく、PS3 Linixのインストールの速度はは遅いです
My PC (Pentium4 3.0GHz, 1GB memory) では、FC6の標準的なインストール(HDD占有量4GBくらい)は30分強で終了します。想像ですが、PS3はメモリーが256MBしかないため処理が遅くなってしまうと思われます。
ちなみに、yum groupremoveで不要パッケージを削除するのも1時間以上かかりました。

ETH0がupしないぞ
インストールが終了してすぐ気がつくのが、イーサネットインタフェース (ETH0) がupしないことです。ifup eth0を実行してもデバイスが存在しない旨のエラーが返ってきます。ifconfigを実行すると確かにloしか見えません。dhclientを実行するとIPアドレスは取得できちゃいます。後で気がついたのですが、ネットワークドライバが正しく認識されていないのが原因だと思われます。PS3のネットワークドライバは、"Gelic Network Driver"と呼ばれるモジュールですが、/etc/modprobe.confに以下の行を加えることでインタフェースを認識してくれる筈です(環境を壊してしまったので確認できないのですが)。
   alias eth0 Gelic Network Driver

X Windowsが正しく起動しない
system-config-displayがスクリプトエラーを吐いて動かないのでいやな予感がしつつ、startxでX Windowsを起動すると画面がぐちゃぐちゃです。ディスプレー・ドライバーがまともに動いていない感じです。xorg.confを眺めてみると、
  Driver      "fbdev"
となっており、ドライバーの指定は問題なさそう。Section "Module"にOpenGL関係と思われる以下の設定があるのでコメントアウトして再度起動。
   #Load   "dri"
   #Load   "glx"
やはり状況は変わりません。xserverの起動ログを見ると致命的なエラーは吐いていません。xorg.confを確認するとコメントアウトした行が元に戻っているではありませんか! これはちょっとお手上げです、、、

かくなるうえはカーネルの再構築か
FC6はkernel-2.6.20をベースに構築されています。また、FC6と一緒に配布されているppc用のkernelはPS3用の固有ハードサポートを有効にした形でビルドされておらずPS3用に使用することはできません。
PS3用のkernelはPS3固有ハードのサポートが組み込まれた、Sony PS3 Linuxのftpサイトで配布されているアドオンCDのkernal imageをインストールします(インストーラーがアドオンCDを要求して自動的にインストールを実行)。アドオンCDのkernelは2.6.16 (FC5時代のkernel) となっています。また、YDL5.0はFC5をベースに構築されています。このため、FC5やYDL5.0はPS3用kernelと相性がよいのですが、FC6とPS3用のkernel (FC5時代の版) は相性が悪いようです 。
PS3用のkernelコードは公開されているので、かくなるうえはkernel-2.6.20のソースからPS3用kernel-2.6.20をビルドするかとも考えたのですが今回は力尽きました。何せ連休中にプログラム開発環境まで作るのが目標ですから。

ということで、一日がかりで取り組んだFC6インストールは結局廃棄してYDLに戻ることになりました。YDL5.0のインストール記録は明日にでもアップします。

(2007/5/5追記) 冒頭にも記載しましたが、アドオンCD 20070425バージョンが公開されています。最新アドオンCDを使用すればX Windowsの問題も解消するはずです(アドオンCDのChanges-j.txtにもFC6をインストールした際に X Window が使えない不具合を修正したと記載があります)。FC6で再度環境を構築したいところですが、インストール4時間コースを再度行うのも億劫なのでまたの機会にトライします。

| | コメント (0)

ブログ開設

みなさまはじめまして、todotani(とど谷)です。

最近PlayStation3 (PS3)のLinuxに少々はまっております。あれこれ試したことをメモとしてこのブログに公開したいと思います。本職はIPネットワークのSEでして、本格的なCのプログラミングはやったことがないのですが、以下のメニューに挑戦予定です。連休中に基本的な環境を作るとこるまでが目標です。

  • 何はともあれPS3用Linuxのインストール
  • PS3 Linux用のCell SDK 2.1のインストール
  • PC (Intel CPU)用LinuxにCell SDKをインストール(クロス開発環境の構築)
  • CellとPentium4の性能比較
  • などなど、、

| | コメント (0)