Могу ли я ускорить форк Cygwin?


15

Я наткнулся на статью, в которой обсуждается скорость разветвления в Cygwin, и в Windows XP ожидаемая «скорость разветвления» составляет около 30-50 в секунду ( ссылка ).

У меня есть Core 2 Duo (1,79 ГГц), который я ожидаю получить сравнимые результаты, но он управляет только 8 разветвлениями в секунду (а иногда и намного меньше):

$ while (true); do date --utc; done | uniq -c
      5 Wed Apr 21 12:38:10 UTC 2010
      6 Wed Apr 21 12:38:11 UTC 2010
      1 Wed Apr 21 12:38:12 UTC 2010
      1 Wed Apr 21 12:38:13 UTC 2010
      8 Wed Apr 21 12:38:14 UTC 2010
      8 Wed Apr 21 12:38:15 UTC 2010
      6 Wed Apr 21 12:38:16 UTC 2010
      1 Wed Apr 21 12:38:18 UTC 2010
      9 Wed Apr 21 12:38:19 UTC 2010

Можете ли вы предложить что-нибудь, что я мог бы сделать, чтобы ускорить процесс? Эта машина работает намного медленнее в Cygwin, чем другие, которые я использовал ранее, которые на самом деле были намного медленнее.

Обновить

Позвольте мне обосновать мой вопрос: я не верю, что более быстрый форк волшебным образом улучшит мою жизнь, но я считаю, что этот тест является хорошим прокси для проблем производительности, которые я вижу в bash из-за нормального использования внешних исполняемых файлов рассчитать значения. Я обнаружил, что заметно ускоряю работу Cygwin, просматривая сценарии запуска оболочки и bash-завершение и пытаясь заменить внешние команды внутренними; в Linux это не проблема. Однако часто это невозможно, и в настоящее время моему ПК требуется ~ 14 секунд, чтобы запустить оболочку с теплым кэшем и без нагрузки.


1
Cygwin всегда будет медленным, медленным. Даже VirtualBox / VMWare обеспечит более высокую производительность, или, если вам нужна среда разработки, используйте msys. Но это ... не знаю ... никогда не находил Cygwin пригодным для использования.
Apache

+1 за хороший, простой тест вилки! Просто запустил это на Linux VPS за 5 $ / месяц, чтобы сравнить с моим ноутбуком i7 с Windows, и VPS набрал в 30 раз больше.
Марк К Коуэн

Ответы:


2

Это не имеет ничего общего с медленной развилкой.

Я видел, как cygwin медленно запускал собаку, когда каталог «home» на Windows находился на сетевом диске. Каждая команда будет искать там двоичные файлы, которые сильно замедляют работу.

видишь ли, если

while (true); do /bin/date --utc; done | uniq -c

быстрее, если так, то это, вероятно, ваша проблема

в противном случае попробуйте запустить bash через strace / ltrace (если они даже работают на cygwin) и посмотрите, что он делает, если для выполнения даты требуется 1 секунда.


1
К сожалению, жесткое кодирование путей не делает заметной разницы. strace работает в Cygwin, но ничего не выскакивает у меня, когда я смотрю на след.
Эндрю Айлетт

1

Боюсь, с этим ничего не поделаешь.

Windows не имеет fork()системного вызова, поэтому Cygwin должен подражать этому. Однако реализация этой эмуляции очень неэффективна. (См. Cygwin FAQ )

MSYS2, который часто используется в приложениях, где требуется, возможно, полнофункциональная Linux-подобная среда командной строки в Windows, основан на Cygwin, поэтому на него это тоже влияет.

Это на самом деле так плохо, что в fork()Windows по крайней мере на порядок медленнее, чем в Linux

msys2bash-windows-box$ time { date; }
Sa, 24. Feb 2018 16:51:44

real    0m0,046s
user    0m0,000s
sys     0m0,000s

msys2bash-windows-box$ while (true); do /bin/date --utc; done | uniq -c
     13 Sa, 24. Feb 2018 15:57:18
     17 Sa, 24. Feb 2018 15:57:19
     16 Sa, 24. Feb 2018 15:57:20


bash-linux-box$ time { date; }
Sat Feb 24 15:51:54 UTC 2018

real    0m0.002s
user    0m0.000s
sys     0m0.000s

bash-linux-box$ while (true); do date --utc; done | uniq -c
    211 Sat Feb 24 15:56:35 UTC 2018
    286 Sat Feb 24 15:56:36 UTC 2018
    260 Sat Feb 24 15:56:37 UTC 2018

Приведенный выше пример показывает разницу между i5-2500k @ 4 ГГц, 32 ГБ ОЗУ Windows 10 Pro box и слабым одноядерным, 1 ГБ ОЗУ VPS


0

Вы не видите вилки; вы видите fork, exec, системный вызов для чтения времени суток, форматирования и преобразования выходных данных. Не говоря уже о параллельном распределении времени.

На каком основании вы говорите, что другие машины "на самом деле были медленнее"? Есть много вещей, которые влияют на фактическую скорость компьютера и восприятие пользователем скорости компьютера. Что вы делаете, когда скорость в секунду / сек является хорошим показателем производительности? Какова скорость памяти, архитектура и объем? Скорость дискового ввода-вывода и буферизация?

Как вы думаете, что будет делать больше форкс / сек: Core i7 под управлением Vista с 512 МБ ОЗУ или Celeron под минимальным Linux с 2 ГБ?


@ mpez0: пожалуйста, смотрите мое обновленное обоснование. Чтобы конкретно ответить на ваши вопросы, я хочу сказать, что они были медленнее, потому что они были более старой архитектуры с более низкой тактовой частотой, меньшей (и более медленной) оперативной памятью и более старым, более медленным диском, но все же XP. Linux почти всегда будет быстрее разветвляться, потому что он использует модель разветвления в ядре, а Windows - нет. У меня есть P3, который оценивает ~ 60 на этом тесте :).
Эндрю Айлетт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.