Tôi đã đọc về Linux Kernel và CFS scheduler trong kernel. Tôi đã xem qua vruntime (thời gian chạy ảo) là khái niệm cốt lõi đằng sau lịch trình CFS. Tôi đọc từ “Phát triển hạt nhân Linux” và cũng từ các blog khác trên internet nhưng không thể hiểu các tính toán cơ bản sau số vruntime. vruntime thuộc về một quy trình cụ thể hay không thuộc về một nhóm quá trình có cùng giá trị đẹp. Yếu tố trọng số là gì và được tính như thế nào? Tôi đã đi qua tất cả các khái niệm này nhưng không thể hiểu được. Sự khác nhau giữa vruntime và * min_vruntime * là gì?Khái niệm về vruntime trong CFS
Trả lời
vruntime là theo chủ đề; nó là một thành viên được lồng trong task_struct.
Về cơ bản, vruntime là thước đo "thời gian chạy" của luồng - lượng thời gian đã sử dụng trên bộ xử lý. Toàn bộ quan điểm của CFS là công bằng cho tất cả; do đó, loại bản ngã của boils xuống đến một điều đơn giản: (trong số các nhiệm vụ trên một runqueue nhất định) nhiệm vụ với vruntime thấp nhất là nhiệm vụ mà xứng đáng nhất để chạy, do đó chọn nó là 'tiếp theo'. (Việc thực hiện thực tế được thực hiện bằng cách sử dụng một rbtree cho hiệu quả).
Cân nhắc các yếu tố khác nhau - như ưu tiên, giá trị tốt đẹp, nhóm cgroups, v.v. - tính toán vruntime không phải là thẳng về phía trước như một số gia tăng đơn giản. Tôi khuyên bạn nên đọc phần có liên quan trong "Professional Linux Kernel Architecture", Mauerer, Wrox Press - nó được giải thích chi tiết.
Vui lòng xem bên dưới một cách nhanh chóng để tóm tắt một số điều này.
tài nguyên khác: Documentation/scheduler/sched-design-CFS.txt
nhanh tóm tắt - tính vruntime: (dựa trên cuốn sách)
Hầu hết các công việc được thực hiện trong kernel/sched_fair.c: __ update_curr ()
Được gọi trên bộ đếm thời gian đánh dấu
cập nhật thời gian thực và ảo 'hiện tại' vừa chi cho các bộ xử lý
Đối với công việc mà chạy ở mức ưu tiên mặc định, tức là, đẹp giá trị 0, thời gian vật lý và ảo dành giống hệt
Không vì vậy đối với các nhiệm vụ ở mức ưu tiên khác (mức độ ưu tiên); do đó việc tính toán vruntime bị ảnh hưởng bởi mức độ ưu tiên của dòng điện sử dụng hệ số trọng lượng tải
delta_exec = (unsigned long) (now - curr-> exec_start); // ... delta_exec_weighted = calc_delta_fair (delta_exec, curr); curr-> vruntime + = delta_exec_weighted;
Bỏ một số làm tròn và tràn kiểm tra, những gì calc_delta_fair làm là để tính toán giá trị nhất định theo công thức sau:
delta_exec_weighed = delta_exec * (NICE_0_LOAD/curr->load.weight)
Có điều là, nhiệm vụ quan trọng hơn (những người có một giá trị đẹp thấp) sẽ có trọng số lớn hơn; do đó, bằng các phương trình trên, vruntime tính đến chúng sẽ nhỏ hơn (do đó có chúng enqueued nhiều hơn bên trái trên rbtree!).
Vruntime là thời gian chạy ảo của quá trình giúp theo dõi lượng thời gian mà quy trình đã chạy. Vruntime là thành viên của cấu trúc sched_entity được định nghĩa trong include/linux/sched.h
min_vruntime đại diện cho vruntime tối thiểu của runqueue cfs. Nó đại diện cho tối thiểu của tất cả các vruntime của các quá trình được lên kế hoạch trên rằng runfsue cfs. Min_vruntime là thành viên của cấu trúc cfs_rq được định nghĩa trong include/linux/sched.h
Mục đích của min_vruntime là chọn quy trình tiếp theo trong runqueue cfs để chạy. Để công bằng cho tất cả các quy trình, bộ lập lịch CFS chọn quá trình với vruntime tối thiểu để thực hiện trước.
Liên kết để bao gồm/linux/sched.h là http://lxr.free-electrons.com/source/include/linux/sched.h
- 1. Câu hỏi khái niệm về Python Threading
- 2. Câu hỏi khái niệm Về Java Concurrency
- 3. Khái niệm về Array.map là gì?
- 4. Khái niệm về MVC theo yêu cầu
- 5. Khái niệm về "Bộ đếm hiệu suất" trong Linux/Unix
- 6. Có khái niệm về các loại POD trong Rust không?
- 7. Hiểu khái niệm về kế thừa trong Java
- 8. Khái niệm về một hội trong .NET là gì?
- 9. Cần trợ giúp về khái niệm hóa trong Redis/NoSQL
- 10. Khái niệm luồng trong C#
- 11. C++ Khái niệm Lite: Ngắn mạch trong các khái niệm cơ quan
- 12. Khái niệm kiến trúc mới
- 13. Spark trên hiểu biết về khái niệm sợi
- 14. Tìm hiểu các khái niệm cơ bản về UIScrollView
- 15. Hiểu các khái niệm cơ bản về Git và GitHub
- 16. Khái niệm cơ bản về thiết lập sao chép RavenDB
- 17. Mạng bản đồ khái niệm - Vấn đề về nút
- 18. Khái niệm về git tracking và git staging
- 19. Vs. Shaders - giúp hiểu sự khác biệt về khái niệm
- 20. sự khác biệt về khái niệm giữa SynchronizationContext và TaskScheduler
- 21. Khái niệm cơ bản về đệ quy bằng Python
- 22. Khái niệm xây dựng trong javascript
- 23. Sách về C++ để hiểu các khái niệm nâng cao
- 24. Khái niệm cơ bản về khởi động PHP
- 25. Hướng dẫn về khái niệm lập trình 3D?
- 26. khái niệm mô tả trong NIC
- 27. Java khái niệm ý tưởng
- 28. khái niệm điểm chuỗi trong java
- 29. vấn đề khái niệm trong Liên minh
- 30. MasterPage như khái niệm trong python
Mục đích của min_vruntime là gì? – iammurtaza
@iammurtaza: vruntime tối thiểu (tôi đang sử dụng tunable/proc/sys/kernel/sched_min_granularity_ns) thường (trên Ubuntu gần đây ít nhất) ~ 2,25ms. Nếu điều này không có mặt, 2 tác vụ có thể "ping-pong" cứ sau vài micro giây và tắt bộ vi xử lý. Một đảm bảo tối thiểu để ở trên cpu là cần thiết để giảm thiểu hành vi này thrashing. – kaiwan