何が重かったか
tmux+zshな環境を利用しているのですが、zshでコマンドなしでEnterを連続で押したときやtmux環境を保存・復元するtmux-resurrectが激重でした。特に後者は保存・復元にそれぞれ1分程度かかっていました (同程度のマシンで普通のlinuxであれば5秒とかからない処理です)。
ちなみに、shellから呼び出したプログラムの速度は特段遅く感じることはありませんでした。
原因と解決策
デフォルトでWSL2のshellにWindowsのPATHが含まれているのですが、これが原因だったようです。 ので、これをしない設定にしました。
以下の内容を /etc/wsl.conf
に追記して再起動するだけです。
[interop] appendWindowsPath = false
ちなみにこの設定は Build 17713 以降でのみ使えるようです。
(追記) 副作用
WSL2のPATHからWindows由来のものを消すと、当然ながらWSL2からWindows側のコマンドを直接叩くことができなくなります。たまに手動で利用する場合であればフルパス指定すればよいですが、頻繁に利用するプログラムが存在する場合や外部のプログラムからPATHを前提としたコマンド呼び出しがある場合は困ったことになります。 応急処置として、PATHが通った場所にシンボリックリンクを張ることで解決できます。
例1: VSCode
WSL2からWindowsにインストールされたVSCodeを直接開くには専用のシェルスクリプトを経由する必要がある
sudo ln -s '/mnt/c/Users/<user name>/AppData/Local/Programs/Microsoft VS Code/bin/code' /usr/local/bin/code
例2: Docker for Windows (w/ VSCode remote container)
VSCode remote containerはその起動時に docker-credential-desktop.exe
がPATHにあることを前提としたスクリプトが実行される (最近のバージョンでは不要になったかも?)
sudo ln -s '/mnt/c/Program Files/Docker/Docker/resources/bin/docker-credential-desktop.exe' /usr/local/bin/docker-credential-desktop.exe
参考
WSL、Windows の PATH も一緒に持ってきてしまうらしく、UNIX 側に必要ない PATH を削るとそこそこ速くなるという知見を得た。
— mattn (@mattn_jp) December 26, 2019