2009-12-26 52 views
5

Tôi đang đọc http://lse.sourceforge.net/locking/dcache/dcache_lock.html, trong đó thời gian spinlock cho mỗi chức năng được đo:Làm thế nào để đo lường sự tranh chấp khóa?

SPINLOCKS   HOLD   WAIT 
    UTIL CON MEAN( MAX) MEAN( MAX)(% CPU)  TOTAL NOWAIT SPIN RJECT NAME 
    5.3% 16.5% 0.6us(2787us) 5.0us(3094us)(0.89%) 15069563 83.5% 16.5% 0% dcache_lock 
0.01% 10.9% 0.2us(7.5us) 5.3us(116us)(0.00%) 119448 89.1% 10.9% 0% d_alloc+0x128 
0.04% 14.2% 0.3us( 42us) 6.3us(925us)(0.02%) 233290 85.8% 14.2% 0% d_delete+0x10 
0.00% 3.5% 0.2us(3.1us) 5.6us( 41us)(0.00%)  5050 96.5% 3.5% 0% d_delete+0x94 

Tôi muốn biết nơi các thống kê này từ. Tôi đã thử oprofile, nhưng có vẻ như oprofile không thể đo khóa giữ và thời gian chờ đợi cho một khóa cụ thể. Và drd của valgrind làm chậm các ứng dụng quá nhiều, điều này sẽ làm cho kết quả kém chính xác hơn và cũng tiêu tốn quá nhiều thời gian. mutrace có vẻ tốt, nhưng như tên chỉ ra, tôi sợ nó chỉ có thể theo dõi loại trừ mutex.

Vì vậy, có bất kỳ công cụ nào khác hoặc cách sử dụng các công cụ tôi đã đề cập ở trên, để có được thống kê tranh chấp khóa không?

Cảm ơn bạn đã trả lời.

Trả lời

3

Cuối cùng tôi tìm thấy công cụ đo hiệu suất được sử dụng trong bài viết, cần vá hạt nhân.

Trang giới thiệu có thể được tìm thấy tại http://oss.sgi.com/projects/lockmeter/ và bản vá hạt nhân mới nhất tương ứng với phiên bản hạt nhân 2.6.16, bạn có thể tải xuống here.

2

Một cách để nói là chỉ chạy ứng dụng, tạm dừng và chụp random stackshot của tất cả các chuỗi. Sau đó, làm điều đó một lần nữa, nhiều lần. Sau đó, các phần của mẫu ngăn xếp kết thúc trong mã khóa là phần trăm thời gian bạn đang sau, gần. Nó cũng sẽ cho bạn biết vị trí khóa được thực hiện. Nếu bạn sau khi chính xác, hãy lấy nhiều mẫu hơn. Điều này hoạt động ở bất kỳ ngôn ngữ hoặc hệ điều hành nào.

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