/proc/<PID>/sched
में शेड्यूलिंग आँकड़े को देख कर, आप इस तरह एक आउटपुट प्राप्त कर सकते हैं:लिनक्स - माइग्रेशन और स्विच के बीच अंतर?
[[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
मैं यह पता लगाने की क्या माइग्रेशन और स्विच के बीच मतभेद, कुछ प्रतिक्रियाओं here और here हैं कोशिश कर रहे हैं। इन प्रतिक्रियाओं का सारांश:
nr_switches
: संदर्भ स्विच की संख्या।nr_voluntary_switches
: स्वैच्छिक स्विच की संख्या, यानी थ्रेड अवरुद्ध है और इसलिए एक और धागा उठाया जाता है।nr_involuntary_switches
: शेड्यूलर ने थ्रेड को लात मार दिया क्योंकि एक और भूख धागा चलाने के लिए तैयार है।
इसलिए, क्या हैं? क्या ये अवधारणाएं संबंधित हैं या नहीं? माइग्रेशन कोर के बीच कोर और स्विच के बीच हैं?
आप 'आमतौर पर' कहते हैं, तो शेड्यूलर अन्य कोर पर माइग्रेट करने के लिए कौन सी नीतियों का पालन करता है? क्या आपके पास कोई स्रोत है जो इसकी पुष्टि कर सकता है? – horro
यह शेड्यूलर, प्राथमिकताओं, affinities आदि पर निर्भर करता है। असल में, यदि कोई CPU एफ़िनिटी नहीं है और पिछले सीपीयू किसी अन्य कार्य में व्यस्त है, तो थ्रेड किसी अन्य CPU पर निर्धारित होता है। मैंने कुछ लिंक के साथ जवाब भी अपडेट किया। –
@horro, थ्रेड-कोर एफ़िनिटी के मैन्युअल नियंत्रण के साथ प्रयोग किया गया, मैंने निष्कर्ष निकाला कि कोई बात नहीं है, नीतियां बहुत गहराई से शामिल हैं। बहुत कुछ है जिसे ध्यान में रखना है, और यह प्रत्येक कंप्यूटर के लिए अलग है। एक उदाहरण, एक दोहरी सीपीयू मशीन पर आप विचार कर सकते हैं कि कौन सी सीपीयू में थ्रेड का अधिकांश डेटा है (क्यूपीआई बस अधिभारित करने का कोई मतलब नहीं है)। वह खुद में एक जटिल सवाल है; लगातार मेमोरी पेज CPUs के बीच interleaved किया जा सकता है, या नहीं (यह कुछ मशीनों पर एक BIOS सेटिंग है)। ओएस यह सब और जानता है। मुझे बहुत गहरी प्रिये से डर है ... – bazza