Nếu ứng dụng của bạn chỉ chạy "phẳng" (nghĩa là sử dụng CPU hoặc chờ I/O) cho đến khi thoát, và không có quá trình cạnh tranh khác, chỉ cần time myapp
(hoặc có thể là /usr/bin/time myapp
, đầu ra khác nhau cho nội trang hệ vỏ).
Điều này sẽ giúp bạn có được một cái gì đó như:
real 0m1.412s
user 0m1.288s
sys 0m0.056s
Trong trường hợp này, người sử dụng + sys (kernel) tài khoản thời gian cho hầu hết tất cả các thời gian thực và có chỉ 0.068s mất tích ... (có thể là thời gian dành cho bắt đầu tải ứng dụng và các lib hỗ trợ của nó).
Tuy nhiên, nếu bạn đã xem:
real 0m5.732s
user 0m1.144s
sys 0m0.078s
sau đó ứng dụng của bạn dành 4.51s không tốn nhiều CPU và có lẽ bị chặn trên IO. Đó là thông tin tôi nghĩ bạn đang tìm kiếm.
Tuy nhiên, khi kỹ thuật phân tích đơn giản này bị phá vỡ là:
- Apps mà chờ đợi vào một bộ đếm thời gian/đồng hồ hoặc kích thích bên ngoài khác (ví dụ hướng sự kiện GUI ứng dụng). Không thể phân biệt thời gian chờ đợi trên đồng hồ và thời gian chờ trên đĩa/mạng.
- Ứng dụng đa luồng, cần suy nghĩ một chút về cách diễn giải các con số.
thời gian + gprof + valgrind & bạn bè + oprofile – Tom
Hãy nói 'thời gian' cho tôi biết đơn đăng ký của tôi mất 20 giây. Làm thế nào để valgrind phân tích bao nhiêu thời gian tôi dành cho CPU chế biến VS bao nhiêu thời gian trong đó 20 giây tôi nhàn rỗi? Tôi hiểu valgrind phá vỡ chi phí của mỗi chức năng khi CPU đang xử lý. Tôi muốn tìm ra tỷ lệ giữa thời gian xử lý CPU VS thời gian nhàn rỗi (chờ lưu lượng mạng, cuộc gọi IO, v.v.). – richard