start

Leopardでの仮想メモリの最適化 -考察編-

以前「スワップの最適化」という記事を書きました。この記事はTiger用のものですが、Leopardではどうなのかな?と思い調べてみたところ、。先の記事内容はLeopardには適用できないという事が判明しました。

仮想メモリの管理自体は、Leorpadでもdynamic_pagerを用いて行っているのですが、dynamic_pagerの起動方法が変わったようです。

Tigerでは伝統的なrcスクリプトで起動されていましたが、LeopardではLaunchdで起動するようになっており、/etc/rc自体が無くなっています。

では、Launchd用の設定ファイルはどこにあるかというと、/System/Library/LaunchDaemons/com.apple.dynamic_pager.plistがそれです。このplistの中身を弄ってやればよさそうなのですが、1つひっかかる事があります。暗号化の設定の記述がないのです。

Leopardでは仮想メモリの暗号化(システム環境設定>セキュリティ>一般>安全な仮想メモリを使用)が標準で有効になっています。これはdynamic_pager-Eオプションをつけることで実現しているのだと思いますが、上記plistにはその設定がないのです。

ということは、このplist以外のどこかでオプションの制御を行っている訳で、どうせ書き換えるならそっちの方がいいかな、と思ったりする訳です。/System/Library/〜の方はマスターっぽい感じがするので、出来るだけ書き換えたくはありません。

現状で判明しているのはここまでです。目下、最適な設定方法を調査中です。

LeopardのCore Audio

LeopardはCore Audioにも色々と手が入ったようです。分かった範囲で変更点を書いて行きます。

Audio Unit関連

  • Effectに「Distortion」「RogerBeep」が追加。
  • Mixerに「MultiChannelMixer」が追加。
  • Pannerに「SphericalHeadPanner」「VectorPanner」「SoundFieldPanner」「HRTFPanner」が追加。ちなみに、これらは以前は3DMixerのSpatialization algorithmパラメータとして設定していたもの。グラフィカルなビューもついて面白そうなAUになっている。
  • 「AudioFilePlayer」「NetSend」「NetReceive」のUIが日本語化!!

API関連

  • 「Audio Codec Services」なるものが登場。
  • 「Audio File Stream Services」なるものが登場。
  • 「Audio Queue Services」なるものが登場。
  • 「FireWire Audio User Library Framework」なるものが登場。
  • NSSoundが強化。

Leopard/Tiger/Windows XPのトリプルブート

Leopardが届いたので早速インストールしました。Windowsは当然の事ながら、Tigerも何かあったとき用に入れたので、Leopard/Tiger/Windows XPのトリプルブート環境と相成りました。パーティション視点で見ると、そこにホームディレクトリ用のパーティションも作ったので、合計4つになりました。

やり方は至って簡単で、まずはLeopardのインストールディスクで起動し、ディスクユーティリティでパーティションを以下のように分けます。容量はどうでもいいのですが、重要なのはWindows用のパーティションは3つ目以前に置くということです。

パーティション名 容量 ファイルシステム
Leopard 40GBMac OS 拡張(大文字/小文字を区別、ジャーナリング)
Tiger 8GBMac OS 拡張(大文字/小文字を区別、ジャーナリング)
Windows 25GBMS-DOS(FAT)
Home 75.48GBMac OS 拡張(大文字/小文字を区別、ジャーナリング)

そして、Windows→Tiger→Leopardの順にインストールして行くだけです。

ちょっと変わった事と言えば、ここで使ったWindows XPはアップグレード版という事でしょうか。アップグレード版だとインストール中に、以前のWindowsのディスクの確認が入ります。なので、インストール中ディスクを取り出せないMacでは通常使う事が出来ません。

ところが、USB接続のドライブに旧Windowsのディスクを入れておけば、このチェックを無事通過出来たりします。そのままUSBのドライブからインストールできれば一番なのですが、それは確か無理だったと思います(曖昧な記憶ですが)。

アップグレード版しか持ってねーよヽ(`Д´)ノという方は、是非試してみてください。

さてさて、肝心のLeopardですが、噂に違わず動作がキビキビしてていいですね。Stacksも大変素晴らしうございます。プログラミング的視点からは、Core AudioにAudio Queue ServiceやらAudio File Streame Serviceやら強そうなサービスが追加されてたり、NSSoundが何げに強化されてたりと、wktkものです。

一方、色々と変わっている所もあり、戸惑うことがままあります。今のところ、AFPでマウントしたディレクトリのFinderからの辿り方が分からない(Tigerのようにサイドバーにマウントボリュームが表示されない)、サイドバーの共有に表示されるAFPサーバに接続できない(接続に使うユーザー名などの変更の仕方がわからない)の2点が一番の問題点でしょうか……。目下、解決方法を調査中です。

あと微妙に、日本語変換が不安定な気がします。入力中に突然重くなり、復帰したと思ったら、「ひらがな」が選択されているにも拘らず、かな変換されなくなってしまう症状にしばしば遭遇しました。

egbridge Universal使いだったりするのですが、無印はおろか2でさえも微妙に問題があるようなので、そのまま無印を入れるか、あるいは今後の更新に期待して2を買うか微妙なところです。まぁ、買うにしても2ヶ月ほど先になりそうですけど……。流石に今月はお金を使いすぎました。

Leopardが生協で8800円だった

こないだLeopardのアカデミック版は13400円と書きましたが、大学生協だと8800円で買える模様。私が学校の生協に聞いたら、生協の人はセンターっぽい所に問い合わせ、それで得た回答なのでほぼ間違いないかなと。

26日は所用でApple Store Ginzaに行けなくなってしまったので、結局生協で注文してしまいましたorz。それにしても今月、一体幾らAppleにお布施してるんだろう、俺………。

(2007/10/30 追記) 2ch情報によると、8800円なのは数量or期間限定らしい。何でも大学生協側の勘違いだか、Apple側の勘違いだかで8800円で出してしまったそうです。

PlaggerでニコPodを作る

カッとなってiPod touch 16GBを買った。今は超wktkしている──本当に衝動買いでした。俺は悪くありません。ネイティブソフト開発用のSDKを出すなんて言うAppleが悪いんです。まだまだ在庫は沢山あるという大学生協が悪いんです。なーに、nano 8GBを2つ買って16GBにする事を考えたら、touch 16GBだってそんなに高いものじゃありませんよ。うん、そうなんですよ。そうそう。そうじゃないと困ります。………カードの支払いどうしようorz

そんなこんなで買ってしまいました、iPod touch 16GB。

折角動画が見れるんだからと、何かいい活用方法はないかと探していたら、Plaggerというツールを使う事でニコニコ動画の動画を自動で取り込めるらしいです。「自動」ってのがとても素晴らしいです。という訳で早速、ニコニコ動画ランキング取込システム、その名も「ニコPod」を構築してみました。

PPC Mac mini 1.4GHz(M9687LL/A)+ Mac OS X v10.4.10上に構築しました。

インストール方法は「ニコニコ動画からPlaggerでPodcastを作りiTunesで見たいゼ」で丁寧な解説がなされているので、この通りに進めて行きます。ただし、設定ファイル(.yaml)には独自のものを用い、その関係でFilter::FFmpegへのパッチも独自のものを当てます(後述)。また、二コPlaTunesの補足DB_File_URL.pm関連の設定も一緒に行います。

FFmpegは、上記サイトで紹介されているバイナリではなく、MacPortsでビルドしたものを用いました。

global:
    assets_path: assets/
plugins:
  - module: Subscription::Config
    config:
      feed:
       - url: マイリストのアドレス
  - module: Filter::FetchNicoVideo
    rule:
      - module: RecentN
        count: 10
      - module: Deduped
        engine: DB_File_URL
        path: /Users/Decomo/Sites/nicopod/nicoPod.db
    config:
      mail: アカウント
      password: パスワード
      id_as_filename: 1
      dir: /Users/Decomo/Sites/nicopod
  - module: Filter::FFmpeg
    config:
      dir: /Users/Decomo/Sites/nicopod
      ext: MP4
      command: /opt/local/bin/ffmpeg
      encoding: utf8
      option_string: '-y -threads 2 -s <size> -r 29.97 -vcodec h264 -g 500 -aspect <aspect> -level 13 -loop 1 -sc_threshold 800 -flags loop+qpel -flags2 bpyramid+wpred+mixed_refs+brdo -trellis 2 -subq 6 -me umh -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -rc_eq blurCplx^(1-qComp) -refs 6 -mbd 2 -cmp 2 -subcmp 2 -b 10k -minrate 0 -qmax 27 -qmin 20 -acodec aac -ar <ar> -ac <ac> -ab 128k'
  - module: Filter::RewriteEnclosureURL
    config:
      rewrite:
        - local: /Users/Decomo/Sites/nicopod
          url: http://Freyja.local/~Decomo/nicopod
  - module: Publish::Feed
    config:
      dir: /Users/Decomo/Sites/nicopod
      filename: _nicoPod_weeklyAddCount.xml
      format: RSS

お手本とした設定ファイルと比べて、特にFFmpegのエンコードオプションにかなり手を加えています。画質重視の設定なので、PPC Mac miniには結構荷の重い仕事です。エンコード所要時間は実時間の2.5〜4倍と言った所です。

注意点として、iPod touch(現時点での動画対応iPod全て)のH.264はベースプロファイルなので、BフレームとCABACが使えません。つまり、-bfオプションと-coder 1を指定しても、再生出来ない動画になってしまいます。また、最大参照フレーム数(-refs)は6が最大です(これより大きい値だとブロックノイズが出ます)。しかし、BフレームとCABACが使えないH.264なんてゴm(ry

FFmpegのバージョンによって、ビットレート指定の単位が違います。昔はkbpsだったのですが、最近はbpsになったようです。SVN-r9102ではkbpsでした。

可能な限り小さい容量で高品質を目指すべく、Filter::FFmpegに手を入れます。

はこべにっき#さん作のパッチは、動画のアスペクト比によって出力動画サイズを640×480と640×360に切り替えていますが、ニコニコ動画の最大サイズは512×384なので、そのサイズで出力しても旨みがありません。

ここではiPod touchの画面解像度に合わせて、アス比が4:3の時は432×320、16:9の時は480×272で出力する事にします。

また、元動画の音声トラックの仕様(サンプリング周波数/チャンネル数)をそのまま継承して、音声のエンコードを行うようにしました。まぁ、これは気休め程度です。本当は元のビットレートを元に、エンコードのビットレートを変えたかったのですが、生憎、元ビットレートを取得する手段が無いようなので……。

差分:FFmpeg.diff はこべ日記さんの差分も取り込んであるので、FFmpeg.pmにそのまま適用する事が出来ます。

    はこべ日記さんのパッチからの変更点
  • 出力動画サイズの変更:4:3→432x320、16:9→480x272、元が320x240だったらそのまま
  • 出力音声のサンプリング周波数とチャンネル数を、元動画の音声のそれを継承するようにした

自動的に動画の取得&変換が行われるように、cronの設定を行います。Tigerなので本来ならばlaunchdを使うべきなのでしょうが、詳しい設定方法が分からなかったのでcronに逃げました:-)。参考までに、私の設定を晒しておきます。

0       2       *       *       1-6     /Users/Decomo/Tools/plagger/nicoPodDailyUpdate.sh
0       2       *       *       0       /Users/Decomo/Tools/plagger/nicoPodWeeklyUpdate.sh

全て上手く行けば、iTunesにPodcastとして動画を取り込め、それを転送すればiPod touchで見る事が出来ます。

私は、週間マイリスト登録数TOP10の動画を自動的に取得&変換するようにしています。これで流行りの動画チェックもバッチリです。

生成した動画は、動画の内容にもよりますが、元ファイルと比べて150〜200%ほどの大きさになる事が多いようです。品質犠牲にすればより小さくすることも可能ですが、私的には今以上の品質低下は避けたい所です。欲を言えばもう少し画質を上げたいのですが、容量とのトレードオフを考えると、今の設定が丁度いいかなと。

  • start.txt
  • 最終更新: 2022-07-27 15:26
  • by Decomo