Category:
Computer
日本の多くのエンジニアと同様に、仕事では仕方なく Windows を使っています。
シェル環境がないと不安になってしまうので Cygwin をインストールするわけですが、いかんせん動作が遅い。
zsh の初回起動に数秒、vim と打ち込んでからさらに待たされること数秒… といった具合では、生産性にもモチベーションにも影響が出てきます。
そこで、ちょっと原因を追究してみよう! というのが、この企画です。
# (その 1) と書いてはみましたが、次回以降の予定が特に立っているわけではないです。
# 判ったことを気が向くままに書いていく感じです。
一般に(ユーザランドの)プログラムの動作が遅いという場合、疑うべきポイントは大別して 2 つです。
1. プログラム処理の動作自体に、時間が掛かっている (CPU 時間を消費しているケース)。
2. システムコールが戻らない (ブロックされている)。
2 のケースは多岐に渡りますが、例えば
- ディスクの読み書き待ち
- TCP SYN 再送タイムアウト待ち
- ロック取得待ち / デッドロック
- スレッド wait
- sleep
などが挙げられるでしょう。
これらの観点を zsh に当てはめてみると、以下のような原因を想像しました。
1-1. zsh 自体が、そもそも重い
1-2. zsh の読み込んでいるスクリプトが重い
1-3. zsh の読み込んでいるスクリプトで起動しているプログラムが重い
2-1. I/O がボトルネックになっている
2-2. その他のシステムコールが、何らかの原因で遅い
1-1 については、ほかの Cygwin で動くプログラムも重いので、これは原因ではなさそうです。
1-2 や 1-3 は、十分あり得そうです。独自の .zshrc や補完用スクリプトなどがかなり入っているためです。
2-1 ですが、現在使っているマシンのリソースはかなり潤沢なので、関係なさそうな気がします。
2-2 については、strace で追跡すれば分析できそうです。
ということで、1-2, 1-3, 2-2 について、調査してみたいと思います。
(たぶん続く...)
シェル環境がないと不安になってしまうので Cygwin をインストールするわけですが、いかんせん動作が遅い。
zsh の初回起動に数秒、vim と打ち込んでからさらに待たされること数秒… といった具合では、生産性にもモチベーションにも影響が出てきます。
そこで、ちょっと原因を追究してみよう! というのが、この企画です。
# (その 1) と書いてはみましたが、次回以降の予定が特に立っているわけではないです。
# 判ったことを気が向くままに書いていく感じです。
一般に(ユーザランドの)プログラムの動作が遅いという場合、疑うべきポイントは大別して 2 つです。
1. プログラム処理の動作自体に、時間が掛かっている (CPU 時間を消費しているケース)。
2. システムコールが戻らない (ブロックされている)。
2 のケースは多岐に渡りますが、例えば
- ディスクの読み書き待ち
- TCP SYN 再送タイムアウト待ち
- ロック取得待ち / デッドロック
- スレッド wait
- sleep
などが挙げられるでしょう。
これらの観点を zsh に当てはめてみると、以下のような原因を想像しました。
1-1. zsh 自体が、そもそも重い
1-2. zsh の読み込んでいるスクリプトが重い
1-3. zsh の読み込んでいるスクリプトで起動しているプログラムが重い
2-1. I/O がボトルネックになっている
2-2. その他のシステムコールが、何らかの原因で遅い
1-1 については、ほかの Cygwin で動くプログラムも重いので、これは原因ではなさそうです。
1-2 や 1-3 は、十分あり得そうです。独自の .zshrc や補完用スクリプトなどがかなり入っているためです。
2-1 ですが、現在使っているマシンのリソースはかなり潤沢なので、関係なさそうな気がします。
2-2 については、strace で追跡すれば分析できそうです。
ということで、1-2, 1-3, 2-2 について、調査してみたいと思います。
(たぶん続く...)