Article ID No. 13320843830 (Delete) | New Date & Time 2010 2011 2012 2013 2014 /1 2 3 4 5 6 7 8 9 10 11 12 /1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 :0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 :0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 Category Title Content 日本の多くのエンジニアと同様に、仕事では仕方なく 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 について、調査してみたいと思います。 (たぶん続く...) Password