2008年12月28日日曜日
2008年12月26日金曜日
Linux 2.6.28
元ネタは kernelnewbies.org 。
- Ext4 がステーブルに
btrfs の影に隠れてあまりいいイメージのない ext4 ファイルシステムだが、このたびステーブルと宣言されたようだ。
ext4 は、メインラインにマージされてもう久しいが、そもそも開発は ext3 にあったファイルシステムサイズ 16TB 制限、ファイルサイズ 2TB 制限を越えるために始まった。これに加え、- ファイルのディスク内位置情報は、 ext3 ではブロックごとに管理されていたが、これを連続するブロックでは一括して扱えるようになった (extents) 。これにより、随分と待たされる処理だった巨大ファイルの削除などが高速化したらしい。
- ディスク内でデータを書き込む場所を決める操作が、ブロック単位でしかできなかったのが、いくつかのブロックでまとめてできるようになった (multiblock allocation) 。
- アプリケーションから write システムコールが発行された際、そのデータを書き込むディスク内の場所をすぐには決めず、何回か溜まってから決めることができるようになった (delayed allocation) 。これにより、 multiblock allocation とあいまって、より適切な場所決めができるようになった。これは、フラグメンテーションの解消に役立つため、 extents とも相性がいい。
- ファイルのメタ情報 (inode) のうち実際には使っていないものを読み飛ばすようにしたところ fsck が 2〜20倍 高速化した。
- ファイルのディスク内位置情報は、 ext3 ではブロックごとに管理されていたが、これを連続するブロックでは一括して扱えるようになった (extents) 。これにより、随分と待たされる処理だった巨大ファイルの削除などが高速化したらしい。
- GEM Memory Manager
グラフィックコントローラからアクセス可能なメモリ領域を ioctl を通して制御する。一般向けではなく、 X のユーザランドドライバ向けの機能である。インタフェースはかなりドライバ依存で現在は i915 のみの投入となっている。3D ゲームのベンチマークで 50% 程度速くなっているとのこと(今までが遅すぎたようだが)。 - ワイヤレス USB のサポート
- メモリ管理の改良
ディスクにフラッシュ可能な名前付きページ(ファイルキャッシュ)と、ディスクにスワップ可能な匿名ページ、メモリに保持しなければいけないページをそれぞれ別々のリストに格納するようにして、メモリの回転率を上げた(実際に回転するのはディスクである)。 - コンテナフリーザ
システムのサスペンド、レジューム機構を応用して、指定したタスクセットのみをフリーズ、解凍させる機能が追加された。ジョブスケジューラ用らしい。 - ブートトレーサ
CONFIG_BOOT_TRACER=y でコンパイルしたカーネルを、 initcall_debug 及び printk.time=1 パラメータを付けてブートし、 dmesg | perl scripts/bootgraph.pl > output.svg とすれば、綺麗なタイムチャートが出現するらしい。 - ディスク衝撃保護
/sys/block/*/device/unload_heads に書き込んだミリ秒だけディスクヘッドを緊急退避する。ディスクが ATA/ATAPI-7 規格をサポートしていることが条件。
2008年12月5日金曜日
2008年11月29日土曜日
今更 Google Chrome
話題としては旬が過ぎた感もあるが Google Chrome の中のマニアックな話。
文章を単語に区切るライブラリと言えば、日本語では mecab や chasen であるが、より世界標準なのは icu ライブラリの BreakIterator (C, C++, Java) である。しかしながら、 BreakIterator による日本語の分割は、単に文字種だけに基づくもので、とてもまともだとは言えなかった。
…と思っていたら、先日発表された Google Chrome に含まれている libicu は、これにパッチ (segmentation.patch.txt) が当たっていて IPA 辞書などをベースにするように改善されているようだ。
これで sqlite の fts3 の icu tokenizer が実用レベルになるらしい。
文章を単語に区切るライブラリと言えば、日本語では mecab や chasen であるが、より世界標準なのは icu ライブラリの BreakIterator (C, C++, Java) である。しかしながら、 BreakIterator による日本語の分割は、単に文字種だけに基づくもので、とてもまともだとは言えなかった。
…と思っていたら、先日発表された Google Chrome に含まれている libicu は、これにパッチ (segmentation.patch.txt) が当たっていて IPA 辞書などをベースにするように改善されているようだ。
これで sqlite の fts3 の icu tokenizer が実用レベルになるらしい。
2008年11月19日水曜日
2008年11月1日土曜日
2008年10月27日月曜日
intrepid ghostscript の日本語 ps 対応
Ubuntu intrepid を試してみたが、 ghostscript 8.63.dfsg.1-0ubuntu6 (やそれを用いている evince 2.24.1-0ubuntu1) が、日本語 Postscript を扱えない。
ソースパッケージの debian/patches/00list の中の 11_gs-cjk_font_glyph_handling_fix という行が、なぜかコメントアウトされているのでこれを外してビルドしなおせば良い。
ソースパッケージの debian/patches/00list の中の 11_gs-cjk_font_glyph_handling_fix という行が、なぜかコメントアウトされているのでこれを外してビルドしなおせば良い。
2008年10月22日水曜日
Cygwin と MSYS
この記事を鵜呑みにしていたが、
実は MSYS でも MSYS-1.0.DLL が fork / execve 関数を提供していた。
でないと bash が動作しない。
12:40 追記: 見返すと記事自体は間違ったことは言っていないかもしれない。
実は MSYS でも MSYS-1.0.DLL が fork / execve 関数を提供していた。
でないと bash が動作しない。
12:40 追記: 見返すと記事自体は間違ったことは言っていないかもしれない。
2008年10月20日月曜日
地図はやはりパケット数を食う
携帯電話でどういう操作をするとパケット代がかさむのか、調べるため、
キャリアの個人用ページのデータを取ってくるスクリプトを作って1時間ごとに回してみた。
http://zng.jp/willcom/
今朝は地図と乗り換え検索で 5000 パケットらしい。
10/22 追記: 要望があったのでソースコードを公開。
ログアウトした状態でないと動作しない。
キャリアの個人用ページのデータを取ってくるスクリプトを作って1時間ごとに回してみた。
http://zng.jp/willcom/
今朝は地図と乗り換え検索で 5000 パケットらしい。
10/22 追記: 要望があったのでソースコードを公開。
ログアウトした状態でないと動作しない。
2008年10月10日金曜日
2008年9月26日金曜日
モザイク画像をトップ記事にしておくのはあれなので投稿
作業効率向上のため、格安 22 インチワイド液晶モニタをノート PC の外部出力用に購入してみた。 20,800 円。昔では考えられない値段である。
解像度は WSXGA+ (1650x1050) だが、 xorg.conf に全く手を触れずに表示された。 xrandr コマンドを使えば、 LVDS とデュアルも可能である。ModeLine を gtf で生成してごにょごにょ、という時代はもう終わったらしい。
アナログ RGB 接続のため僅かにボケている気もするが、ドット欠けもなく概ね満足である。
解像度は WSXGA+ (1650x1050) だが、 xorg.conf に全く手を触れずに表示された。 xrandr コマンドを使えば、 LVDS とデュアルも可能である。ModeLine を gtf で生成してごにょごにょ、という時代はもう終わったらしい。
アナログ RGB 接続のため僅かにボケている気もするが、ドット欠けもなく概ね満足である。
2008年9月24日水曜日
2008年8月4日月曜日
2008年8月1日金曜日
2008年7月27日日曜日
今更 Perl 5.6 での UTF-8 フラグ
perl 5.8.0 以降ではそれなりに使える UTF-8 フラグであるが、 perl 5.6.x では邪魔でしかない。 perl 5.6.0 では tr 演算子, 5.6.1 以降では pack, unpack 関数を使って外せるが、それよりも bytes semantics で substr を使って外すほうが圧倒的に速い。5.8 以降に持っていっても utf8::encode と実用上ほぼ互角の速度で、特に問題はなさそう。
use bytes;perl 5.6.0 未満でも動いてほしいのであればこうなるかな。
$utf8off_str = substr $utf8on_str, 0;
BEGIN { eval { require bytes; bytes->import; }; }
$utf8off_str = substr $utf8on_str, 0;
2008年7月6日日曜日
Linux 2.6.26
例によって kernelnewbies.org から抜き出した linux 2.6.26 の新機能。2.6.25 の新機能。
- 読み込み専用バインドマウント
2.4.0 以降、 Linux はバインドマウントをサポートしている。バインドマウントとは、ディレクトリの symlink のようなもので、これによりあるディレクトリの内容を異なるパス間で共有することができる。例えば、 "mount --bind /foo /bar" は、 /foo の内容を /foo だけでなく /bar にも"バインド"する。別の言い方をすれば、 /foo 及び /bar が同じ内容になる。そして、一方のディレクトリ内で変更を行うと、他方にも変更が及ぶ。これは、 chroot や ftp/web サーバのようなもの対しては有用であるが、今までは、 /foo が書き込み可能であれば、 /bar もどうしても書き込み可能になってしまっていた。
これは非常に身近な改善であろう。実現していることは単純で、すぐにでも応用されていきそうだが、カーネルのコード的にはやや複雑な変更のようだ。 VFS には、このように身近で明らかな改良の余地がまだまだ残されているので楽しみに待っている。
2.6.26では、読み取り専用で bind mount を行えるようになった。先ほどの例で行ったバインドマウントを読み取り専用で行うと、 /foo の内容は /bar にも現れるが、アプリケーションが /bar の中でファイルを修正しようとしてもできない。(もちろん、 /foo は書き込み可能なままである。)この機能は、色々と応用できる。 chroot では、ファイルシステムの一部を書き込み可能にすることができる。ユーザが、あるコンテナの中ではルートを持ってよいが、いくつかのファイルシステムへ書き込めてはいけない、というように、コンテナに便利である。新しいファイルシステム全体をマウントしておきたくはなかったり、 atime を選択的に更新したいときに、ファイルシステムの一部を読み取り専用にしておくことで、セキュリティの向上が可能となる(自分の FTP サーバを信頼していない場合など)。
(現在の実装は、直接読み込み専用でバインドマウントすることはできない。バインドマウントをまず行って、 - mount --bind /foo /bar - それから ro としてリマウントする - mount -o remount,ro /bar - 必要がある) - KVM の IA64 PPC 及び S390 への移植
Linux 2.6.20 で導入された仮想化ソリューション KVM が x86 以外のアーキテクチャ、 IA64 (Itanium)、 S390 及び PPC をサポートできるように再構築された。
KVM は Xen とは違い Intel VT とか AMD-V とかのハードウェア支援機構を全面的に利用した仮想化方式であるが、移植できたとなると応用範囲が広がりそうである。 - ワイヤレスメッシュネットワーキング (802.11s) ドラフトサポート
1 年前 Linux 2.6.22 で Linux は新しいワイヤレススタックを導入した。 2.6.26 では open80211s プロジェクトによりこのスタックにメッシュネットワーキングが追加された。
- x86 PAT サポート
PAT (ページ属性テーブル) とは、 x86 プロセッサにある機能で、ページごとの粒度でメモリの属性を設定するものである。 PAT は、物理アドレス範囲に対してメモリの種類を設定できる MTRR 設定と相補的なものである。しかしながら、 PAT はページレベルで属性を設定できる点、属性の設定可能な数にハードウェア上の制限が無い点において、 MTRR よりも柔軟性がある。 Linux にこれをサポートさせるための作業は長きに渡っていた(なんと2006年以来である)が、ついにマージされた。
完全に俺の知らない領域だ。。。 Documentation/pat.txt に説明がある。 - プロセス単位の securebits
ファイルシステムのケイパビリティサポートにより、 (set)uid-0 ベースの特権を排除し、代わりにケイパビリティを用いることができるようになった。つまり、この機能がなくても、ファイルシステムのケイパビリティサポートがあれば、ケイパビリティだけでシステムを管理することが(概念的には)可能であり、 (set)uid-0 経由で特権を取得する必要が出てくることは無い。もちろん、概念的に可能であるというのは、現在可能であるとは言ってしまえないということである。現在、特権を行使するのにケイパビリティを活用するように作られたユーザアプリケーションは殆ど無く、まともなシステムを走らせるには、確実に十分とはいえない。さらに、アプリケーションの多くが、そういうふうにアップグレードされないであろうという状況にある。カーネルは、 setuid-0 ベースの特権の需要を満たすべくあり続けるであろう。ピュアケイパビリティのアプリケーションが発展し、 setuid-0 バイナリを置き換えるには、そういったアプリケーションが特権を内包できる機構があることが望ましい。この機構は、プロセス毎バウンディング及び継承可能セット (per-process bounding and inheritable sets) 、さらにプロセスの子供ツリーからの uid-0 スーパーユーザ権限の制限、からなっている。 2.6.26 で導入されたこの機構は、 (set)uid-0 に関連付けられた特権を制限するために活用することができる。制限を開始するには、 CAP_SETPCAP が必要であり、'現在'のプロセスにしかすぐには影響しない。(fork()/exec()を通して継承される。)この securebits の再実装は、システムワイドで、扱いづらく、枯れ果てており、現代のカーネルソースの化石となっている、過去の securebits サポートとは大きく異なっている。
まあ確かに setuid には問題がありまくりなんだが、ここまで糾弾されると逆に擁護したくなるな。本文がわかりづらいので、わかりやすい日本語記事を紹介。何にでも制限かけるという方向にはあまり行ってほしくないけどね。 - KGDB
Linus があれほど嫌がっていたカーネルデバッガがついにマージ。バグ、特にタイミングバグはデバッガで検知するのではなく、人間の注意力でそもそも未然に防ぐべきであるという理想はこの先も変わらないだろうけれど、現実に屈したのか。これはシリアルケーブルでつないだマシンをデバッグするツールである。似て非なるようなのに KDB がある。 - cgroups でデバイスのホワイトリスト
/dev/null デバイスに限り mknod できるようにしたい、などというのを cgroup 単位で許可、禁止できるようになった。 - memtest
カーネル組み込みの memtest 。本家 memtest より機能は乏しいが、 Linux のブート機構を使うことで様々なアーキテクチャで動くという特徴がある。
2008年7月5日土曜日
2008年6月20日金曜日
Firefox 3 のアドレス欄は危険
開発版のころから長らく使っていた Firefox 3 がようやく安定版としてリリースされた。
さて、携帯電話の予測変換で一文字入れて何が候補に出るか、という人格テストが古くからあるが、新たなトレンドとして、Firefox 3 のアドレス欄で一文字入れて何が候補に出るか、という新たなゲームが考えられる。
というわけで、途中までやってみた。
あ: あどけない話
い: 飲み物だから太らない
う: is2005 06/20(きょう)
え: 駅探:乗り換え案内 時刻表 路線検索サービス
お: おいでto F6
か: 飲み物だから太らない
き: is2005 06/20(きょう)
く: マジですごい絵を描くゾウ
…
かなりプライバシーの侵害だねえ。。。
さて、携帯電話の予測変換で一文字入れて何が候補に出るか、という人格テストが古くからあるが、新たなトレンドとして、Firefox 3 のアドレス欄で一文字入れて何が候補に出るか、という新たなゲームが考えられる。
というわけで、途中までやってみた。
あ: あどけない話
い: 飲み物だから太らない
う: is2005 06/20(きょう)
え: 駅探:乗り換え案内 時刻表 路線検索サービス
お: おいでto F6
か: 飲み物だから太らない
き: is2005 06/20(きょう)
く: マジですごい絵を描くゾウ
…
かなりプライバシーの侵害だねえ。。。
2008年6月13日金曜日
New Zealand 人に感謝される
現実逃避に Ubuntu の Xen カーネルに、ちょっとした修正パッチを投げていたところ、なんと役に立ったらしく、わざわざチョコレートまで送ってくれる人が現れた。珍しいこともあるもんだ。
Conkerorを試す
Gecko をベースにしながら、キーボードだけで操作を完結させようという思想のもとに開発されているブラウザ conkeror を試してみた。
現在の HEAD は xulrunner 1.9 上で動作する。
設定ファイルの場所は abount:config の conkeror.rcfile で指定できる。
その記法はさすがに Emacs Lisp のように柔軟ではないが、例えば C-i が tab, C-m が return, C-h が backspace と同じ挙動になって欲しい俺は、次のようにすればいいようだ。
現在の HEAD は xulrunner 1.9 上で動作する。
xulrunner-1.9 /path/to/conkeror/application.ini全般に Emacs 風味であり、C-x b とか M-x といったキーの挙動はまさにそっくりである。リンクを辿る方法は明快で、 w3m より楽であろう。
設定ファイルの場所は abount:config の conkeror.rcfile で指定できる。
その記法はさすがに Emacs Lisp のように柔軟ではないが、例えば C-i が tab, C-m が return, C-h が backspace と同じ挙動になって欲しい俺は、次のようにすればいいようだ。
interactive("send-backspace", function (I) {第一印象は上々なのだが、実際使えるかというと、課題山積と言わざるを得ない。いくつか挙げると:
send_key_as_event(I.window, I.buffer.focused_element, "back_space");
});
define_key(default_base_keymap, "C-h", "send-backspace");
interactive("send-tab", function (I) {
send_key_as_event(I.window, I.buffer.focused_element, "tab");
});
define_key(default_base_keymap, "C-i", "send-tab");
define_key(content_buffer_text_keymap, "C-i", "send-tab");
define_key(default_base_keymap, "C-m", "send-ret"); /* send-ret is predefined. */
- set-mark は実装上の理由からか、 Emacs のそれと挙動が違う。(Firemacsと同じ。)
- Web ページ側の accesskey や イベントハンドラと競合がしばしば起こる。
- 範囲選択は結局マウスのほうが便利である。なぜならキャレットモードで込み入ったレイアウトのページを操作するのは神業を要するからだ。
2008年6月9日月曜日
2008年5月25日日曜日
2008年4月12日土曜日
texinfo で日本語処理
Google で検索すると jtexinfo.tex を利用しないと動作しない、という記事ばかり引っかかるが、手元の環境では
TEX=ptex texi2dvi file.texiとするだけで動作した。
2008年4月3日木曜日
Linux 2.6.25
そろそろリリースが迫ってきたようなので、目立った新機能をいくつかまとめてみる。引用は kernelnewbies.org より。
- RCU プリエンプションサポート
RCU は、Linux で用いられる非常に強力なロック方式であり、単一システム上において非常に多数の CPU にまで適応できる。しかしながら、 Linux を RT OS 化すべく開発されているリアルタイムパッチセットとはうまく適合しない。それは、その一部がプリエンプション不可能であるため、 RT 負荷に対して過大なレイテンシを発生させるからである。2.6.25 では、 RCU もプリエンプション可能となり、レイテンシの原因は削減される。 Linux は、より一歩 RT らしくなる。
確かにありがたい気がするけど、一体どうやって実現されているのか。
ポイントは、今のデータ群を触っているスレッドの数 (A とする)と、昔のデータ群を触っているスレッドの数 (B とする)をいつも数えておくことである。 rcu_read_lock で、 A をインクリメントする。rcu_read_unlock で、 A と B のうち、自分がインクリメントしたほうをデクリメントする。
B は単調減少のはずで、ゼロになれば、昔のデータ群を解放し、 A と B をスイッチする。これを繰り返す。
大まかな設計はこんな感じで、どちらかというと単純だが、これをいかに一切スピンロックとかメモリバリアを使わずにやるか、という細かい実装の話が複雑で、むしろそこに力が入っている。いかにも Linux らしい。(A と B をスイッチしたよ、という情報が各CPUに伝わるのに時間がかかるのを考慮しないといけなかったり、 A や B を CPU ごとに管理しないといけなかったり、とかいった話である。) - FIFO チケットスピンロック
特定の負荷において、スピンロックが不公平になる場合がある。例えば、スピンロックでスピンしているプロセスが、1,000,000回程度までスタベーションすることがある。通常スピンロックにおけるスタベーションは問題にはならない。というのは、スタベーションに気づけるような状態になるよりも先に性能問題が発生するからである。しかしながら、テストで示されているのはその逆で、ロックに対して激しいコンテンションが発生して、プロセッサはロックを闇雲に取る、という、目立たないケースは、常に存在する。新しいスピンロックでは、プロセスは FIFO 順でスピンロックを取るようになる。
スピンロックとか、 RCU とか、いい加減もう枯れてそうだが、まだ改良すべきことはあるようだ。
255 以上のCPUで実行するように設定されたスピンロックは 32 ビット値を、それ以下のCPUの場合は 16 ビットの値を使用するようになった。おまけとして、 Linux がサポートできる CPU の数の理論的上限値は、 65536 プロセッサにまで引き上げられた。 - プロセスメモリ使用量測定の改善
プロセスがどれだけメモリを使っているかを測定するのは、案外難しい。特にプロセス群が使用メモリを共有している場合はそうである。 /proc/$PID/smaps (2.6.14 で追加) のような機能は役に立つが、十分ではなかった。 2.6.25 では、この測定を簡単にする新しい統計値が追加される。プロセスごとに /proc/$PID/pagemaps ファイルが新たに作られ、カーネルはこのファイルの中に、プロセスが使っている各ページに対応する物理ページ配置を(バイナリ形式で)エクスポートする。このファイルを他のプロセスの同じファイルと比べることで、共有しているページがわかる。別のファイル /proc/kpagemaps では、システムのページに関してまた別の種類の統計値を公開している。パッチの作者 Matt Mackall は、 2 つの新しい統計値、 "プロポーショナルセットサイズ (PSS) - 共有ページを共有しているプロセスの数で割ったもの" と、 "ユニークセットサイズ (PSS) - 共有されていないページを数えたもの" を提案している。最初の統計値、 PSS は、 /proc/$PID/smap の中の各ファイルに追加される。この HG リポジトリの中に、これら統計値全てを使うコマンドライン及び GUI ツールのサンプルがある。
あまりメモリまわりは知らないのだが、 2.6.24 までなかったのが疑問な機能ではないだろうか。このあたりの指標は、実は Windows のほうがいいんだろうな。 - メモリ資源コントローラ
メモリ資源コントローラは cgroups ベースの機能である。 cgroups, 別名 "Control Groups" は、 2.6.24 でマージされた機能であり、いくつかの "資源コントローラ" の土台となり、プロセススケジューリングやメモリ確保といった、システムの様々な資源を管理するための汎用的な枠組みとなることを目的としている。 cgroups は、仮想ファイルシステムに基づいた統一されたユーザインタフェースを持っている。管理者は、ファイルシステムから選択したタスクのグループに対して任意の資源制約を割り当てることができる。例えば、 2.6.24 では、 Cpusets と Group Schueduling の二つの資源コントローラがマージされた。前者により、任意に選んだタスクのグループ、すなわち cgroup に対して、 CPU 及び メモリのノードを設定することができるようになり、後者により、 cgroup に CPU の帯域ポリシを設定することができるようになっている。
メモリ資源コントローラにより、タスクグループ -cgroup- に対するメモリの動作を、残りのシステムから分離することができる。- アプリケーションまたはアプリケーションのグループを分離する。メモリを食おうとするアプリケーションを分離し、小さいメモリ量に制限する。
- 制限されたメモリ量の cgroup を作成する。これにより、 mem=XXXX で起動する方法の代わりとなる良い方法である。
- 仮想化ソリューションが、仮想マシンのインスタンスに割り当てたいメモリ量を制御できるようになる。
- CD/DVD 書き込みソフトが、システムの残りによって使われるメモリ量を制御して、利用可能な メモリが不足することにより書き込みが失敗することがないことを保証できるようになる
2.6.24 で登場して便利だな、と思っていた cgroup が早速グレードアップされたようだ。特に OOM のあたりは、うまく使えば非常に魅力的な機能である。さらに I/O とかに適用されていくか。 - latencytop
遅いサーバ、飛び飛びの音声、コマ落ちした動画 - だれもがレイテンシの症状を知っている。しかし、何がシステムの中で本当に起こっているのか、何がレイテンシの原因なのか、どうすれば直るのか…。これらは難しい質問であり、すぐに良い回答があるわけではない。 LatencyTop は、(カーネル、ユーザ空間両方の)ソフトウェア開発者向けの Linux ツールであり、どこでシステムのレイテンシが発生しているのか、どんな種類の操作・動作がレイテンシが発生する原因となっているのかを特定することを目的としている。これを特定すれば、開発者は、最悪のレイテンシ問題を避けるようにコードを変えることができるようになる。
カーネルのスケジューラで、タスクがどこでスリープしているかの統計を取るようである。実際使ってみないことにははっきり言えないが、X 環境とか、込み入った環境でもっさりの原因を解析するには良さげなツールである。タスク構造体に余分なフィールドが取られるので、ディストリビューション標準カーネルには入りにくいだろう。
レイテンシには多くの種類や原因があるが、 LatencyTop は、音飛びとデスクトップの処理落ちを引き起こすような種類、特に、アプリケーションが走って、有用なコードを実行したいが、現在利用可能な資源がない(ゆえにカーネルがプロセスをブロックさせている)場合にフォーカスしている。これは、システムレベルでも、各プロセスレベルでも行うことができ、システムで何が起こっているのか、そして、どのプロセスが遅延させられ、また遅延を引き起こしているのかを見ることができる。
latencytop.org に latencytop のユーザ空間のツールとスクリーンショットがある。
2008年3月29日土曜日
2008年3月19日水曜日
2008年3月16日日曜日
水戸偕楽園・千波公園
ad[es] で2日つなぎ放題
辺境の地に出向くため、 2 日間だけつなぎ放題に変えてみた。つなぎ放題ではなく、 WILLCOM 定額プラン+ファミリーパック+リアルインターネットプラスに変えたほうが、若干安かったようだが、これは間違えた。ともあれ、 WILLCOM の料金プラン変更は、日割り計算になるので、臨機応変に変えるだけでかなりお得になるようだ。
advanced [es] を挿すだけでモデム用のカーネルモジュールがロードされるようにするためには、 Linux 2.6.24 だと何も要らない。しかし、 2.6.22 を使っているので、 /etc/modprobe.d/ws011sh を作って
とした。あらかじめ ad[es] の USB 接続方式はモデムにしておくこと。 PPP は、 pppconfig コマンドで設定して pon/off コマンドで接続/切断する。うまくいかなければ plog コマンドで調査。それでも謎な場合は、ad[es] をリセットすれば復旧することも。
帯域も狭い (30kbps〜80kbps) し、 RTT は無茶苦茶大きい (250ms〜数十秒) 。いろいろパラメータ弄ればもうちょっとマシになるのかも。まあ、無いよりはずっといい。
advanced [es] を挿すだけでモデム用のカーネルモジュールがロードされるようにするためには、 Linux 2.6.24 だと何も要らない。しかし、 2.6.22 を使っているので、 /etc/modprobe.d/ws011sh を作って
alias usb:v04DDp91ACd*dc*dsc*dp*ic*isc*ip* ipaq
options ipaq vendor=0x04dd product=0x91ac
とした。あらかじめ ad[es] の USB 接続方式はモデムにしておくこと。 PPP は、 pppconfig コマンドで設定して pon/off コマンドで接続/切断する。うまくいかなければ plog コマンドで調査。それでも謎な場合は、ad[es] をリセットすれば復旧することも。
帯域も狭い (30kbps〜80kbps) し、 RTT は無茶苦茶大きい (250ms〜数十秒) 。いろいろパラメータ弄ればもうちょっとマシになるのかも。まあ、無いよりはずっといい。
2008年2月29日金曜日
2008年2月2日土曜日
さらばuim
emacs (emacs22-gtk)の起動が、Ubuntu gutsyよりDebian lennyのほうが、明らかにもっさりしているので、いろいろ調べてみたところ、IMのせいと判明(IMの何の処理のせいかは調べていない)。というわけで、Debianのほうも、uimから scim-bridgeに乗り換えることにした。
ちなみにscim-bridgeは、scimやscim-immoduleのさまざまな不安定性を解消するために開発された機構で、実際Ubuntuで使っていてかなり安定している。ただし、パッケージがim-switchに未対応なので若干の作業が要る。2008 年 6 月 2 日追記: scim-bridge パッケージの更新により、現在ではこの作業は不要となっている。
# cat > /etc/X11/xinit/xinput.d/scim-bridge
XIM=SCIM
XIM_PROGRAM=/usr/bin/scim
XIM_ARGS="-d"
if [ -e /usr/lib/gtk-2.0/*/immodules/im-scim-bridge.so ]; then
GTK_IM_MODULE=scim-bridge
else
GTK_IM_MODULE=xim
fi
if [ -e /usr/lib/qt3/plugins/inputmethods/im-scim-bridge.so ]; then
QT_IM_MODULE=scim-bridge
else
QT_IM_MODULE=xim
fi
DEPENDS="scim, scim-bridge-agent, scim-bridge-client-gtk | scim-bridge-client-qt"
# update-alternatives --install /etc/X11/xinit/xinput.d/ja_JP xinput-ja_JP /etc/X11/xinit/xinput.d/scim-bridge 100
2008 年 6 月 2 日追記: 確かに emacs の起動は uim から scim への乗り換えによりスピードアップするが、それよりもっと俊敏に起動する方法は、 xim を使わず uim-el や anthy-el を使うことであった。 emacs で xim を使わないようにするには、 ~/.Xdefaults に
ちなみにscim-bridgeは、scimやscim-immoduleのさまざまな不安定性を解消するために開発された機構で、実際Ubuntuで使っていてかなり安定している。ただし、パッケージがim-switchに未対応なので若干の作業が要る。2008 年 6 月 2 日追記: scim-bridge パッケージの更新により、現在ではこの作業は不要となっている。
# cat > /etc/X11/xinit/xinput.d/scim-bridge
XIM=SCIM
XIM_PROGRAM=/usr/bin/scim
XIM_ARGS="-d"
if [ -e /usr/lib/gtk-2.0/*/immodules/im-scim-bridge.so ]; then
GTK_IM_MODULE=scim-bridge
else
GTK_IM_MODULE=xim
fi
if [ -e /usr/lib/qt3/plugins/inputmethods/im-scim-bridge.so ]; then
QT_IM_MODULE=scim-bridge
else
QT_IM_MODULE=xim
fi
DEPENDS="scim, scim-bridge-agent, scim-bridge-client-gtk | scim-bridge-client-qt"
# update-alternatives --install /etc/X11/xinit/xinput.d/ja_JP xinput-ja_JP /etc/X11/xinit/xinput.d/scim-bridge 100
2008 年 6 月 2 日追記: 確かに emacs の起動は uim から scim への乗り換えによりスピードアップするが、それよりもっと俊敏に起動する方法は、 xim を使わず uim-el や anthy-el を使うことであった。 emacs で xim を使わないようにするには、 ~/.Xdefaults に
Emacs.UseXIM: falseなどと記述して X を再起動 (または X リソースを更新) する。というわけで、 scim-bridge を使う必然性がなくなったので、 uim に戻すことにした。
2008年1月27日日曜日
2008年1月26日土曜日
Debian Live
casperと、live-initramfs は、インストールすると、CD-ROM, USBメモリ, ネットワークから起動可能なライブシステム対応のinitrdを作ってくれるパッケージである。さらに、chroot環境の構築、casperまたはlive-initramfsによるinitrdの作成、chroot環境のsquashfs化など、ライブシステムの構築に必要な諸々の処理を一括してやってしまおうというのがlive-helperパッケージである。
live-initramfsとcasperの差だが、live-initramfsのほうが、より柔軟な設定が可能である。例えば、ブートオプションで、keyb=jp106 とか utc=no とか、 live-getty とか指定できるようになっている。一方、問題として挙げられるのは、現状upstartなUbuntuへの対応がいまいちな点である。
live-helperは、まだ荒削りで、コマンド一発とはいかず、試行錯誤の手間はかかる。とりあえず、Debian etchの標準システム入りネットワークブートイメージを作るには:
# lh_config -b net -d etch -a i386 -m http://cdn.debian.or.jp/debian/ --mirror-binary http://cdn.debian.or.jp/debian/ --security disabled --initramfs live-initramfs -p none --packages "console-tools console-data console-common" --tasksel tasksel --tasks standard
# ( cd config/chroot_local-packages; wget http://cdn.debian.or.jp/debian/pool/main/l/live-initramfs/live-initramfs_1.110.7-1_all.deb )
# lh_build
2番目のコマンドはlive-initramfsパッケージをlennyから借りるという意味。etch-backportsから借りてもいいがバージョン1.95.2-1~bpo.1はlive-gettyオプションにバグがある。
live-initramfsとcasperの差だが、live-initramfsのほうが、より柔軟な設定が可能である。例えば、ブートオプションで、keyb=jp106 とか utc=no とか、 live-getty とか指定できるようになっている。一方、問題として挙げられるのは、現状upstartなUbuntuへの対応がいまいちな点である。
live-helperは、まだ荒削りで、コマンド一発とはいかず、試行錯誤の手間はかかる。とりあえず、Debian etchの標準システム入りネットワークブートイメージを作るには:
# lh_config -b net -d etch -a i386 -m http://cdn.debian.or.jp/debian/ --mirror-binary http://cdn.debian.or.jp/debian/ --security disabled --initramfs live-initramfs -p none --packages "console-tools console-data console-common" --tasksel tasksel --tasks standard
# ( cd config/chroot_local-packages; wget http://cdn.debian.or.jp/debian/pool/main/l/live-initramfs/live-initramfs_1.110.7-1_all.deb )
# lh_build
2番目のコマンドはlive-initramfsパッケージをlennyから借りるという意味。etch-backportsから借りてもいいがバージョン1.95.2-1~bpo.1はlive-gettyオプションにバグがある。
2008年1月23日水曜日
2008年1月21日月曜日
PukiWikiが駄目な10の理由
主にHikiと比較しての話。
- デフォルトの本文の文字が小さすぎる。
- 見出しもリストも3階層までに特に根拠もなく制限されている。
- ブロック要素とかインライン要素とか専門用語で溢れる説明文。
そんな面倒を意識したくないからこそWikiを使うんだと思うんだが。 - やや関連するが、プラグインの表記法がブロックとインラインで異なる。
こういうのは同じにしてプログラムが判定すべき。 - インラインプラグインが&で始まるのは設計ミス。
http://example.com/?hoge&br;
などはURLの規格上問題ないが、Pukiwiki上では表現できない。 - 長文の整形済みテキスト用の表記法がない。
ソースコードなどをそのまま貼り付けられない。 - いわゆるテーブルレイアウトである。
このため横長の整形済みテキストがあるとページ全体が横長になる。
table-layout:fixedで応急処置は可能。 - Content-Type: text/htmlとしては非推奨の規格であるXHTML 1.1に準拠している。
- キャッシュを禁止している。
「このページの有効期限が切れています」などと毎度表示されるのはお節介だ。 - CVS などを用いた効率的な履歴管理に対応していない。
2008年1月19日土曜日
登録:
投稿 (Atom)