Bằng cách nhìn vào số liệu thống kê lịch trong /proc/<PID>/sched
, bạn có thể nhận được một đầu ra như thế này:Linux - Sự khác biệt giữa di chuyển và chuyển mạch?
[[email protected] ~]$ cat /proc/1/sched
systemd (1, #threads: 1)
-------------------------------------------------------------------
se.exec_start : 2499611106.982616
se.vruntime : 7952.917943
se.sum_exec_runtime : 58651.279127
se.nr_migrations : 53355
nr_switches : 169561
nr_voluntary_switches : 168185
nr_involuntary_switches : 1376
se.load.weight : 1048576
se.avg.load_sum : 343837
se.avg.util_sum : 338827
se.avg.load_avg : 7
se.avg.util_avg : 7
se.avg.last_update_time : 2499611106982616
policy : 0
prio : 120
clock-delta : 180
mm->numa_scan_seq : 1
numa_pages_migrated : 296
numa_preferred_nid : 0
total_numa_faults : 34
current_node=0, numa_group_id=0
numa_faults node=0 task_private=0 task_shared=23 group_private=0 group_shared=0
numa_faults node=1 task_private=0 task_shared=0 group_private=0 group_shared=0
numa_faults node=2 task_private=0 task_shared=0 group_private=0 group_shared=0
numa_faults node=3 task_private=0 task_shared=11 group_private=0 group_shared=0
numa_faults node=4 task_private=0 task_shared=0 group_private=0 group_shared=0
numa_faults node=5 task_private=0 task_shared=0 group_private=0 group_shared=0
numa_faults node=6 task_private=0 task_shared=0 group_private=0 group_shared=0
numa_faults node=7 task_private=0 task_shared=0 group_private=0 group_shared=0
Tôi đã cố gắng tìm ra sự khác nhau giữa di cư và công tắc, một số phản ứng here và here là gì. Tóm tắt các phản hồi này:
nr_switches
: số lượng công tắc ngữ cảnh.nr_voluntary_switches
: số lượng công tắc tự nguyện, tức là luồng bị chặn và do đó một luồng khác được chọn.nr_involuntary_switches
: trình lên lịch đã khởi chạy chuỗi chỉ vì có một chuỗi đói khác sẵn sàng chạy.
Do đó, migrations
là gì? Những khái niệm này có liên quan hay không? Di chuyển nằm giữa các lõi và công tắc trong lõi?
Bạn nói 'thông thường', vậy công cụ lập kế hoạch theo dõi để di chuyển sang lõi khác là gì? Bạn có bất kỳ nguồn nào có thể xác nhận điều đó không? – horro
Nó phụ thuộc vào lịch trình, ưu tiên, mối quan hệ vv Về cơ bản, nếu không có ái lực CPU và CPU trước đó đang bận với nhiệm vụ khác, luồng được lên lịch trên CPU khác. Tôi cũng đã cập nhật câu trả lời với một số liên kết. –
@horro, khi được thử nghiệm với sự kiểm soát thủ công mối quan hệ cốt lõi-ren, tôi kết luận rằng không có vấn đề gì, các chính sách liên quan quá sâu. Có rất nhiều điều phải được tính đến, và nó khác nhau đối với mỗi máy tính. Một ví dụ, trên một máy tính CPU kép, bạn có thể xem xét CPU nào có hầu hết dữ liệu của luồng (không có điểm quá tải bus QPI). Điều đó tự nó là một câu hỏi phức tạp; các trang bộ nhớ kế tiếp có thể được xen kẽ giữa các CPU, hoặc không (đó là một thiết lập BIOS trên một số máy). Hệ điều hành biết tất cả điều này và hơn thế nữa. Tôi sợ phải tăng quá sâu ... – bazza