Cygwin очень медленно выполняет команды в XP. Что бы это могло быть? - PullRequest
5 голосов
/ 17 ноября 2011

Мой вопрос похож на

Я думаю, что моя проблема вызвана другой проблемой.

Вот пример чрезвычайно медленных команд в Cygwin:

time for i in {1..10} ; do bash -c "echo Hello" ; done

Hello
...

real    0m21.588s
user    0m0.458s
sys     0m0.989s

Что-то вызывает это ... но что это может быть?

Вещи, которые я пробовал:

  • Отключение брандмауэра Windows и основ безопасности Windows.
  • У меня нет других антивирусных продуктов.
  • Я пытался убить различные пользовательские процессы, чтобы посмотреть, может ли какой-либо из них вмешиваться - не повезло.
  • Я не подключен ни к одной сети.
  • Если я запускаю команды в C:\cygwin\bin через windows CMD, например, C:\cygwin\bin\ls.exe, они все еще медленные.

Затем я попытался запустить эту команду, чтобы лучше понять, что происходит:

strace -o bash.strace bash -c "echo hello"

Из того, что я вижу, есть одна строка, которая занимала 90% времени:

(в случае, если неясно, что это строка, начинающаяся с 1028210 - я включил другие строки для контекста)

  5       5 [main] bash 1088 open_shared: name shared.5, n 5, shared 0x60FB0000 (wanted 0x60FB0000), h 0x74C
208     213 [main] bash 1088 heap_init: heap base 0x530000, heap top 0x530000
118     331 [main] bash 1088 open_shared: name S-1-5-21-2025429265-1957994488-1801674531-1003.1, n 1, shared 0x60FC0000 (wanted 0x60FC0000), h 0x748
 85     416 [main] bash 1088 user_info::create: opening user shared for 'S-1-5-21-2025429265-1957994488-1801674531-1003' at 0x60FC0000
 83     499 [main] bash 1088 user_info::create: user shared version 6112AFB3
344     843 [main] bash 1088 dll_crt0_0: finished dll_crt0_0 initialization
283    1126 [main] bash 1088 _cygtls::remove: wait 0xFFFFFFFF
 87    1213 [main] bash 1088 _cygtls::remove: removed 0x23CE64 element 0
104    1317 [main] bash 1088 _cygtls::remove: wait 0xFFFFFFFF
 70    1387 [main] bash 1088 _cygtls::remove: removed 0x23CE64 element 0
102    1489 [main] bash 1088 _cygtls::remove: wait 0xFFFFFFFF
 70    1559 [main] bash 1088 _cygtls::remove: removed 0x23CE64 element 0
110    1669 [main] bash 1088 _cygtls::remove: wait 0xFFFFFFFF
 70    1739 [main] bash 1088 _cygtls::remove: removed 0x23CE64 element 0
781    2520 [main] bash 1088 _cygtls::remove: wait 0xFFFFFFFF
 76    2596 [main] bash 1088 _cygtls::remove: removed 0x23CE64 element 0
278    2874 [sig] bash 1088 wait_sig: entering ReadFile loop, my_readsig 0x72C, my_sendsig 0x728
1028210 1031084 [main] bash 1088 mount_info::conv_to_posix_path: conv_to_posix_path (C:\cygwin\home\Adam, no-keep-rel, no-add-slash)
107 1031191 [main] bash 1088 normalize_win32_path: C:\cygwin\home\Adam = normalize_win32_path (C:\cygwin\home\Adam)
 59 1031250 [main] bash 1088 mount_info::conv_to_posix_path: /home/Adam = conv_to_posix_path (C:\cygwin\home\Adam)
11535 1042785 [main] bash 1088 _cygwin_istext_for_stdio: fd 0: not open
 69 1042854 [main] bash 1088 _cygwin_istext_for_stdio: fd 1: not open
 62 1042916 [main] bash 1088 _cygwin_istext_for_stdio: fd 2: not open
360 1043276 [main] bash (1088) open_shared: name cygpid.1088, n 1088, shared 0x60FE0000 (wanted 0x60FE0000), h 0x678
 65 1043341 [main] bash 1088 **********************************************
 46 1043387 [main] bash 1088 Program name: C:\cygwin\bin\bash.exe (pid 1088, ppid 1)
 46 1043433 [main] bash 1088 App version:  1007.7, api: 0.230
 45 1043478 [main] bash 1088 DLL version:  1007.9, api: 0.237
 46 1043524 [main] bash 1088 DLL build:    2011-03-29 10:10
 51 1043575 [main] bash 1088 OS version:   Windows NT-5.1
 45 1043620 [main] bash 1088 Heap size:    402653184
 45 1043665 [main] bash 1088 **********************************************
 45 1043710 [main] bash 1088 pinfo::thisproc: myself->dwProcessId 1088
 50 1043760 [main] bash 1088 time: 1321506515 = time (0)
862 1044622 [main] bash 1088 parse_options: glob (called func)
 78 1044700 [main] bash 1088 parse_options: returning
 45 1044745 [main] bash 1088 environ_init: GetEnvironmentStrings returned 0x10000
 ...

Я не очень понимаю, на какую проблему может ссылаться оскорбительная строка:

mount_info::conv_to_posix_path: conv_to_posix_path (C:\cygwin\home\Adam, no-keep-rel, no-add-slash)

Как я могу отладить эту проблему дальше? У кого-нибудь есть идеи?

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

С момента обновления до последней версии Cygwin (v2.769), это гораздо меньше проблем.(Ранее я использовал v2.738, я думаю)

Под 2.769 та же команда дает гораздо лучшие результаты:

$ time for i in {1..10} ; do bash -c "echo Hello" ; done
Hello
...

real    0m0.641s
user    0m0.379s
sys     0m0.506s

Cygwin все еще медленнее, чем хотелось бы - я в основном использую егодля git и vim, и те, и другие намного медленнее, чем их родные аналоги.

Но теперь это, по крайней мере, гораздо удобнее.

1 голос
/ 17 ноября 2011

Это похоже на идентичный сценарий:

http://cygwin.com/ml/cygwin/2011-08/msg00080.html

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

...