2007年3月9日の日記を表示中

2007年 3月 9日 (金)

ThinkPad T60 -Mobility Radeon X1300編-

一段落したので本格的にいじり始めたぞ! mkinitrdをいれたんですが,なんかできたinitrdがまずかったか,起動時にSATA関連のドライバを呼んでくれずpanicのまま.起動しないと何もできないので,ひとまず静的に組み込んで逃げちゃいました./etc/modprobe.confに問題ありな予感ですが,何をどう書けばいいのかよくわからん・・・.そのうち何とかしよう.

で,ちゃんとLinuxが起動するようになったんで,Xの設定を開始.今まで使っていたT42はMobility Radeon 7500なるチップを積んでたんで,ATIの配布してるドライバ(fglrx)が使えず3Dパフォーマンスが本来のチップ性能に比べてかなりしょんぼりな感じだったんですが,今回の2623-M3EはMobility Radeon X1300なんか積んでたりして,普通にfglrxが使える模様.これは入れないわけにはいかんでしょうというわけで,早速ATIのページからドライバをダウンロード.何かXorg-7.1までしか対応していなさそうなことが書いてありましたが,気にしない方向で.

「sh ~/ati-driver-installer-8.34.8-x86.x86_64.run --extract ati-driver-installer-8.34.8」とかやって開いてみると,謎のスクリプトがやたらといっぱい出てきますな.びびりつつもディレクトリの下を漁ってみると,必要そうなものは大体そのまんまの形で置いてある模様(x710,arch/x86,common/usr/X11R6,common/usr/include/GL にあるファイルあたり).ビルドしなきゃならないのはカーネルモジュールくらいですかねー.まずはXOrg-7.2の各種ファイルの配置を参考にファイルをコピー (xorg-serverを「--prefix=/usr/local --with-dri-driver-path=/usr/local/lib/xorg/modules/dri」とかつけてconfigureして入れてるんで,パスは普通とだいぶ違うかも).

# libGL.so.1.2 は上書きしてしまえ
cp arch/x86/usr/X11R6/lib/*.so.* /usr/local/lib
cp arch/x86/usr/X11R6/lib/*.a /usr/local/lib

cp common/usr/X11R6/include/X11/extensions/fglrx_gamma.h \
  /usr/local/include/X11/extensions

cp common/usr/include/GL/*.h \
  /usr/local/include/GL

cp arch/x86/usr/X11R6/lib/modules/dri/fglrx_dri.so \
  /usr/local/lib/xorg/modules/dri

cp x710/usr/X11R6/lib/modules/drivers/fglrx_drv.so \
 /usr/local/lib/xorg/modules/drivers

cp x710/usr/X11R6/lib/modules/linux/libfglrxdrm.so \
 /usr/local/lib/xorg/modules/linux

で,これでxorg.confのドライバを「fglrx」に書き換えてstartxしてやったら無事Xが上がったんですが・・・何か3Dアクセラレーションがまったく効いてません(;´д`).Titanionが激重.Xorg.0.logを見てみると・・・

(EE) AIGLX error: dlopen of /usr/local/lib/xorg/modules/dri/fglrx_dri.so failed
(/usr/local/lib/xorg/modules/dri/fglrx_dri.so: undefined symbol: __glXFindDRIScreen)
(EE) AIGLX: reverting to software rendering

(´・ω・`). 調べたらこの辺にヒントが.あー,libGL.soのリンク張り直し忘れてるだけでした.

ln -fs libGL.so.1.2 /usr/local/lib/libGL.so.1
ln -fs libGL.so.1 /usr/local/lib/libGL.so

再挑戦.まだ重い・・・.今度はこんなメッセージがログに出とります(´・ω・`)

(EE) AIGLX error: dlsym for __driCreateNewScreen_20050727 failed 
(/usr/lib/dri/fglrx_dri.so: undefined symbol: __driCreateNewScreen_20050727)
(EE) AIGLX: reverting to software rendering

なんかATIのドライバはAIGLXなるやつに対応していないらしい? ここを参考に以下のようにxorg.confに書き足してAIGLXを切ってみました.

Section "ServerFlags"
        Option      "AIGLX" "off"
EndSection
Section "Extensions"
        Option      "Composite" "Disable"
EndSection

が,まだだめ.まったく3Dアクセラレーションが効いてない感じです.うーん.試しにドライバについてきたfglrxinfoを実行してみると・・・

% LD_LIBRARY_PATH=/usr/local/lib ./arch/x86/usr/X11R6/bin/fglrxinfo
display: :0.0  screen: 0
OpenGL vendor string: Mesa project: www.mesa3d.org
OpenGL renderer string: Mesa GLX Indirect
OpenGL version string: 1.4 (1.5 Mesa 6.5.2)

どうみてもMesaです.本(ry _|‾|○ でも何が悪いのかさっぱり・・・.ググってたら LIBGL_DEBUG環境変数を「verbose」とかに設定しとくと詳細が出てくるとの情報が.

% LIBGL_DEBUG=verbose LD_LIBRARY_PATH=/usr/local/lib arch/x86/usr/X11R6/bin/fglrxinfo
libGL: XF86DRIGetClientDriverName: 8.34.8 fglrx (screen 0)
libGL: OpenDriver: trying /usr/X11R6/lib/modules/dri/fglrx_dri.so
libGL error: dlopen /usr/X11R6/lib/modules/dri/fglrx_dri.so failed (/usr/X11R6/lib/modules/dri/fglrx_dri.so: cannot open shared object file: No such file or directory)
libGL error: unable to find driver: fglrx_dri.so
libGL: XF86DRIGetClientDriverName: 8.34.8 fglrx (screen 0)
libGL: OpenDriver: trying /usr/X11R6/lib/modules/dri/fglrx_dri.so
libGL error: dlopen /usr/X11R6/lib/modules/dri/fglrx_dri.so failed (/usr/X11R6/lib/modules/dri/fglrx_dri.so: cannot open shared object file: No such file or directory)
libGL error: unable to find driver: fglrx_dri.so
display: :0.0  screen: 0
OpenGL vendor string: Mesa project: www.mesa3d.org
OpenGL renderer string: Mesa GLX Indirect
OpenGL version string: 1.4 (1.5 Mesa 6.5.2)

/usr/X11R6/lib キタ━━━(゜∀゜)━( ゜∀)━(  ゜)━(  )━(  )━(`  )━(A` )━('A`)━━━!! そんなディレクトリありませんから!・・・なんでこんなところ見るんじゃこいつは・・・.もしや・・・libGL.so.1.2をstringしてみると・・・

% strings /usr/local/lib/libGL.so | grep X11R6
/usr/X11R6/lib/modules/dri

どう見ても生パスです. /usr/X11R6/lib/modules/dri を掘って,そこにfglrx_dri.so コピーしたら,fglrxinfo の結果が無事変わってくれました.はぁ.

% LD_LIBRARY_PATH=/usr/local/lib arch/x86/usr/X11R6/bin/fglrxinfo display: :0.0  screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: ATI Mobility Radeon X1300
OpenGL version string: 2.0.6334 (8.34.8)

さて,こやつはどうしてくれよう・・・.libGL.so.1.2 をバイナリエディタで直接書き換えて「/usr/X11R6/lib/modules/dri」を「/usr/local/lib/xorg/modules/dri」にすればいいんじゃね?と思ったんですが,後者の方が長いから無理だし.とりあえず後回しでいいや.で,今度こそ!という感じでTitanionを実行してみると・・・こんどは以下のようなメッセージがどばどばと吐き出され,違った重さが(;´д`)

FGLTexMgr: open of shared memory object failed (Function not implemented)
__FGLTexMgrCreateObject: __FGLTexMgrSHMmalloc failed!!!

なんじゃこりゃー! 調べてみたらここに答えがありました./dev/shm を掘って,「mount -t tmpfs tmpfs /dev/shm」とやってマウントしてやったところ,ついに Titanionが滑らかに動くように! うわーい.

[コメントを書く]

nosuke 2007/03/10(土) 16:50:47
Mesaのソース読んだら瞬時に解決
export LIBGL_DRIVERS_DIR=/usr/local/lib/xorg/modules/dri
でいけるっぽいっす.いやっほぅ

ThinkPad T60 -82573L編-

で,Xはひとまずカタがついたので,次はEthernet.GWAをはじめとするT60でLinuxを使ってる周囲のユーザ曰く「ハブによってはレイテンシがでかくなってはまる」とのこと.ちょっと使った感じではそんな気がしなかったんで,「変にカーネルがチューニングされたディストリビューション使ってるのが悪いんじゃないの m9(^Д^)」とか思ってたんですが,家のハブでT42からSSHでつないで作業してたらなんかやたらと引っ掛かかる・・・.もしやと思い外からpingを打ってみたら,自分の環境でもとんでもなく遅くなることが判明・・・.これはひどいレイテンシですね(;´д`)

% ping 192.168.0.4
PING 192.168.0.4 (192.168.0.4): 56 data bytes
64 bytes from 192.168.0.4: icmp_seq=0 ttl=64 time=1000.067 ms
64 bytes from 192.168.0.4: icmp_seq=1 ttl=64 time=1.225 ms
64 bytes from 192.168.0.4: icmp_seq=2 ttl=64 time=1000.083 ms
64 bytes from 192.168.0.4: icmp_seq=3 ttl=64 time=0.335 ms
64 bytes from 192.168.0.4: icmp_seq=4 ttl=64 time=1000.262 ms
64 bytes from 192.168.0.4: icmp_seq=5 ttl=64 time=0.472 ms

さて,どうしてくれようという感じですが,GWA曰く,何かドライバのパラメータをチューニングするとマシになるとか.何いじるかちゃんと聞いときゃよかったなー.仕方ないのでググってみたら CONFIG_IRQBALANCEを外せ との情報が.ふーん,よくわかんないけどフレーム受信時の割り込みを交互に2コアに割り振るのをやめるとかそういう感じ?確かにそれなら効きそうかも・・・って全然効いてねー(;´д`)

% ping 192.168.0.4
PING 192.168.0.4 (192.168.0.4): 56 data bytes
64 bytes from 192.168.0.4: icmp_seq=0 ttl=64 time=206.484 ms
64 bytes from 192.168.0.4: icmp_seq=1 ttl=64 time=1000.491 ms
64 bytes from 192.168.0.4: icmp_seq=2 ttl=64 time=0.693 ms
64 bytes from 192.168.0.4: icmp_seq=3 ttl=64 time=1000.627 ms
64 bytes from 192.168.0.4: icmp_seq=4 ttl=64 time=0.827 ms
64 bytes from 192.168.0.4: icmp_seq=5 ttl=64 time=1000.767 ms

Intelから最新のe1000のドライバ落としてビルドしていれてみてもダメ,e1000のNAPIを有効化してもダメ.うーん,どうしたもんか.で,しつこくググってたらドライバのパラメータの設定に関する情報が出てきました.あー,多分GWAが言ってたのはこれだなー.試しに「modprobe e1000 RxIntDelay=32」して読み込んでやったら大幅改善.

% ping 192.168.0.4
PING 192.168.0.4 (192.168.0.4): 56 data bytes
64 bytes from 192.168.0.4: icmp_seq=0 ttl=64 time=2.805 ms
64 bytes from 192.168.0.4: icmp_seq=1 ttl=64 time=0.311 ms
64 bytes from 192.168.0.4: icmp_seq=2 ttl=64 time=0.877 ms
64 bytes from 192.168.0.4: icmp_seq=3 ttl=64 time=0.445 ms
64 bytes from 192.168.0.4: icmp_seq=4 ttl=64 time=1.018 ms
64 bytes from 192.168.0.4: icmp_seq=5 ttl=64 time=3.044 ms

というわけで /etc/modprobe.conf に「options e1000 RxIntDelay=32」と書き足してひとまず終了.しかしこれ,まわりの話聞くと,Core DuoなT60でも出てるみたいなんで,ずいぶん前からある問題っぽいんですが,みんなどうしてんだろ・・・.

  • sshみたいな秒単位のレスポンスを体感できることをしてないので気づかない
  • ハズレのハブに当たったことがなくて気づかない
  • よくわかんないけどそういうもんだと思って使っている
  • カーネルでSMPを切っている (※これで改善すんのかどうかは未検証っす)
  • はぁ?無線LAN使ってないのお前キモ(ry
  • え?Linux?coLinux使ってるけど普通だよ

次は音だなー.あとdriのパスもどうにかしよう.

RAP2

結局日和ってまだ注文してないし.うううぅ.どうしょぅ・・・.

ドリームキャストタオル

ゲームショップ1983にメガドラ互換コントローラ送ったらオリジナルグッズのDCタオル頂いちゃいました.ありがとうございます.どう改造するのか知りませんが,改造に使えないやつだったらごめんなさい・・・.

ドリキャスタオル

東方

なんか久々に遊んでみました.とりあえず霊夢Bで紅魔郷Normalやってみたらパチュリーで崩れ始めてレミリアで撃沈.アドリブで避けるところは以前より安定してる感じでしたが,誘導とか忘れまくり_|‾|○.妖々夢Phantasmは生と死の境界でミスったのでやめ.一時期あんなに安定していたのに何故・・・.あとは文花帖を少々.超低速を使わず気楽に構えてやると違った楽しさがあっていいですな.

2007年3月9日の日記を表示中

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2007年3月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ