🕌

WSL2の「npm install」の速度改善

に公開

その1「ネームサーバーの変更」

npm installで固まる問題があり、それの解決のため
https://memoryclip.uchiida.com/2021/12/wsl2_change_resolv_conf/
の情報を参考にした。

wsl.confに

[network]
generateResolvConf = false

を追加した
/etc/resolv.conf

/mnt/wsl/resolv.conf
のシンボリックリンクだったため
シンボリックリンクとしての、/etc/resolv.conf を一旦削除したうえで
実ファイルとして、
/etc/resolv.conf
の中身を

nameserver 8.8.8.8
nameserver 8.8.4.4

とした。
これで、npm install は固まらなくなった

なお、ネームサーバーの
nameserver 8.8.8.8
nameserver 8.8.4.4
は、GoogleのDNSを使う方法のようだ。

これでどうして固まる問題が解消したかの詳細までは不明でござる

★★★
<追記>最近は、

nameserver 1.1.1.1
nameserver 1.0.0.1

のclaude flareのDNSも試している

https://taiki-pc.com/たった1分でネットを爆速に!(dns変更)/

を参照のこと。

その2「Large Send Offload Version」を「Disabled」

参考)
https://qiita.com/shigeyf/items/32940a1bec550ba8c702

Hyper-Vそのものは、WSL2以外でも使う仮想化技術
Hyper-VをWSL2以外のもので使うケースでは、LSOがEnabledのほうが高速であることが多いため
Hyper-Vでのデフォルト値はEnabledになってるらしい
しかし、
Hyper-VをWSL2で使う場合は、LSOがEnabledだと逆に遅延の原因になるらしい
私は、Hyper-VをWSL2でしか使わないため
LSOをDisabledにしたほうがよい。

そのため、対処したのが、下記のとおり


Copyright (C) Microsoft Corporation. All rights reserved.

新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6

PS C:\Users\USER> Get-NetIPConfiguration -InterfaceAlias "vEthernet (WSL)"


InterfaceAlias       : vEthernet (WSL)
InterfaceIndex       : 26
InterfaceDescription : Hyper-V Virtual Ethernet Adapter
IPv4Address          : 172.30.112.1
IPv6DefaultGateway   :
IPv4DefaultGateway   :
DNSServer            : fec0:0:0:ffff::1
                       fec0:0:0:ffff::2
                       fec0:0:0:ffff::3



PS C:\Users\USER> Get-NetAdapterAdvancedProperty -Name "vEthernet (WSL)" | Where-Object DisplayName -Match "Large Send Offload"

Name                      DisplayName                    DisplayValue                   RegistryKeyword RegistryValue
----                      -----------                    ------------                   --------------- -------------
vEthernet (WSL)           Large Send Offload Version ... Enabled                        *LsoV2IPv4      {1}
vEthernet (WSL)           Large Send Offload Version ... Enabled                        *LsoV2IPv6      {1}

で、Large Send Offload VersionがEnabledになってたら、Disabledにする

下記は、管理者権限でPowerShellを起動して行う

PS C:\Users\USER>

PS C:\Users\USER> Set-NetAdapterAdvancedProperty -Name "vEthernet (WSL)" -DisplayName "Large Send Offload Version 2 (IPv4)" -DisplayValue "Disabled"
PS C:\Users\USER> Set-NetAdapterAdvancedProperty -Name "vEthernet (WSL)" -DisplayName "Large Send Offload Version 2 (IPv6)" -DisplayValue "Disabled"
PS C:\Users\USER> Get-NetAdapterAdvancedProperty -Name "vEthernet (WSL)" | Where-Object DisplayName -Match "Large Send Offload"

Name                      DisplayName                    DisplayValue                   RegistryKeyword RegistryValue
----                      -----------                    ------------                   --------------- -------------
vEthernet (WSL)           Large Send Offload Version ... Disabled                       *LsoV2IPv4      {0}
vEthernet (WSL)           Large Send Offload Version ... Disabled                       *LsoV2IPv6      {0}


PS C:\Users\USER>

その3「高速スタートアップを無効」

コントロール パネル\ハードウェアとサウンド\電源オプション
で、
電源ボタンの動作を選択する

高速スタートアップを有効にする
にチェックがあったら、
チェックを外す

高速スタートアップ機能は、WSL2の動作に影響を与える可能性があるとのこと

高速スタートアップを無効にしてPC再起動

Discussion