Drowsy Dog's Diary

any note, any thought

2013年4月23日
by kazoo
0 comments

glxinfo – 3Dアクセラレーションの確認

ふわふわしたメモ

懇意にしていただいている とあるクラウド屋さんに、OpenGL 的に重い処理をクラウド側でやるのでグラフィックボードを乗っけてくれないかとお願いをしたところ、こころよく OK をいただき、セッティングしてくれた。
(X を立ち上げるのでクラウドだけど起動時モニター繋いでもらうとかいろいろめんどい。感謝)
処理内容は GLUT で描画された 3D 画像を何万フレームも書き出して、最後にそれを動画にエンコードするようなもの。

で、繋いでもらったはいいけど速度以外にどうやってアクセラレーションされてるかどうかを確認すればいいんだろう、というメモ。
ふわふわなので突っ込み歓迎です。

glxinfo をつかう

glxinfo は使われている libGL のバージョンやドライバの情報を調べるプログラム。

とすれば、

OpenGL vendor string: Intel Inc.
OpenGL renderer string: Intel HD Graphics 3000 OpenGL Engine
OpenGL version string: 2.1 APPLE-7.32.12
OpenGL shading language version string: 1.20
….
みたいな情報が確認できる(MacbookAir の場合)。

んで、そのクラウド環境では、

OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: Quadro 4000/PCIe/SSE2
OpenGL version string: 4.3.0 NVIDIA 310.44

とかになる。ちゃんと NVIDIA のドライバが Quadro ハードウェアを動かしてることがわかる。
同じサーバで VNC 環境になっている display:1 を見ると、

OpenGL vendor string: Mesa project: www.mesa3d.org
OpenGL renderer string: Mesa GLX Indirect
OpenGL version string: 1.2 (1.5 Mesa 6.5.1)

こちらではアクセラレーションなしのレンダリングが行われる。

あと、描画を行っているプロセスの、/proc/{PROCID}/maps を見て libGL.so をリンクしているかどうか?も目安になるらしいが、これだと VNC 環境でもリンクされていたので確証なし。。

2013年4月23日
by kazoo
2 Comments

macdeployqt – Qt for mac の配布パッケージ作成

QtCreator (2.5.0 + Qt 4.8.1 LGPL)で、ビルドした Mac 用アプリを配布するとき、
Xxxx.app パッケージを直接渡すのではなく、macdeployqt コマンドを使って

と、してやる。
配布に必要なライブラリ一式がコピーされ、ディスクイメージを作成してくれる。

また、アプリが起動ディレクトリのデータを必要とする場合、デバッグ時には Sample.app/Contents/MacOS/ 下に作成されたLoadModule と同じ階層にデータが必要だが、配布後は、Sample.app/Contents/MacOS/ 下のデータは参照されない。
配布後のデータは、配布物を展開したディレクトリ (Sample.app) が起動ディレクトリとなるため、配布物を展開したディレクトリ (Sample.app) に配置する必要がある。

2013年4月11日
by kazoo
0 comments

launchd.plistの書き方

AppStore のデイリー DL 数の取得スクリプトを CentOS の crond で走らせていたのですが、これを Mac 環境に移すことになり、crontab じゃなくてちゃんと launchd でやってみることにしました。

「(Tiger以降の)Mac では crond じゃなく launchd で」というのは聞いた事はあったのですが、そもそもこれが何なのかよくわかっていなかった。launchd が UNIX の init にあたる pid=1 のプロセスなのですね。各種プロセス・デーモンはこいつの子プロセスとして実行される。crontab の定期実行は launchd から起動されるし、イベントの監視や、inetd/xinetd の代わりにネットワークの監視もこいつが行ってくれる。
なるほど。

で、この launchd の設定ファイルが launchd.plist と呼ばれる各種 XML ファイルであり、
以下のようにファイルシステムドメインごとのディレクトリにそれぞれ存在する。1ファイルごとに1サービスの設定となる。

  • /System/Library/LaunchAgents/
  • /System/Library/LaunchDaemons/
  • /Library/LaunchAgents/
  • /Library/LaunchDaemons/
  • ~/Library/LaunchAgents/

LaunchDaemons ディレクトリにあるのはいわゆるデーモンであり、root権限で走る。(なのでユーザディレクトリには存在しない)。デーモンはログイン状態に関わらず動作する。
LaunchAgents ディレクトリにあるのはエージェントと呼ばれ、ログインしているユーザごとに起動されるプロセスである。全員共通で起動するものを /Library の方に、特定ユーザのみで動作するものを ~/Library の方に書けばよい。
/System/Library/Launch* は基本的に触らない(ハズ)。

launchd.plist はプロパティリストというルールで記述されたXML。
たとえば Adobe のアップデータはこんな感じ。

~/Library/LaunchAgents/com.adobe.AAM.Updater-1.0.plist

主要なキー一覧はこちらの表の通り。

dict タグは key タグで囲まれた要素をキーとし、その直後のタグ要素を値とする連想配列を表す。
Label と ProgramArguments のみ必須キーとなっている。

ProgramArguments は最初の配列要素が実行するプログラムのパス、以降が引数となる。
たとえば特定の ruby プログラムを 出力ディレクトリを引数に
$ ruby ~/workspace/test.rb ~/tmp/outdir
というような呼び出しをしたいとすると、

みたいな感じ。

また、StartCalendarInterval キーは、それに続く連想配列のキー Minute, Hour, Day, WeekDay(0が日曜日), Month の組み合わせで繰り返しが指定できる。Adobe の例ではこのエージェントは毎日 02:00 に実行されることになる。
crond の場合、マシンがスリープしていると実行はスキップされるが、launchd はその復帰時に実行される(複数回の実行が溜まったときは1回だけ実行される)。
また、カレンダー指定でなく単純に時間おきにインターバル実行させたいときは、

のように書くと、60秒毎に実行されるエージェント or デーモンとなる。

標準出力ログを取りたい場合は、StandardOutPath キーでファイルパスを指定してやればよい。
これを指定しなければ、/var/log/system.log にログが書かれるらしいので、それを回避したければ、

と、してやる。

最後に、設定ファイルが記述できたら launchctrl コマンドを使ってシステムにロードしてあげましょう。

このとき、OnDemand キーが true になっていると、ロード時にまず1度実行(デーモンなら最初に1度、エージェントならログインのたびに)される。

また、設定を変更したときは、一度 launchctrl unload してから再度 load する必要があるので注意!

参考:
http://www.itmedia.co.jp/enterprise/articles/0704/26/news009.html
http://www.itmedia.co.jp/enterprise/articles/0704/29/news004.html

2013年4月10日
by kazoo
2 Comments

OS X Lionのrbenv環境でruby-2.0.0-p0への更新メモ

Cookpad がさっそく ruby-2.0.0-p0 へ移行なんてカッコイイニュースも流れる昨今。
新しいことはよいことです。速さは正義です。

ということで特に必要に迫られてはないけど 2.0.0-p0 の導入をやってみた。
普通に $ rbenv install するだけですが、MacbookAir にはあっさり入ったのだけど、放置気味の iMac(Lion) でやったら、いくつかつまずいた。ので過程をメモっておきます。
どなたかのトラブルシュートになれば。

現行は 1.9.3-p194。homebrew で入れた rbenv + ruby-build 環境の前提です。
>>>続きを読む