2012-01-27 32 views
8

Tôi đang sử dụng callgrind để cấu hình một ứng dụng đa luồng Linux và hầu hết nó hoạt động tốt. Tôi bắt đầu nó với thiết bị đo đạc (--instr-atstart = no) và sau đó sau khi cài đặt xong, tôi bật nó lên với callgrind_control -i trên. Tuy nhiên, khi tôi thay đổi một số cấu hình nhất định để cố gắng cấu hình một phần khác của ứng dụng, nó bắt đầu chạy cực kỳ chậm ngay cả trước khi tôi bật thiết bị. Về cơ bản một phần của mã sẽ mất một vài giây với hoạt động bình thường mất hơn một giờ với callgrind (thiết bị tắt). Bất kỳ ý tưởng nào về lý do tại sao điều đó có thể xảy ra và làm cách nào để gỡ lỗi/giải quyết sự chậm chạp?callgrind chậm với thiết bị đo được tắt

+0

"Cấu hình nhất định để cố gắng cấu hình một phần khác của ứng dụng" là gì? – jpalecek

+0

user779, bạn có thể kiểm tra tốc độ ứng dụng bằng công cụ ["nul" của valgrind] (http://valgrind.org/docs/manual/nl-manual.html) và với [công cụ Lackey valgrind] (http: //valgrind.org/docs/manual/lk-manual.html)? – osgx

+0

@jpalecek: tất cả ý tôi là người dùng có thể bật/tắt tính năng bằng cách cấu hình và bằng cách bật một số tính năng (nó sẽ đệ quy để biết thêm chi tiết về tập hợp đối tượng và kết quả tính toán nhiều hơn). . – naumcho

Trả lời

10

Callgrind là một công cụ, được xây dựng trên valgrind. Valgrind về cơ bản là một trình dịch nhị phân động (libVEX, một phần của valgrind). Nó sẽ giải mã mọi lệnh và JIT biên dịch chúng thành luồng của một số lệnh của cùng một CPU.

Như tôi biết, không có cách nào để kích hoạt bản dịch này (trong thực thi valgrind) cho quá trình đang chạy, vì vậy dịch năng động được kích hoạt mọi lúc, từ khi bắt đầu chương trình. Nó không thể được tắt quá.

Công cụ được xây dựng trên valgrind bằng cách thêm một số mã thiết bị. Công cụ "Nul" (nulgrind) là công cụ không thêm công cụ. Nhưng mọi công cụ sử dụng valgrind và bản dịch động đều hoạt động mọi lúc. Bật và tắt trong callgrind chỉ là bật và tắt thiết bị bổ sung.

CPU ảo, được thực hiện bởi Valgrind bị giới hạn, có (không đầy đủ) danh sách các giới hạn http://valgrind.org/docs/manual/manual-core.html#manual-core.limits Hầu hết các hạn chế về hoạt động điểm động và chúng có thể được mô phỏng sai.

Thay đổi có được kết nối với các hoạt động điểm động không? Hoặc với các giới hạn được liệt kê khác?

Ngoài ra, bạn nên biết rằng "Thực hiện nối tiếp theo thứ tự Valgrind để chỉ một luồng đang chạy tại một thời điểm". (từ cùng một trang manual-core.html)

+0

PS: nulgrind (libVEX thiết bị cơ bản) trên không là rất lớn. Nulgrind ước tính chậm hơn 2-10 lần so với mã gốc (ví dụ: http://os.inf.tu-dresden.de/papers_ps/vee08-pohle.pdf); bất kỳ công cụ nào khác trên vlagrind đều chậm hơn nulgrind. Callgrind với chế độ tắt sẽ chạy ở tốc độ của nulgrind; callgrind được bật sẽ chạy chậm hơn vài lần. – osgx

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