Я потратил слишком много времени, пытаясь разгадать эту загадку.Я уже исключил обычных подозреваемых, когда речь заходит о медлительности Cygwin.У меня есть две разные установки Cygwin с совершенно разными характеристиками.Ниже это количественно определяется как «производительность разветвления», а также время выполнения операции git difftool
.
Может кто-нибудь предложить, что я должен посмотреть дальше?Быстрая установка cygwin очень удобна, но мне сейчас нужны некоторые современные пакеты, и любые попытки установить, например, python 3.x, приводят к обновлению всей установки (и, следовательно, к замедлению :().
Сводка различий в производительности
+---------------------------+----------------+-----------------+----------------------+
| Desc | Version1(Fast) | Version2(Slow) | Git Bash for Windows |
+---------------------------+----------------+-----------------+----------------------+
| git difftool (System CPU) | 15% | 69% | |
| git difftool (Total Time) | 3.284s | 10.549s | 0.46s |
| fork performance | ~15 | ~10 | ~22 (!!) |
+---------------------------+----------------+-----------------+----------------------+
Описание сравниваемых установок Cygwin
Версия 1 (обозначается 'V1' ниже): Babun Cygwin v 1.2.0 (последняя стабильная версия). Обратите внимание, что сама babun была заброшена, так что эта версия Cygwin (64-разрядная версия) довольно устарела.
Версия 2 (именуемая 'V2' ниже): это был ряд разных вещей:
- V1 обновлен до последней версии с использованием настройки cygwin.exe
- Свежая установка Babun v 1.2.0 (да, так же, как V1 !!)
- Свежая установка cygwin 64-bit
- Свежая установкаБабун ночной (от http://40.114.204.90, У меня нет под рукой вилки Бабун, из которой это сделаноed)
Обычные подозреваемые исключены
Проблема в том, что Version1 по меньшей мере в 3 раза быстрее для операции git и имеет почти на 50% более высокую производительность форка, чем Version2 ната же машина .Я посмотрел на посты «Медленный Cygwin» на SO и в других местах, буквально все, что я мог найти.Это включает в себя:
- Исключено любое программное обеспечение BLODA (посмотрел список BLODA и также попытался открыть cygwin с помощью
CYGWIN=detect_bloda
, что не вызывает никаких сюрпризов. Очень рано об этомобнаружил внедрение ConEmuHK как проблему, которую я с тех пор отключил, но безрезультатно. Кроме того, чтобы исключить что-либо подобное, все следующие тесты выполнялись с использованием исполняемого файла основной оболочки (zsh.exe) или mintty.exe без каких-либо оболочек сверху, например.Conemu. - Используется strace для сравнения библиотек DLL, загружаемых V1 и V2. Очевидно, что специфичные для cygwin библиотеки DLL отличаются, но список библиотек, не относящихся к Cygwin, идентичен.
- У меня также естьпопытался скопировать библиотеки Cygwin DLL в блоках из V1 (быстро) -> V2 (медленно), выполняя rebaseall после каждой операции копирования.
- Я также пытался выяснить, есть ли что-то конкретное, что делает Бабунпри создании переносной установки Cygwin
Мой PATH минимален. Ничего в пути, это общий сетевой ресурс
/usr/local/bin
/usr/local/sbin
/usr/bin
/cygdrive/c/WINDOWS/system32
/cygdrive/c/WINDOWS
/cygdrive/c/WINDOWS/System32/Wbem```
Исключил проблемы LDAP, создав статические /etc/passwd
и /etc/group
и настроив /etc/nsswitch.conf
следующим образом:
Подробная статистика производительности
Ниже приведена подробная информация о разнице в производительности.
Версия 1 - Производительность
? babun --version
babun version 1.2.0
Created and maintained by Tom Bujok (@tombujok)
Copyright (c) 2014-2015.
~
? while (true); do date --utc; done | uniq -c
11 Tue, Apr 16, 2019 8:16:43 AM
13 Tue, Apr 16, 2019 8:16:44 AM
13 Tue, Apr 16, 2019 8:16:45 AM
14 Tue, Apr 16, 2019 8:16:46 AM
14 Tue, Apr 16, 2019 8:16:47 AM
15 Tue, Apr 16, 2019 8:16:48 AM
14 Tue, Apr 16, 2019 8:16:49 AM
13 Tue, Apr 16, 2019 8:16:50 AM
14 Tue, Apr 16, 2019 8:16:51 AM
13 Tue, Apr 16, 2019 8:16:52 AM
13 Tue, Apr 16, 2019 8:16:53 AM
12 Tue, Apr 16, 2019 8:16:54 AM
14 Tue, Apr 16, 2019 8:16:55 AM
13 Tue, Apr 16, 2019 8:16:56 AM
14 Tue, Apr 16, 2019 8:16:57 AM
❯ time git -C ~/some-git-repo difftool "HEAD~^\!"
0.10s user 0.40s system 15% cpu 3.284 total
Версия 2 - Производительность
Последний 64-битный Cygwin на этот пост
❯ time git -C ~/some-git-repo difftool "HEAD~^\!"
0.14s user 7.17s system 69% cpu 10.549 total
? while (true); do date --utc; done | uniq -c
4 Tue, Apr 16, 2019 8:21:25 AM
10 Tue, Apr 16, 2019 8:21:26 AM
9 Tue, Apr 16, 2019 8:21:27 AM
10 Tue, Apr 16, 2019 8:21:28 AM
10 Tue, Apr 16, 2019 8:21:29 AM
10 Tue, Apr 16, 2019 8:21:30 AM
10 Tue, Apr 16, 2019 8:21:31 AM
10 Tue, Apr 16, 2019 8:21:32 AM
10 Tue, Apr 16, 2019 8:21:33 AM
10 Tue, Apr 16, 2019 8:21:34 AM
9 Tue, Apr 16, 2019 8:21:35 AM
10 Tue, Apr 16, 2019 8:21:36 AM