Чи можу я пришвидшити вилку цигувіна?


15

Я натрапив на повідомлення, в якому обговорювали швидкість розгортання в Cygwin, даючи очікувану "швидкість вилки" в Windows XP близько 30-50 в секунду ( посилання )

У мене є дует Core 2 (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, ніж інші, якими я користувався раніше, насправді були набагато повільніше.

Оновлення

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


1
Cygwin буде завжди повільним, повільнішим. Навіть VirtualBox / VMWare дасть більш високу продуктивність, або якщо вам потрібне середовище розробника, перейдіть з msys. Але це ... не знаю .. ніколи насправді цигувін не використовував.
Apache

+1 за приємний, простий орієнтир виделки! Щойно запустив це на 5-ти доларовий VPS Linux в місяць, щоб порівняти з моїм ноутбуком i7 Windows, а VPS набрав на 30 разів більше.
Марк К Коуан

Відповіді:


2

Це не має нічого спільного з тим, що виделка повільна.

Я бачив, як Cygwin запускає собаку повільно, коли в домашньому каталозі Windows був мережевий диск. Кожна команда шукала б там бінарні файли, які надзвичайно сповільнювали.

дивись, якщо

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

швидше, якщо так, то, мабуть, ваша проблема

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


1
На жаль, жорстке кодування шляхів не суттєво відрізняється. strace працює в Cygwin, але нічого не вискакує на мене, коли я дивлюся на слід.
Ендрю Ейлетт

1

Я боюся, що ви нічого з цим не можете зробити.

У Windows немає вбудованої системи fork()виклику, тому Cygwin повинен це наслідувати. Однак реалізація цієї емуляції дуже неефективна. (Див. Поширені запитання про Cygwin )

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 @ 4GHz, 32GiB RAM Windows 10 Pro box проти слабким одноядерним, 1GiB RAM VPS


0

Ви не бачите виделок; Ви бачите форк, 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.