Làm thế nào các quá trình khác có thể ảnh hưởng đến các phép đo được thực hiện với 'thời gian'?


7

Nếu tôi dành thời gian cho một quá trình sử dụng timelệnh, tôi sẽ nhận được đầu ra cho 'real', 'user' và 'sys'.

Sự hiểu biết của tôi từ cuộc thảo luận này là 'thực tế' là thời gian treo tường, trong khi 'người dùng' và 'hệ thống' là thời gian xử lý.

Có phải điều này ngụ ý rằng 'người dùng' và 'hệ thống' sẽ không bị ảnh hưởng bởi các quy trình khác? Nói cách khác, nếu máy tính chịu tải nặng hoặc tải nhẹ từ các quy trình khác, có thể mất nhiều thời gian hơn trên đồng hồ treo tường ('thực') để hoàn tất quy trình của tôi. Nhưng quá trình của tôi có thể chỉ cần 5 giây thời gian chạy, mặc dù nó được trải ra hơn 20 giây trong thời gian thực.

Tôi có đảm bảo rằng tôi sẽ được thông báo '5 giây thời gian của người dùng' bất kể hệ thống đang làm gì không?

Câu trả lời:


7

Không. Công tắc quy trình / bối cảnh không miễn phí.

Bao nhiêu quá trình khác đang chạy sẽ làm chậm quá trình của bạn phụ thuộc rất nhiều vào hệ thống, nhưng nó bao gồm những thứ như:

  • Mỗi khi bộ xử lý chuyển sang một không gian địa chỉ khác (bao gồm cả quá trình), thì bộ đệm MMU phải được xóa. Và có lẽ bộ xử lý L1 lưu trữ. Và có thể bộ đệm L2 và L3. Điều này sẽ làm chậm truy cập bộ nhớ ngay sau khi quá trình của bạn được tiếp tục (và điều này được tính theo thời gian "người dùng" của bạn).

  • Trên hộp SMP (hoặc đa lõi), nếu hai quá trình đang cố truy cập vào cùng một phần của RAM (vật lý), bộ xử lý phải hợp tác. Điều này cần có thời gian. Nó thường được thực hiện ở mức kiến ​​trúc, thậm chí dưới cả HĐH. Điều này sẽ được tính vào thời gian người dùng hoặc hệ thống của bạn, tùy thuộc vào thời điểm nó đạt được.

  • Khóa kernel nhanh (không thực sự lên lịch cho một quá trình khác) sẽ được tính vào thời gian sys của bạn. Điều này tương tự như điểm trên.

  • trên các hộp NUMA, bạn có thể được chuyển đến một nút khác. Truy cập bộ nhớ có thể là tên miền chéo và do đó chậm hơn

  • các quá trình khác có thể ảnh hưởng đến quyết định quản lý điện năng. Ví dụ, việc chốt nhiều lõi hơn sẽ làm giảm tốc độ Intel Turbo Boost, để giữ gói bộ xử lý bên trong thông số kỹ thuật điện & nhiệt của nó. Ngay cả khi không có turbo boost, bộ xử lý có thể bị chậm do nhiệt dư. Nó có thể hoạt động theo cách khác vì quá tải nhiều hơn có thể khiến bộ điều chỉnh tốc độ CPU tăng tốc độ CPU.

Có các tài nguyên được chia sẻ khác trên một hệ thống; nếu chờ đợi chúng không thực sự liên quan đến quá trình bạn ngủ, thì nó sẽ được tính theo thời gian của người dùng hoặc hệ thống của bạn.


Cảm ơn câu trả lời sâu sắc! Tôi thất vọng rằng đây là trường hợp, tuy nhiên. Bất kỳ đề xuất nào về cách, nếu tôi có quyền kiểm soát duy nhất một hệ thống, để các quy trình khác "tắt và im lặng" trong khi tôi đang chuẩn hóa một cái gì đó? Tôi không muốn tăng đột biến trong biểu đồ của mình vì một số công việc định kỳ không liên quan. Ngay bây giờ tôi đang chạy rất nhiều lần và lấy trung bình, nhưng điều đó thật vô ích.
Nathan Long

@NathanLong Chà, cách rõ ràng là dừng cron, và càng nhiều càng tốt. Bạn cũng có thể thử sched_setschedulervới SCHED_FIFOmột ưu tiên cao. Điều đó sẽ ngăn chặn mọi thứ khác, ít nhất là trên một hệ thống đơn lõi. Nhưng tôi nghĩ rằng điều này tốt nhất sẽ được hỏi như một câu hỏi mới, cùng với các chi tiết.
derobert

2

Có phải điều này ngụ ý rằng 'người dùng' và 'hệ thống' sẽ không bị ảnh hưởng bởi các quy trình khác?

userthời gian không thể thực sự bị ảnh hưởng bởi bất cứ điều gì khác trực tiếp. systhời gian có thể, vì nó có thể bao gồm I / O. Nếu có một loạt các quy trình cố gắng truy cập thiết bị cùng một lúc, bản thân thiết bị có thể trở nên bận rộn, do đó khi quá trình của bạn được lên lịch chủ động, hệ thống phải chờ trên thiết bị. Nó không nên nhiều vì sự chờ đợi chủ yếu là thụ động - thêm realthời gian - nhưng nếu nó liên quan đến việc bỏ phiếu lặp đi lặp lại, đó là hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.