Ubuntu 9.10
いつもは、出てすぐには入れなかったんだけど、ThinkPad X61に入れていた9.04が、すこぶる不安定で、画面が崩れたり、無線の調子が悪くてハングしたりという不具合が頻発していたので、X61だけ入れ替えてみた。
なんか、USB-CDからのインストールは、途中でファイルが壊れているというエラーになり、ドライブを替えても、メディアを替えても回復せず。結局、USBメモリからインストールしたら、うまくいった。USB-ATAアダプタが、いまいちなのかなぁ。確かに、今ひとつ信頼が置けないんだよね、これ。とはいっても、きっとどこのメーカーのやつも、中のチップは一緒っぽいから、買いかえてもダメなんだろうな。
とりあえず、FireFox 3.5は、レンダリングが高速で快適だし、起動、シャットダウンも高速。メニューも、すっきりしたデザインになって、好印象。なんかキーリピートの調整がGUIから出来ない病気がまた発生しているようだ。
まぁ、安定性はしばらく使ってみないと分からないから、これで様子見かな。
CMR-310の安定性
二週間ほど使ってみた感じの感想としては、つながってしまえば、安定している。
しかし接続までの安定性は、あまり良くない。何ごとも無くすぐにつながる時もあれば、5分くらい平気でつながらなかったりする。地下鉄みたいに、駅の間で切れるような環境だと、どこかで再起不能になり、そのまま屋外まで連れ出しても、永遠につながらない(10分くらい待っただけだが)。接続が不安定な環境では、都度power off/onをした方が良さそうだ。
で、そういう使用方法をしようとすると、電源スイッチが無いのが、痛い。せめてリセットボタンでもあればいいんだが。USB給電ケーブルに、スイッチ付きのやつとか無いかな。
Google App Engineをローカルで動かして、Androidからアクセスする。
GAEをローカルで動かすと、Jettyが上がるんだけど、これってデフォルトのバインディングが、localhostになっている。
ブラウザから、http://localhost:8080/xxxみたいにアクセスする分にはいいんだけど、Androidアプリをエミュレータ経由で動かして、そこからアクセスする場合、localhostって、エミュレータそのものになっちゃうんで、PCのIPアドレスを入れるんだけど、上記の通りバインディングが、localhostだから見えない。
-Djetty.hostとか適当に入れて動かず悩んでいたら、GAEを起動する時のプログラムパラメータとして、--address=ipアドレスと指定すれば良いようだ。早速、Eclipseで実行の構成から、引数のところを選んで、--address=0.0.0.0と入れてやったら、アクセスできるようになった。

NetWalkerのスピードを測定。
NetWalkerの体感速度は、300MHzくらいのx86という印象。丁度家にある古いThinkPad(Pentium2 350MHz)と同じくらい。で、実際のところのCPUパワーがどの程度なのか、クイックソートの計算速度で比べてみた。1000件のデータを、並べ替える処理を10000回実行し、5回の平均を取ってみた。
コードは、C版とJava版を作成。コンパイラオプションや、Javaの実行系も変えながらとってみた。
--- C版 ---
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include <stdlib.h>
void myQsort(int data[], int left, int right) {
if (left >= right) return;
int l = left;
int r = right;
int pivot = data[(unsigned int)(left + right) / 2];
while (1) {
while (data[l] < pivot) {
++l;
}
while (data[r] > pivot) {
--r;
}
if (l >= r) break;
int wk = data[l];
data[l] = data[r];
data[r] = wk;
++l; --r;
}
myQsort(data, left, l - 1);
myQsort(data, r + 1, right);
}
typedef struct timeval TIME_VAL;
long getTimeDiffInMillis(TIME_VAL *pStart, TIME_VAL *pEnd) {
long ret = (long)pEnd->tv_sec * 1000 * 1000 + (long)pEnd->tv_usec;
ret -= (long)pStart->tv_sec * 1000 * 1000 + (long)pStart->tv_usec;
return ret / 1000;
}
int main(char **argv) {
const int ITERATION = 10000;
const int SIZE = 1000;
int org_data[SIZE];
int i;
TIME_VAL start, end;
for (i = 0; i < SIZE; ++i) {
org_data[i] = rand();
}
gettimeofday(&start, NULL);
for (i = 0; i < ITERATION; ++i) {
int data[SIZE];
memcpy(data, org_data, sizeof(data));
myQsort(data, 0, SIZE - 1);
}
gettimeofday(&end, NULL);
printf("%ldms\n", getTimeDiffInMillis(&start, &end));
}
--- Java版 ---
import java.util.Random;
public class Qsort {
public static void qsort(int[] data, int left, int right) {
if (left >= right) return;
int l = left;
int r = right;
int pivot = data[(left + right) >>> 1];
while (true) {
while (data[l] < pivot) ++l;
while (pivot < data[r]) --r;
if (l >= r) break;
int wk = data[l];
data[l] = data[r];
data[r] = wk;
++l; --r;
}
qsort(data, left, l - 1);
qsort(data, r + 1, right);
}
public static void main(String[] args) {
int[] data = new int[1000];
Random r = new Random();
for (int i = 0; i < data.length; ++i) {
data[i] = r.nextInt();
}
long start = System.currentTimeMillis();
for (int i = 0; i < 10000; ++i) {
qsort(data.clone(), 0, data.length - 1);
}
System.out.printf("Elapsed %,dms%n", System.currentTimeMillis() - start);
}
}
結果(単位は、ms)。まずは、比較用のデスクトップ(Core 2 Duo 3GHz)。
gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu12)| 最適化無し | 1,056 |
| -O3 | 610 |
IcedTea6 1.3.1 (6b12-0ubuntu6.5) Runtime Environment (build 1.6.0_0-b12)
OpenJDK 64-Bit Server VM (build 1.6.0_0-b12, mixed mode)
718
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) 64-Bit Server VM (build 11.0-b15, mixed mode)
686
若干OpenJDKの方が遅いようだ。さすがに今どきのJavaは、この手の計算処理なら、ネイティブコードと遜色無い速度で動く。
次にNetWalker
gcc version 4.3.3 (Ubuntu 4.3.3-5ubuntu4)| 最適化無し | 5,148 |
| -O3 | 2,272 |
OpenJDK Runtime Environment (IcedTea6 1.4.1) (6b14-1.4.1-0ubuntu10)
OpenJDK Core VM (build 14.0-b08, interpreted mode)
| 最適化無し | 65.529 |
| -cacao | 5,380 |
ARMの場合、Javaの最適化は、まだ甘いようで、Cに2倍以上の差を付けられている。しかし、この2,272msという結果には、ちょっと驚いた。これだと、Core 2の800MHz相当くらいの実力はあることになる。しかし、どうひいき目に見ても、体感はそんなに速くは感じられない。なぜなんだろう、OSのコンパイル時に最適化オプションが付いていないんだろうか? CPUメータ見てると、何か処理をしている時は、常にふり切っている感じなので、I/O処理がネックとは考えにくい。まだまだ速くなる余地はあるのではないだろうか。
P.S. C版で、開始時間の取得位置が不適切だったのを修正。









