cygwin의 포크 속도를 높일 수 있습니까?


15

Cygwin의 포크 속도에 대해 게시 한 게시물을 보았습니다 .Windows XP에서 초당 약 30-50의 예상 포크 속도를 제공합니다 ( 링크 )

필자는 비슷한 결과를 얻을 것으로 예상되는 코어 2 듀오 (1.79GHz)를 가지고 있지만 초당 약 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에서 볼 수있는 성능 문제에 대한 좋은 프록시라고 생각합니다 값을 계산합니다. 쉘 시작 스크립트와 bash-completion을 통해 외부 명령을 내부 명령으로 대체하여 Cygwin에서 눈에 띄는 속도를 얻습니다. 리눅스에서는 이것이 문제가되지 않습니다. 그러나 종종 이것이 불가능하며 내 PC는 현재 웜 캐시와로드없이 셸을 시작하는 데 ~ 14 초가 걸립니다.


1
Cygwin은 항상 느리고 느립니다. VirtualBox / VMWare도 더 빠른 성능을 제공하거나 개발 환경이 필요한 경우 msys를 사용하십시오. 그러나 이것은 ... 모릅니다 .. 실제로 cygwin을 사용할 수있는 것을 찾지 못했습니다.
Apache

멋지고 간단한 포크 벤치 마크를 위해 +1! 내 i7 Windows 랩톱과 비교하기 위해 월 $ 5 Linux VPS에서 이것을 실행하면 VPS는 30 배 더 높습니다.
Mark K Cowan

답변:


2

이것은 포크가 느린 것과는 아무 관련이 없습니다.

Windows "홈"디렉토리가 네트워크 드라이브에있을 때 cygwin이 개를 느리게 실행하는 것을 보았습니다. 모든 단일 명령은 바이너리를 검색하여 작업 속도가 크게 느려집니다.

경우 참조

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

더 빠르면 아마도 문제 일 것입니다.

그렇지 않으면 strace / ltrace (cygwin에서도 작동하는 경우)를 통해 bash를 실행하고 날짜를 실행하는 데 1 초가 걸릴 때 수행중인 작업을 확인하십시오.


1
불행히도, 경로를 하드 코딩하면 뚜렷한 차이가 없습니다. strace는 Cygwin에서 작동하지만 추적을 볼 때 아무것도 튀지 않습니다.
Andrew Aylett

1

나는 당신이 이것에 대해 할 수있는 일이별로 두렵습니다.

Windows에는 기본 시스템 fork()콜이 없으므로 Cygwin이이를 에뮬레이트해야합니다. 이 에뮬레이션의 구현은 매우 비효율적입니다. ( Cygwin FAQ 참조 )

Windows에서 완전한 기능을 갖춘 Linux와 같은 명령 줄 환경을 원하는 응용 프로그램에서 자주 사용되는 MSYS2는 Cygwin을 기반으로하므로 이것이 영향을받습니다.

실제로 fork()Windows의 a 가 Linux보다 적어도 1 배 느리다 는 것은 너무 나쁩니다.

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 상자와 미약 한 1 코어 1GiB RAM VPS의 차이를 보여줍니다.


0

포크가 보이지 않습니다. 당신은 포크, exec, 시스템 콜을보고 시각을 읽고, 출력을 포맷하고 변환합니다. 병렬로 공유하는 다른 것은 말할 것도 없습니다.

어떤 기준에서 당신은 다른 기계는 "실제로 말을 않는 했다 느린?" 컴퓨터의 실제 속도와 컴퓨터 속도에 대한 사용자의 인식에 기여하는 많은 것들이 있습니다. 포크 / 초가 성능을 측정하는 좋은 점은 무엇입니까? 메모리 속도, 아키텍처 및 양은 얼마입니까? 디스크 I / O 속도 및 버퍼링?

512MB의 RAM으로 Vista를 실행하는 Core i7 또는 2GB로 최소 Linux를 실행하는 Celeron 중 어떤 포크 / 초를 더 많이 할 것이라고 생각하십니까?


@ mpez0 : 업데이트 된 정당성을 참조하십시오. 귀하의 질문에 구체적으로 답하기 위해, 더 느리다는 말의 기초는 클럭 속도가 느리고 RAM이 느리고 디스크가 느리지 만 XP는 더 오래된 아키텍처입니다. 리눅스는 윈도우가 아닌 커널에서 포크 모델을 사용하기 때문에 거의 항상 포크 속도가 더 빠릅니다. 나는 그 벤치 마크에서 ~ 60의 P3을 가지고 있습니다 :).
Andrew Aylett
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.