У меня есть система Windows 10 с включенным WSL v2 Ubuntu. Если я запускаю bash из Windows для вызова программы, установленной в Linux, это очень медленно (500-800 мс) даже для простой команды.
Я использовал Measure-Command в PowerShell, чтобы рассчитать время:
PS C:UsersthomaDesktop> Measure-Command { bash -c "echo Hello" }
...
TotalMilliseconds : 655,8447
Для сравнения cmd занимает дробь:
PS C:UsersthomaDesktop> Measure-Command { cmd /c echo Hello }
...
TotalMilliseconds : 17,5062
Есть идеи, почему это так медленно? Я деактивировал все антивирусные программы.
1 ответ
Если вы недавно заметили увеличение времени запуска, изменилось ли что-нибудь в вашем ~/.profile или же ~/.bashrc (или любую другую конфигурацию запуска)?
С использованием bash для запуска WSL немного устарел, поэтому я собираюсь использовать wsl в следующих примерах. По крайней мере, он более гибкий.
Вы не упоминаете в своем вопросе, работал ли WSL, когда вы выполняли свой единственный и неповторимый Measure-Command против этого. Сделаем это несколько раз, с холодным запуском и теплым запуском:
Сначала я завершаю экземпляр WSL с помощью wsl --terminate Ubuntu и подтвердите, что он остановлен с помощью wsl -l -v.
Потом, Measure-Command { wsl -e bash -noprofile -norc -c "echo Hello" }. Это сохраняет bash от чтения стартовой конфигурации.
Мои результаты при новом запуске WSL стабильно составляли около 280 мс. Второй прогон с уже запущенным WSL был между 96 и 100 мс.
Ваш cmd Например, для меня это было около 17 мс, с одним выбросом 34 мс. Конечно, CMD почти всегда загружается в Windows, поскольку он так часто используется. Так что (насколько мне известно) для него никогда не бывает «времени холодного запуска».
Также, для справки, из в WSL, я использовал hyperfine чтобы проверить то же самое (и наоборот):
> hyperfine 'bash -noprofile -norc -c "echo Hello"'
Benchmark #1: bash -noprofile -norc -c "echo Hello"
Time (mean ± σ): 1.2 ms ± 0.6 ms [User: 1.2 ms, System: 0.1 ms]
Range (min … max): 0.8 ms … 5.2 ms 1660 runs
> hyperfine 'powershell.exe -NoProfile -c "echo Hello"'
Benchmark #1: powershell.exe -NoProfile -c "echo Hello"
Time (mean ± σ): 263.5 ms ± 6.6 ms [User: 5.6 ms, System: 0.3 ms]
Range (min … max): 256.6 ms … 279.5 ms 11 runs
> hyperfine 'cmd.exe -c "echo Hello"'
Benchmark #1: cmd.exe -c "echo Hello"
Time (mean ± σ): 27.9 ms ± 2.4 ms [User: 3.6 ms, System: 0.4 ms]
Range (min … max): 23.7 ms … 34.0 ms 98 runs
> hyperfine 'pwsh.exe -NoProfile -c "echo Hello"'
Benchmark #1: pwsh.exe -NoProfile -c "echo Hello"
Time (mean ± σ): 461.1 ms ± 7.7 ms [User: 5.6 ms, System: 1.4 ms]
Range (min … max): 453.9 ms … 476.5 ms 10 runs
