यह आपके द्वारा चलाए जा रहे एप्लिकेशन के प्रकार पर बहुत निर्भर करता है। यदि आपको ऐसे एप्लिकेशन मिले हैं जो बहुत ही खुश-खुशी WRT syscalls हैं तो आप उच्च मात्रा में संदर्भ स्विचिंग की उम्मीद कर सकते हैं। यदि आपके अधिकांश एप्लिकेशन इधर-उधर बेकार हो जाते हैं और केवल तब उठते हैं जब किसी सॉकेट पर सामान हो रहा हो, तो आप कम संदर्भ स्विच दरों को देखने की उम्मीद कर सकते हैं।
सिस्टम कॉल
सिस्टम कॉल अपने स्वयं के स्वभाव द्वारा संदर्भ स्विच का कारण बनता है। जब कोई प्रक्रिया एक सिस्टम कॉल करती है, तो यह मूल रूप से कर्नेल को वर्तमान समय से ले जाने के लिए कहता है और मेमोरी को सामान करने के लिए प्रक्रिया को करने का विशेषाधिकार नहीं है, और जब यह किया जाता है तो उसी स्थान पर वापस आ जाता है।
जब हम लिनक्स से राइट (2) syscall की परिभाषा को देखते हैं, तो यह बहुत स्पष्ट हो जाता है:
नाम
लिखना - फाइल डिस्क्रिप्टर पर लिखना
SYNOPSIS
#शामिल
ssize_t write (int fd, const void * buf, size_t count);
विवरण
लिखना () बफर बफ़ से फ़ाइल को इंगित करने के लिए बाइट्स लिखने के लिए लिखता है
फ़ाइल डिस्क्रिप्टर fd द्वारा संदर्भित। [..]
प्रतिलाभ की मात्रा
सफलता पर, लिखित बाइट्स की संख्या वापस आ गई है (शून्य इंगित करता है
कुछ भी नहीं लिखा था)। त्रुटि पर, -1 लौटा दिया जाता है, और इरेटो सेट हो जाता है
उचित रूप से।
[..]
यह मूल रूप से कर्नेल को प्रक्रिया से संचालन करने के लिए कहता है, count
बाइट्स तक ले जाता है , वर्तमान प्रक्रिया के *buf
विवरणकर्ता द्वारा fd
बताए गए मेमोरी पते से शुरू होता है और फिर प्रक्रिया में वापस लौटता है और उसे बताता है कि यह कैसे हुआ।
यह दिखाने के लिए एक अच्छा उदाहरण वाल्व स्रोत आधारित गेम, हॉर्स के लिए समर्पित गेम सर्वर है । http://nopaste.narf.at/f1b22dbc9 एक गेम सर्वर के एक एकल उदाहरण द्वारा किए गए एक सेकंड के सिस्कल्स को दिखाता है, जिस पर कोई खिलाड़ी नहीं था। यह प्रक्रिया एक Xeon X3220 (2.4Ghz) पर लगभग 3% CPU समय लेती है, बस आपको यह महसूस करने के लिए कि यह कितना महंगा है।
बहु कार्यण
संदर्भ स्विचिंग का एक अन्य स्रोत ऐसी प्रक्रियाएं हो सकती हैं जो syscalls नहीं करती हैं, लेकिन अन्य प्रक्रियाओं के लिए जगह बनाने के लिए किसी दिए गए CPU को बंद करने की आवश्यकता होती है।
यह कल्पना करने का एक अच्छा तरीका cpuburn है । cpuburn खुद कोई भी syscalls नहीं करता है, यह सिर्फ अपनी स्मृति पर पुनरावृत्त करता है, इसलिए इसे किसी भी संदर्भ को स्विच करने का कारण नहीं होना चाहिए।
एक निष्क्रिय मशीन लें, vmstat शुरू करें और फिर सिस्टम के पास प्रत्येक CPU कोर के लिए एक burnMMX (या cpuburn पैकेज से कोई भिन्न परीक्षण) चलाएं। आपको तब तक पूरी प्रणाली का उपयोग करना चाहिए, लेकिन शायद ही कोई संदर्भ स्विचिंग बढ़े। फिर कुछ और प्रक्रियाओं को शुरू करने का प्रयास करें। आप देखेंगे कि सीपीयू कोर पर प्रतिस्पर्धा शुरू करते ही संदर्भ दर बढ़ जाती है। स्विचिंग की मात्रा प्रक्रियाओं / कोर अनुपात और आपके कर्नेल के मल्टीटास्किंग रिज़ॉल्यूशन पर निर्भर करती है।
आगे की पढाई
linfo.org के पास एक अच्छा राइटअप है जो संदर्भ स्विच और सिस्टम कॉल हैं। विकिपीडिया में सामान्य जानकारी और सिस्टम कॉल पर एक अच्छा लिंक संग्रह है।