最近の変更サイトマップ

スワップの最適化

※注:本記事内容はv10.5 Leopard以降には適用できません。詳細

私は、Macは常に起動状態で使っている。出かける時や寝るときも基本はスリープモードなので、本当に電源が落ちている日は、年間通しても片手で数えられるくらいだと思う。「Macはそれだけ安定してるんだ!みんなも使おう!!」と言いたい訳じゃないよ、ホントに(笑

だが、ずっと付けっぱなしだと、システムが徐々に重くなって行く。たまの再起動後の軽さと言ったら、感動ものだ。それくらい重くなる。

この現象は、スワップファイル(仮想メモリ)の断片化が原因らしい。OS Xのスワップはデフォルトの設定だと、/private/var/vm 下に、まず64MBのファイルが確保される。それが埋まると64MB→128MB→256MB…の容量のスワップファイルが次々と生成されていく仕組みのようだ(10.4系の場合)。で、こいつらが断片化していくことで、動作速度に支障をきたすらしい。

この設定を変更するには、/etc/rc の205行目あたりにある、/sbin/dynamic_pager を変更する。ググってみると、/System/Library/StartupItems/VirtualMemory/VirtualMemory を書き換えるという説明が多いが、うちの環境(10.4.4)ではVirtualMemoryディレクトリが存在しなかった(一応、自前でVirtualMemoryディレクトリ以下を作ってみた物の、反映はされなかった)。

変更前:/sbin/dynamic_pager ${encryptswap} -F ${swapdir}/swapfile
変更後:/sbin/dynamic_pager -H 268435456 -L 1073741824 -S 536870912 ${encryptswap} -F ${swapdir}/swapfile

オプションはそれぞれ、
-H : スワップを生成する条件となる、空きメモリ容量
-L : スワップを削除する条件となる、空きメモリ容量
-S : スワップのサイズ
ということらしい。上の例だと「空きメモリが256MB以下になったら、512MBのスワップを作り、空きメモリが1GB以上になったらスワップを削除する」という動作になる。ここで言う空きメモリとは、物理メモリと仮想メモリ(スワップ)の合計の空きという点に注意されたい。

変更後、再起動して確認してみたところ、きちんと512MBのスワップファイルが出来ていた。再起動してまだ間もないため、効果の程はわからないが……。

2006-02-17 追記

前よりも重くならなくなったような気がしないこともない……。でも、既に512MBのスワップファイルが2つも出来てるんですけど(ー ー;)。Mac OS Xは、ホント大喰らいだなぁ。物理メモリ512MBじゃ、正直足りない………。

2006-03-14 追記

最適化前よりはスリープを繰り返しても重くならなくなった(気がする)。まぁ、Thunderbirdの常時起動を止めたり、必要外のソフトはすぐに終了するようにしたため、その影響も幾分かあるのだろうけど。

2006-12-02 追記

-H -S -L で指定する値には「(-Lのサイズ) > (-H のサイズ) + (-S のサイズ)」という関係があるので、独自の値を設定する際には注意の程を。

2007-01-29 追記

某掲示板から参照されていたので、メモリが256M/512M/1GBの場合の設定例を考えて見た。参考にどうぞ。

■256MBの場合: -H 268435456 -L 1358954496 -S 1073741824
物理メモリが256MBではスワップに依存した動作が不可避なので、始めからガツンとスワップを確保して、常時スワップ有りで運用する。この設定ではスワップを1GBとしているが、HDDの使用効率を考えると512MB程度にしてもいいと思う。まぁ、256MBな人は早急に物理メモリ512MB、可能なら1GBに増設した方がいいと思う。操作感や作業効率を考えたら、512MBにする費用なんて微々たるものだと思う。

■512MBの場合: -H 268435456 -L 1073741824 -S 536870912
この場合も256MB程ではないにせよ、スワップ頼みの運用になるので512MB単位でスワップを確保し、常時スワップ有りとする。

■1GBの場合: -H 67108864 -L 352321536 -S 268435456
場合によってはスワップ無しでの運用も見込める為、スワップ生成・削除条件を緩めに設定。

デフォルトのスワップの動作が64MB→128MB→256MB→…なのは、メモリが潤沢に使えるという前提で、HDDの使用効率を考えての事だと思う。通常用途には充分なメモリを積んでるけど、たまたまメモリが足りなくなったから、ちょっとだけスワップを使って一時しのぎをしよう、みたいな。

あるいは、メモリをBTOで沢山載せさせる為の、Appleの策略とか………なわきゃないかw

あ、ちなみに、大規模なシステムアップデート(多分カーネルがらみの)が入ると、/etc/rcが設定前のものに戻る(アップデータに含まれる/etc/rcで上書きされてしまう?)ので、注意されたし。

Garbage collection

不要になった動的確保したメモリ空間を、システムが自動的に開放してくれる仕組み garbage collection。カタカナ表記だと「ガベージコレクション」となるが、英語の発音的には「ガーベッジコレクション」と表記するのが、正しいのではないかと思うのだけれど……。その辺、どうなってるんだろう。

そんな時はGoogle先生にお任せ!ということで、各単語での検索結果を調べてみた。

単語 件数
ガベージコレクション 23600
ガーベジコレクション 9310
ガーベッジコレクション 9470
ガービジコレクション 1
ガービッジコレクション 27

なかなか興味深い結果になった。

ガベージが一番多いのは当然として、ちょっとだけ原音に近いガーベジガーベッジ連合が<em>ガーベジ</em>勢力と、拮抗している点は面白い。一番原音に近いと思われるガービッジの結果は、同じような疑問を持った人々の、掲示板でのやりとりだった。……やっぱり疑問に思う人っているのね。

ググってみて、気になった点。

  • 用語解説系サイトではガベージガーベジが併記されているところが多いが、どっちかと言えばガベージをメインに据えている(ガーベジガベージの解説ページにリダイレクトされることが多い)。
  • でも、e-Wordsだけは、あくまでもガーベジ派の模様(ガベージがリダイレクトされる)。大好きだよe-Words。

なんか、うまい日本語訳無いものかねぇ。

NSArrayとNSTableViewとNSArchiverを学ぶ

どのクラスも、まぁ、その名前の通り。NSArrayは配列を、NSTableViewはテーブルビュー(Winで言う所の、エクスプローラで表示方法を「詳細」にした時に表示されるような形式)を、そしてNSArchiveはデータの保存に関するクラスである。

Windowsに関するプログラミング技法は全然知らないので比較はできないが、とにかくどのクラスも便利過ぎる。「この値を格納しろやー」「このデータを『商品名』フィールドに表示してくれやー」というメッセージを、それぞれのインスタンスに送るだけで、きっちりと期待通りの動作をしてくれる。

何より凄いのが、NSArchive。各オブジェクトに -encodeWithCoder: プロトコルを実装してやれば、保存したいオブジェクトに含まれる、別のオブジェクトまでを全て一発で保存してくれる。そうやって保存したデータの読込みは、NSUnarchiver クラスで一発OK。面倒な保存/読込み処理を、これらのクラスに丸投げできて、非常に便利便利。

前回のNSSoundとあわせて、簡易サウンドプレーヤを作る為の材料は、これで揃った。あとは実際に製作に取りかかるのみだ。頑張るぞー!!

メソッドのポインタ

Objective-Cのメソッドのポインタを取得して、メソッドをCの関数として呼び出す事が出来るのだとか。

// イニシャライズ
id obj = [Hogehoge new] ;
// メソッドのセレクタ取得
SEL method = @selector(methodOfHogehoge);
// セレクタからメソッドのポインタ取得
IMP func = [Hogehoge instanceMethodFor:method];<br />
// 関数としてメソッド methodOfHogehoge を実行
func(obj, method);

肝となるのは、instanceMethodFor: メソッド。こいつがセレクタ(メソッドの内部識別子)から、メソッドのポインタを探し出してくれる。その返り値を、IMP型で受け取るとあら不思議、Cの関数呼び出しの形でObjective-Cのメソッドが実行できちゃった。ただし、引数として元のメソッドが含まれるオブジェクトのインスタンスと、メソッドのセレクタを渡してやらないといけない。

とりあえずObjective-Cの勉強は一段落したが、俯瞰してみるとObjective-Cが「Cの枠組みの中でオブジェクト指向を目指した言語」であるということがよくわかる。そのお陰かCの流れを汲んだオブジェクト指向言語であるC++と比べて、言語規模は格段に小さい(と思う)。

表記方法がかなり特殊ではあるが、初心者がオブジェクト指向を学ぶには、Objective-Cは結構いい言語なのでは?と思ったりした。

iPod nano発売!

かねてより噂されていた、新型iPodが発表&発売された。その名も「iPod nano」。2GB/4GBのフラッシュメモリとカラー液晶を搭載し、従来のiPod mini枠の置き換えを計った、超小型のiPodだ。

その大きさたるや、90x40x6.9(mm)!! 手持ちの3G iPod(20GB)の実寸が100x60x15(mm)なので、面積的には一回り、厚さ的には1/2近く小さい。

「iPodは持ってるけど、シリコンオーディオプレーヤが欲しい。でもshuffleじゃ容量的にも操作性的にも厳しいし……」と思っていた人(俺)には、まさに最適解となる製品である。いやー、appleはわかっていらっしゃるw

ただ、首からぶら下げての使用を想定してか、ヘッドフォンジャックが本体下部、Dockコネクタの脇に付いているのは戴けない。胸ポケに入れて使用する場合は、どうするのであろうか。使用するヘッドフォンのコネクタがL字型であれば、さほど問題にもならないだろうが、垂直タイプ(従来のiPodに付属のイヤホンもこのタイプ)だと、上下逆さまにしないと使えないと思うのだが……。数日もすれば、その辺の使い勝手も、次第に明らかになっていくとは思うが。

個人的にはiPod Camera Connectorが使えるのかも気になる。これが使えれば、iPod nanoを広大なカメラストレージとして使うことができるから。

iTunes5も本日付けで公開された。見た目のデザインがTiger風味に変更され、検索機能がより強化されたのが特徴。

20050908-01.jpg

で、この新検索を使ってみて気づいたのが「ビデオ」という、絞り条件があるということ。

さらっと試してみた所、MPEG-1とPSP向けに作ったMP4ファイルが普通に取り込めた━(゚∀゚)━! 。残念ながら試した限りではAVIは取り込めなかったが、もしかしたらWindows版では取り込めるのかも。もちろん、取り込んだ動画は、他の曲と同じように扱える。

こうして、わざわざビデオ機能を包含するということは、iPodがビデオ再生機能を取り込む日も近い!?

他にも、AACがVBRに対応したり、曲ごとに「再生位置を記憶」できたり、歌詞に対応したりと、地味だけど何気に機能が底上げされている。

128kbpsのVBR-AACとCBR-AACで比較してみたところ、スペクトラム的には高域が出ているようだ(聴き比べはしてないので、音質に関しては不明)。ファイルサイズも、若干ではあるがVBRの方が抑えられている。VBRというよりは、ABRに近い感じだ。

「再生位置を記憶」は、従来はファイルの拡張子を、m4aからm4bに変える事で裏技的に利用できた機能であったと思う。普通の曲では使いどころが難しいと思うが、まぁ、それは人次第だろう。

何はともあれ、ここの所のappleは、とかく絶好調ですな。iPod nano、凄く欲しいぞ。

start.txt · 最終更新: 2016-05-07 17:46 by decomo
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0