2011-01-12 17 views
7

Tôi đang thực hiện một nghiên cứu giữa các profilers chủ yếu là thiết bị đo đạc và lấy mẫu. Tôi đã nảy ra các thông tin sau:Profilers Instrumenting Vs Sampling

  • lấy mẫu: đình chỉ thi hành chương trình, hãy PC và do đó suy ra là chương trình là
  • instrumenting: thêm một số mã overhead cho chương trình vì vậy nó sẽ tăng một số gợi ý để biết chương trình

Nếu thông tin trên sai chính xác.

Sau này, tôi đã xem xét thời gian thực hiện và một số cho rằng thiết bị mất nhiều thời gian hơn so với lấy mẫu! điều này có đúng không?

nếu có, tại sao vậy? trong việc lấy mẫu, bạn phải trả giá chuyển đổi ngữ cảnh giữa các quy trình trong khi trong cùng chương trình, bạn không mất chi phí

Tôi có thiếu gì đó không?

cổ vũ! =)

+0

Cho biết chương trình đang làm gì bằng cách lấy mẫu PC giống như cố gắng biết thời gian bằng cách lấy mẫu chỉ giây. Áp dụng cho phần mềm thực, thông thường nó nói chương trình "là" ở đâu đó vô nghĩa trong hạt nhân. Các mẫu ngăn xếp có ích hơn vì chúng cho biết * tại sao * nó ở trong đó. Dụng cụ giống như cố gắng kể thời gian trên một chiếc đồng hồ mà một số chữ số đã bị xóa, giống như nó nhảy từ 2:00 đến 7:00. Đó là bởi vì nó lần chức năng nhưng không phải là dòng mã. Nhấn một chức năng lớn và bạn trở lại để đoán. –

Trả lời

6

Các ngắt do trình tạo mẫu lấy ra thường thêm một lượng thời gian không đáng kể vào tổng thời gian thực hiện, trừ khi bạn có khoảng thời gian lấy mẫu rất ngắn (ví dụ: < 1 ms).

Với hồ sơ có công cụ có thể có chi phí lớn, ví dụ: trên các chức năng lá nhỏ được gọi nhiều lần, khi các cuộc gọi đến thư viện thiết bị có thể đáng kể so với thời gian thực hiện của hàm.

4

Tùy thuộc vào mức độ thông thường bạn muốn.

gprof thực hiện cả hai thứ bạn đã đề cập. Here are some comments on that.

Có một trường tư tưởng cho biết hồ sơ là về đo lường. Đo cái gì? Vâng, bất cứ điều gì - chỉ cần đo. Cùng với điều này đi ý tưởng rằng những gì bạn muốn nhận được là một "bức tranh lớn" về những gì đang xảy ra. Trường này hầu hết tìm cách tìm "chức năng chậm", không xác định rõ ràng điều đó có nghĩa là gì và yêu cầu bạn nhìn vào đó để tối ưu hóa.

Một trường khác nói rằng bạn đang thực sự gỡ lỗi. Bạn muốn xác định chính xác lỗi của một loại nào đó - những loại không làm cho chương trình không đúng, thay vào đó chúng mất quá nhiều thời gian. Đây không phải là những bức tranh lớn. Chúng là những điểm rất chính xác trong đoạn mã nơi có điều gì đó đang xảy ra tốn nhiều thời gian hơn mức cần thiết. Chính xác bao nhiêu nữa không quan trọng. Điều quan trọng là nó nằm để nó có thể được cố định. Trong quan điểm này, chi phí lược tả là không liên quan, và do đó là độ chính xác của phép đo. Đo lường là gì để xem có bao nhiêu thời gian đã được lưu.

Một hồ sơ mà tôi nghĩ, thành công kéo dài cả hai trại, là Zoom, vì nó lấy mẫu ngăn xếp cuộc gọi, trên đồng hồ treo tường và quà, ở cấp độ/cấp độ lệnh, phần trăm thời gian trên ngăn xếp. Một số profilers khác cũng làm điều này, nhưng hầu hết thì không.

Tôi đang ở trường thứ hai và here's an example về những gì bạn có thể thực hiện với nó.

Here's a more brief discussion of the issues.

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