2011-08-24 26 views
5

Chúng tôi có rất nhiều tệp GNU Make-files. Tôi muốn thời gian mỗi mục tiêu được sử dụng trong quá trình xây dựng để xác định bất kỳ tắc nghẽn hiệu suất nào. Có một công cụ hoặc kỹ thuật để làm điều này một cách thuận tiện và tự động?Cách phân tích hiệu suất GNU Tạo các tệp

Tôi có thể phân tích các kết quả này để giữ các yếu tố hiệu suất khi các thay đổi xây dựng và phát triển (nhưng nó đã khá lớn và phức tạp).

Trả lời

4

Tôi nghĩ rằng tôi đã nhìn thấy câu hỏi này ở đây trước ...

Bạn có thể thay vỏ với cái gì đó gọi là vỏ nhưng thời gian thực hiện của nó, và ghi kết quả ở đâu đó cùng với tên mục tiêu. Mỗi mục tiêu sẽ được xây dựng chỉ một lần (hoặc thực hiện sẽ từ chối chạy) vì vậy tất cả các bạn sẽ phải làm là thêm thời gian với nhau.

dụ Rất thô: thay thế

make 

với

make SHELL='echo [email protected]: && time sh' 

Nếu bạn không muốn thêm lần với nhau, bạn cũng phải bằng cách nào đó tham gia các lệnh cho mỗi mục tiêu vào một đơn chỉ huy. Một cách để làm điều đó là bằng cách xử lý tiền tố Makefile, nhưng vì nhiều lý do, điều đó sẽ không hoạt động tốt cho bất kỳ thứ gì nhưng đơn giản nhất là Makefiles.

Ví dụ: thử một cái gì đó như

perl -0pe 's/([^:])\s*\n\t[@-]?/$1; /g' Makefile | make -f - SHELL='echo [email protected]: && time sh' 

là đâm rất thô theo hướng đó.

Có nhiều cách tiếp cận khác nhau, nhưng tôi nghĩ giải pháp thực sự duy nhất là thêm tính năng này để tạo; Việc tạo ra GNU được viết bằng C rất dễ di động, do đó việc này không khó thực hiện.

+0

'SHELL' ... thông minh –

1

Suy nghĩ bên ngoài hộp: bạn có đang lãng phí các electron quý giá bằng cách sử dụng đệ quy làm, tức là nơi quy tắc cd vào thư mục con và gọi lại không? Thế thì đó là vấn đề của bạn. Việc tạo ra không thể thực hiện có thể nhanh hơn bởi 2 bậc độ lớn.

Để biết chi tiết thấy Recursive make considered harmful

0

Sau đây sẽ giúp bạn hiểu làm thế nào mỗi lệnh đang chạy, và bao nhiêu lần vì các biến sử dụng sai:,: =

make SHELL='/bin/sh -x' 
0

Nếu bạn đang cố gắng để hồ sơ một tĩnh Makefile, có một cái nhìn tại make-profiler:

https://github.com/gojuno/make-profiler

Nó hành động s giống như một wrapper xung quanh make mà tiền xử lý Makefile, thu thập các bản ghi và vẽ một biểu đồ cuộc gọi với thông tin thời gian. Nó đặc biệt hữu ích nếu bạn đang tạo một đường ống xử lý dữ liệu dài hạn.

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