2010-03-25 42 views
19

Tôi đã được chạy drush kịch bản (ví drupal) với cygwin trên cửa sổ máy tương đối nhanh của tôi, nhưng tôi vẫn phải chờ khoảng một phút cho bất kỳ lệnh drush (đặc biệt drush bộ nhớ cache rõ ràng để thực hiện).Làm thế nào để tăng tốc độ Cygwin?

Tôi khá chắc chắn rằng nó có một cái gì đó để làm với tốc độ của Cygwin kể từ khi các nhà phát triển đồng nghiệp của tôi (những người đang chạy Linux) có thể chạy các kịch bản này trong khoảng 5 giây.

Có cách nào để làm cho Cygwin sử dụng nhiều bộ nhớ hơn và/hoặc CPU cho mỗi thiết bị đầu cuối không?

+6

Gắn một đĩa CD Ubuntu vào? :) – Rimian

+2

Câu hỏi này giả định rằng hiệu suất của cửa sổ drush tương đương với drush linux và bộ nhớ hoặc CPU bị giới hạn. Đó không phải là một giả định hiển nhiên: nó có thể đơn giản là chậm hơn. – msw

+3

Hãy thử ảo hóa ... với sự hỗ trợ phần cứng nó có thể thực sự tuyệt vời –

Trả lời

25

Sự cố bạn đang gặp phải không phải là giới hạn tùy ý trong Cygwin mà bạn có thể thực hiện với thay đổi cài đặt. Đó là một khía cạnh vốn có của cách Cygwin đã làm việc để có được các chương trình ngữ nghĩa POSIX được xây dựng theo mong đợi.

Cuộc gọi hệ thống POSIX fork() không có tương đương gốc trên Windows, vì vậy Cygwin buộc phải mô phỏng nó trong a very inefficient way. Shell script gây ra một cuộc gọi đến fork() mỗi khi chúng thực hiện một quá trình bên ngoài, điều này xảy ra khá nhiều vì các ngôn ngữ kịch bản lệnh shell rất nghèo nàn so với những gì chúng ta thường gọi là ngôn ngữ lập trình. Các chương trình bên ngoài là cách các kịch bản lệnh shell nhận được bất kỳ thứ gì do hậu quả được thực hiện.

Có những sự thiếu hiệu quả khác trong Cygwin, mặc dù nếu bạn đã lược tả, bạn có thể thấy rằng đó là tốc độ số một. Ở hầu hết các nơi, lớp Cygwin giữa một chương trình được xây dựng bằng cách sử dụng nó và hệ điều hành cơ bản là khá mỏng. Các nhà phát triển của Cygwin mất rất nhiều khó khăn để giữ cho lớp mỏng nhất có thể trong khi vẫn cung cấp ngữ nghĩa POSIX chính xác. Độ dày không phổ biến hiện tại trong giả lập cuộc gọi fork() là không thể tránh khỏi ngắn của Microsoft thêm một cơ sở loại fork() gốc cho hệ điều hành của họ. Ưu đãi của họ để làm điều đó không phải là rất tốt.

Các giải pháp được đăng ở trên vì nhận xét không tệ.

Một khả năng khác là xem qua tập lệnh drush và xem có cuộc gọi đến các chương trình bên ngoài mà bạn có thể thay thế bằng nội tại vỏ hoặc cấu trúc hiệu quả hơn không. Tôi sẽ không mong đợi một cải thiện tốc độ lớn bằng cách làm điều đó, nhưng nó có tài sản tốt đẹp mà bạn sẽ tăng tốc độ những thứ lên trên Linux là tốt. (fork() là hiệu quả trên Linux, nhưng bắt đầu chương trình bên ngoài vẫn còn một tốc độ lớn nhấn mà bạn có thể không phải trả thường xuyên như bạn đang làm.) Ví dụ:

numlines=`grep somepattern $somefile | wc -l` 
if [ $numlines -gt 0 ] ; then ... 

sẽ chạy nhanh hơn như:

if grep -q somepattern $somefile ; then ... 

Phiên bản đầu tiên được cho là rõ ràng hơn, nhưng yêu cầu ít nhất ba yêu cầu chương trình bên ngoài và với vỏ nguyên thủy, bốn. (Bạn có thấy tất cả chúng không?) Việc thay thế chỉ yêu cầu một chương trình bên ngoài gọi.

6

bạn có thể ưu tiên cao hơn cho Cygwin.

Viết một tập tin batch mới, cho exampe "cygstart.bat" với các nội dung sau đây:

# cygstart.bat

bắt đầu "Cygwin"/cao C: \ Cygwin \ Cygwin.bat

Nút "/ cao" - cho phép trình bao ưu tiên quá trình cao hơn.

9

Ngoài ra nhìn vào những điều mà làm chậm khởi động Cygwin:

  • Trim xuống Windows PATH của bạn (để xương trần như% SystemRoot% \ system32;% SystemRoot%)
  • Hủy bỏ những điều bạn làm không cần từ bashrc và bash_profile
  • Di chuyển những thứ bạn chỉ cần trong cửa sổ đầu cuối của bạn từ bashrc sang bash_profile
  • Một thời gian đáng ngạc nhiên lớn trong Cygwin là hoàn thành bash. Nếu bạn đang sử dụng nó (và bạn nên bởi vì nó tuyệt vời), chỉ hoàn thành nguồn cho các lệnh bạn cần (thay vì tất cả chúng đã từng là mặc định). Và, như đã đề cập ở trên, nguồn chúng từ bash_profile không bashrc.
+3

Cắt xuống 'PATH' có thể tạo ra sự khác biệt lớn. :) – Rufflewind

Các vấn đề liên quan