Mosh on Mona が OS 側の改善でかなり速く起動するようになった
グラフを見れば一目瞭然。ファイルシステムに block cache を導入。リンカ・ローダーに PE cache を導入したらこんなに高速化した。グラフ上は目標値は Ubuntu amd64 で実際に Mosh を起動して測定した物。Mona が起動している KVM のホストなので目標値そのものに到達するのは無理だと思われる。
block cache
block driver が処理する block 単位で cache をする block cache を導入。OS の起動が目に見えて速くキビキビした。disk read が遅いというのは知識や経験からも知っているのだが自分の OS だとさらに深く感じるものがある。
PE cache
オブジェクトファイルの parse やイメージ作成を全てキャッシュする。変更がなかったバイナリファイルはキャッシュしておいて即座にロードしたほうが速い。
以下計測時のメモ。
前回 Mona に block cache を導入したがまだ Linux と比較してかなりの開きがあることが分かる。比べて見てよう。
empty.sps
test-imports.sps
遅いのはプロセス外部
上の計測により Mosh の main 突入以前に 100 msec ほど使っていて足枷になっていることが分かった。
更に計測するとプロセス外は全て monapi_call_process_execute_file_get_tid で消費されていることが分かった。
- > Process Server の ExecuteFile で全て
- > 100 msec のうち ExecuteProcess 20 msec、MSG_PROCESS_CREATE_IMAGE に 80 msec
- > PELinker pe(msg.str, msg.arg1 == MONAPI_TRUE); が 80 msec
- > これは PE リンカ。バイナリが変更されていなかったらキャッシュすれば良い。
- > 現時点では CD-ROM がマウントされている /APPS 以下のバイナリはキャッシュしてしまおう
- > MSG_PROCESS_CREATE_IMAGE が 10msec 以下になった