कितने संदर्भ स्विच "सामान्य" (सीपीयू कोर (या अन्य) के एक समारोह के रूप में) है?


34

हाय लिनक्स / यूनिक्स ओवरलोर्ड्स,

क्या आप में से किसी के पास अंगूठे का एक नियम है कि कितने संदर्भ स्विच (प्रति प्रोसेसर कोर) लिनक्स सर्वर पर सामान्य है?

यहाँ मेरे कॉलेज ने इसे लाया, और वह 8-कोर x86_64मशीन पर 16K देख रहा है ।

यहां पिछले कुछ दिनों में सरफेस के कुछ आंकड़े दिए गए हैं ...

संपूर्ण पाठ http://src.autonomy.net.au/imagebin/81895e338fae67d3d205c09db44a81e6-Picture_10.png

और प्रक्रिया निर्माण के आँकड़े देखने के लिए, यहां एक ही ग्राफ के लघुगणकीय दृश्य ...

संपूर्ण पाठ http://src.autonomy.net.au/imagebin/7481f7e52bead4effc90248fc23c72fe-Picture_11.png

और 8 लाशों को मौत के घाट उतार दिया जाता है ...

संपूर्ण पाठ http://src.autonomy.net.au/imagebin/0e94326652e977fd74edcd840f94200f-Picture_12.png

सीएस बनाम IOwait (x10000 स्केल)

संपूर्ण पाठ http://src.autonomy.net.au/imagebin/a52a2a8a120394849c0da4045933e306-Picture_13.png

अधिक बेकार जानकारी के मामले में कोई भी पूछता है ..

  • सर्वर पर काम करने वाला स्टोरेज FC के माध्यम से एक 0.5TB SAN है
  • 8GB RAM है, ज्यादातर कैश है - कोई स्वैपिंग नहीं।

1
किसी विशेष अवधि में?
dmckee

क्या आप कार्यभार के बारे में अधिक विशिष्ट हो सकते हैं?
dmo

1
आपने वह ग्राफ कैसे बनाया? बहुत अच्छा लग रहा है!
एंटोनी बेनकेमोन

हाय एंटोनी - रेखांकन sarface ( प्रोजेक्ट .autonomy.net.au/sarface ) से किए गए हैं
Xerxes

ग्राफ़ लिंक अब तक मृत हैं। @Xerxes क्या आप कहीं से मिल सकते हैं?
törzsmókus

जवाबों:


25

यह आपके द्वारा चलाए जा रहे एप्लिकेशन के प्रकार पर बहुत निर्भर करता है। यदि आपको ऐसे एप्लिकेशन मिले हैं जो बहुत ही खुश-खुशी 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 के पास एक अच्छा राइटअप है जो संदर्भ स्विच और सिस्टम कॉल हैं। विकिपीडिया में सामान्य जानकारी और सिस्टम कॉल पर एक अच्छा लिंक संग्रह है।


1
यह उपयोगी रहा है - आपने मुझे एक महान विचार दिया है! =)
ज़ेरक्स

1
आपका कथन System calls cause context switches by their very own natureगलत लगता है। Linfo.org/context_switch.html
निकोलस लैब्रोट

6

लगभग 100-150 पर मेरा मामूली भरा हुआ वेबसर्वर हजारों में चोटियों के साथ दूसरी बार स्विच करता है।

उच्च संदर्भ स्विच दरें स्वयं एक मुद्दा नहीं हैं, लेकिन वे अधिक महत्वपूर्ण समस्या का रास्ता बता सकते हैं।

संपादित करें: संदर्भ स्विच एक लक्षण है, एक कारण नहीं है। क्या आप सर्वर पर चलाने की कोशिश कर रहे हैं? यदि आपके पास एक मल्टीप्रोसेसर मशीन है, तो आप अपने मुख्य सर्वर प्रक्रियाओं के लिए सीपीयू आत्मीयता स्थापित करने का प्रयास कर सकते हैं।

वैकल्पिक रूप से यदि आप X चला रहे हैं, तो कंसोल मोड में छोड़ने का प्रयास करें।

फिर से संपादित करें: प्रति सेकंड 16k सीएस पर, प्रत्येक सीपीयू दो स्विच प्रति मिलीसेकंड से औसत है - जो कि सामान्य समय के साथ छठे के छठे से आधा है। क्या वह बहुत सारे IO बाउंड थ्रेड चला रहा होगा?

फिर से पोस्ट ग्राफ संपादित करें: निश्चित रूप से IO बाध्य दिखता है। जब संदर्भ स्विच उच्च होते हैं तो सिस्टम SYS में अपना अधिकांश समय व्यतीत करता है?

एक बार फिर से संपादित करें: उस अंतिम ग्राफ में उच्च आयोवाइट और सिस्टम - पूरी तरह से उपयोगकर्तास्पेस ग्रहण करना। आपको IO की समस्या है।
आप किस FC कार्ड का उपयोग कर रहे हैं?

संपादित करें: हम्म। कुछ बेंचमार्क प्राप्त करने का कोई मौका आपके SAN का उपयोग कर रहा है bonnie ++ या समय के दौरान dbench? मुझे यह देखने में दिलचस्पी होगी कि क्या उनके समान परिणाम हैं।

संपादित करें: सप्ताहांत पर इस बारे में सोच रहा था और मैंने इसी तरह के उपयोग के पेटेंट देखे हैं जब बोनी एक बार में "बाइट लिखता है"। हो सकता है कि बड़ी मात्रा में स्विचिंग की व्याख्या हो, क्योंकि प्रत्येक लेखन के लिए एक अलग syscall की आवश्यकता होगी।


मुझे अभी भी यकीन नहीं है कि एक उच्च संदर्भ-स्विच दर कोई समस्या नहीं है, मैं 4K से 16K में उच्च के बारे में बात कर रहा हूं, 100-150 नहीं।
Xerxes

हमारे कोई भी सर्वर किसी भी एक्स को नहीं चलाते हैं। मैं IO प्रतीक्षा समस्या पर आपके साथ सहमत हूं, और उस और सीएस के बीच संबंध। HBA कार्ड एक संदेह नहीं है, क्योंकि हम एक ही कार्ड का उपयोग अन्य सौ या तो सर्वरों पर करते हैं ... निष्कर्ष यह है कि मैं SAN टीमों को ईवीए SAN को दोषी ठहराता हूं कि वे हर समय प्रयास करते हैं और बचाव करते हैं। ध्यान दें कि एक उच्च IO- प्रतीक्षा हमेशा चिंतित होने का कारण नहीं है , अगर मशीन पर अधिकांश प्रक्रियाएं IO- बाध्य होती हैं, तो यह उम्मीद की जाती है कि सर्वर के पास उस बेकार स्पिन को करने के लिए बेहतर कुछ भी नहीं होगा।
एक्सरेक्स

हालांकि दूसरा - 4 वें ग्राफ संलग्न से पता चलता है कि यह वास्तव में उतना करीब नहीं है जितना मैं पहले था। किसी भी तरह से बिल्कुल ग्रहण नहीं। मैं अब भी SAN को दोष देता हूं। =)
एक्सरेक्स

1

मैं सिस्टम स्थिति के CPU अधिभोग दर के बारे में अधिक चिंतित हूं। यदि यह 10% या अधिक के करीब है, तो इसका मतलब है कि आपका ओएस संदर्भ स्विच करने में बहुत अधिक समय खर्च कर रहा है। हालांकि कुछ प्रक्रियाओं को किसी अन्य मशीन में स्थानांतरित करना बहुत धीमा है, यह ऐसा करने के लिए योग्य है।


1

इस तरह की चीजें हैं इसलिए आपको अपने सर्वर के लिए प्रदर्शन आधार रेखा का प्रयास करना चाहिए। इस तरह, आप उन सभी चीज़ों की तुलना कर सकते हैं, जिन्हें आप अचानक अतीत में दर्ज की गई चीज़ों के साथ देखते हैं।

उस ने कहा, मेरे पास सर्वर चल रहे हैं (मुख्य रूप से बहुत व्यस्त ओरेकल सर्वर नहीं हैं), जो कुछ 4k चोटियों के साथ 2k के आसपास स्थिर हैं। मेरे सर्वर के लिए, जो अन्य लोगों के सर्वर के लिए सामान्य है, जो बहुत कम या बहुत अधिक हो सकता है।

आप अपने डेटा में कितनी दूर जा सकते हैं?

आप हमें किस प्रकार की CPU जानकारी दे सकते हैं?


मैं निश्चित रूप से एक आधार रेखा रखने के साथ सहमत हूं, और हमारे पास लंबे समय से नागों के डेटा वापस आने के लिए है - इस सर्वर के साथ समस्या यह है कि यह नया रक्त है - केवल थोड़ी देर के लिए चारों ओर रहा। इसके अलावा, यह उद्यम चला रहा है (पढ़ें: बकवास) सॉफ्टवेयर - टीमसाइट - बस अपरिभाषित-चर सूची में जोड़ने के लिए। मैं अभी भी सर (व्यक्तिगत पसंद) को प्राथमिकता देता हूं, इसलिए मैं इसे डिफ़ॉल्ट (2-सप्ताह) से अधिक रखने के लिए कॉन्फ़िगर करूंगा, और देखूंगा कि यह कैसे जाता है।
ज़ेरॉक्स

Rrdtool के साथ संयोजन में सर का उपयोग करना (जो ऐसा लगता है कि आपके ग्राफ़ से आता है) लंबे समय तक आपके डेटा (या कम से कम सार) को रखने का एक आसान साधन हो सकता है।
wzzrd

0

अंगूठे का कोई नियम नहीं है। एक संदर्भ स्विच सिर्फ CPU है जो एक थ्रेड को दूसरे से प्रोसेस करने के लिए ले जाता है। यदि आप बहुत सारी प्रक्रियाएँ चलाते हैं (या कुछ अत्यधिक थ्रेड वाले) तो आपको अधिक स्विच दिखाई देंगे। सौभाग्य से, आपको इस बारे में चिंता करने की ज़रूरत नहीं है कि कितने संदर्भ स्विच हैं - लागत छोटी और अधिक या कम अपरिहार्य है।


6
वास्तव में एक संदर्भ स्विच की लागत महंगी है । वर्चुअल मशीनों पर यह और भी बुरा है - हमने कुछ महीने पहले कुछ परीक्षण किया था जिसमें पता चला था कि वीएम प्रदर्शन का सबसे बड़ा कारण संदर्भ-स्विचिंग था।
Xerxes

वास्तव में, किसी भी आधुनिक (मल्टी-टास्किंग) ऑपरेटिंग सिस्टम में, संदर्भ-स्विचिंग का न्यूनतमकरण एक बहुत ही महत्वपूर्ण अनुकूलन कार्य है। क्या आपके पास कोई दावा है कि लागत कम है?
Xerxes

क्षमा करें, क्या आप OS विकास के परिप्रेक्ष्य से संदर्भ स्विच को कम करने के बारे में बात कर रहे हैं? इस तरह के विकास से कोई लेना-देना नहीं है, सीएस को कम करने के लिए एक प्रणाली को डिजाइन करने के लाभों पर मेरी कोई राय नहीं है :) यदि आप सर्वर पर संदर्भ स्विच को कम करने के बारे में बात कर रहे हैं, तो समस्या स्विच को कम कर रहा है अन्य स्थानों में विलंबता का परिचय देता है। ईजी एक मशीन पर प्रक्रियाओं की संख्या को कम करने का मतलब है कि आपको इन प्रक्रियाओं को किसी अन्य मशीन में स्थानांतरित करना होगा, जिसका अर्थ है कि एक नेटवर्क पर संचार होता है, जो बहुत धीमा है!
एलेक्स जे

मेरा मानना ​​है कि संदर्भ स्विच की आपकी परिभाषा त्रुटिपूर्ण है; वे तब भी होते हैं जब एक सिस्टम कॉल किया जाता है, भले ही वह उसी थ्रेड पर लौटता हो। अनुप्रयोग विभिन्न ट्रिक करके इसके विरुद्ध अनुकूलन करते हैं। उदाहरण के लिए अपाचे को बहुत बार सिस्टम समय प्राप्त करने की आवश्यकता होती है; उस उद्देश्य के लिए एक थ्रेड स्थानीय रूप से बार-बार कॉल करता है और परिणाम को साझा मेमोरी में संग्रहीत करता है। अन्य थ्रेड्स को केवल रैम से पढ़ना होता है और ऐसा करने पर प्रोसेस स्विच को लाइक नहीं करते।
नीक्सर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.