SL-C700

早速Special kernelを入れて電車の中でいろいろと。
CPUクロックがだいぶ違うので当然ですが、かなり快適です。Squeakも何かすごく速くなったような気が。とはいえ、恐らく仮想メモリのswapに結構なボトルネックがあることを考えると、メモリをたくさん使わざるを得ないsqueakはもっとRAMが大きければ快適なんでしょうね。

SL-C700の障害

ところで、 Florian のSL-C700はいくつか不思議な挙動を示しています。

  • 起動直後、メモリを使いつぶす

OSの起動後、コンソールを開いてメモリの量を監視していると、なぜかメモリがどんどん消費されて行きます。この消費のせいでそのうち搭載メモリをすべて使いつぶし、「アプリケーションを終了してください」ダイアログが出た後おもむろにメモリが解放されます。
起動時にしばらく時間がかかるだけではあるのですが、一体どういう原因か分からずちょっとこわいです。qpeserverのどれかがメモリを使っているかまでは突き止めたのですが、それが何かまでは分からずじまいです。

  • シンク・バックアップができない

ふだんZaurusDriveを「ネットワーク」で使っているのですが、このままの設定ではシンク・バックアップができません。
いったん「シリアル」に設定し直せばいいのですが、バックアップのたびにPCあぷりをインストールし直すのもめんどうですし。

あ、いや、分かってるんですよ。ハードウェア的な障害ではなく、OSレベルの障害だということは。クリーンインストールをして、必要なものを徐々にそろえて行けば原因究明できることも分かってます。
時間かかるのが分かっているので後込みしているだけで(^^;)。

イメージのシュリンク

おおしまさん(id:squeaker)のコメント「要らないクラスを削除するとメモリを食わなくなる(意訳)」を読んで、まったくもってその通りだと思ったのでいろいろ調べてみることに。
調査方針としてとりあえず以下を掲げてみました。

  1. Squeakの.imageを現在の.imageと.changesから作る方法。
  2. 上記もしくは直接.imageを作る方法
  3. Squeak3.6に含まれている機能のリストアップ
  4. 上記に含まれていながら実際には使用されることは少ない(と思われる)機能の洗い出し
  5. 上記の機能の多機能との依存関係

ぐぐって検索……と、早速こんなところが引っかかってみたり。

副題に「どうやって小さくするか」とかリンクに「PDA用MiniSqueak」とかありますね。ちょっと古いですけど。
ともあれ、Imageファイルの生成以外はZaurus上で出来るかな?(多分、出来はするけど凄く重そう) 暫く行き帰りに試してみましょう。

その他

  • ところで現在のメモリの使用量を取る方法は(^^;)?
  • .imageを作る方法は?
  • そもそもどうやってパフォーマンスを測ればいい?System-Benchmarkカテゴリの中身をどうすればいいんだろう?

……先は長そうだ(^^;)

先人の知恵

スペックを考えると無謀なことをしていた時代があったのですね。
Squeak on Pocket PostPet(http://nishis-web.hp.infoseek.co.jp/smalltalk/Squeak/ppp/)
いや、ここまでシェイプアップしなくてもいいんですけど(^^;)。そもそもMVCじゃなくてMorphicベースだし。
でも、このページからたどれるところには「イメージ(PoPoPeSqueak3)をどうやって作ったか」までは書いていませんね。もう少し調べてみましょう。

検索続き

昼間のgatech.eduを重点的に調べてみたら、やっぱりこんなページがありました。
Smalltalk majorShrink(http://minnow.cc.gatech.edu/squeak/2182)
やっぱりBaloon3Dは真っ先に削られるかぁ。これで1Mbyteくらい。"Smalltalk garbageCollect."でGCをかけた上で残りメモリが出るのは判ったんだけど、size is nowってどうやって出してるんだろう?

#ああ、楽しいなぁ(^^)。

changesファイルについて

gatech.eduに、.changesファイルと、.imagesについて詳しく書かれてありました。
imageについて(http://minnow.cc.gatech.edu/squeak/2213)
changesについて(http://minnow.cc.gatech.edu/squeak/49)
つまり、

  • .changesファイル:ソースコードの差分
  • .imageファイル:現在のVM上のメモリイメージ

ようは、はじめに立てた「changesからimageを作る」ってのは、全然とんちんかんな言いぐさだったわけですね。なるほど。
ついでに、.sourcesと.changesから合成した.sourcesファイルを作る方法も乗っていたり。
ソースコードの凝縮(http://minnow.cc.gatech.edu/squeak/759)

Smalltalk condenseSources.

なんと、Workspaceでこれをやるだけで良かったのですね。おもしろいなぁ。
でも、changesが無くなったからと言って、使用メモリ量が急激に減るわけではないみたいですね(^^;)。コメントを削除(ソースファイルの圧縮)してもあんまり変わらないし。

今日の成果

いろいろやった結果、確かにSqueakが使用するメモリ領域はかなり削減されたようです。

  • "Squeak -memory 20m"で起動し、"Smalltalk garbageCollect."した結果

9674628

  • "Squeak"で起動し(ディフォルトでは16mらしい)、"Smalltalk garbageCollect."した結果

3658108

2963644

20mだの、16mだの言うメモリの量が、実際に"m=2^20"かどうかはちょっとさておき、試しに計算してみるとこんな感じ。

新イメージ:
(16*1024*1024)-3658108=13119108
(20*1024*1024)-9674628=11296892
元イメージ:
(16*1024*1024)-2963644=13813572

あんまり変わらないかなぁ。確かに数百Kbyte小さくなってはいるんだけど。
ま、ここまでたどり着くのがえらい楽しかったのでよしとしましょう(^^)。

余談

時に、これらのものを含めたイメージの再配布ってどういう扱いになるんだろう?
いろんなchangesetを当てちゃってるし、妙にUIのカスタマイズもされちゃってるし、あんまりリファレンスとして適当じゃないけど、LinuxZaurus用Squeakでさくっと動かせるバイナリを用意しておくと、通勤電車プログラマーが増えそうな予感はするんだけど。