Медленный bash под WSL

У меня есть система 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 ответ
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

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *