सिस्टम लिनक्स (जेनेटू x64) है, कोड सी ++ है। मेरे पास एक डिमन एप्लिकेशन है, जिसमें से कई उदाहरण एक ही मशीन पर चल रहे हैं। आवेदन खुद बहुमत है। कुछ समय के लिए, मैं अपने प्रदर्शन में अजीब देरी देख रहा हूं।स्वतंत्र बहुप्रचारित प्रक्रियाएं एक साथ ब्लॉक करती हैं
कुछ डीबगिंग कोड डालने के बाद, मैं एक अजीब चीज के साथ आया जब डेमॉन के कई उदाहरण सचमुच एक बाहरी कारण या कुछ कारणों से कथित तौर पर अवरुद्ध हो जाते हैं। यह सब सरल रखने के लिए, मैं इस तरह एक दृश्य:
- लॉग समय (t1)
- ताला म्युटेक्स
- कॉल सी ++
std::list::push_back()
/pop_back()
(यानी बहुत सरल गणित) - अनलॉक म्युटेक्स
- लॉग समय (t2)
समय-समय पर, मैं स्पष्ट रूप से देखता हूं कि चरण 3 पर गणित से संबंधित कुछ वास्तव में अत्यधिक समय के लिए कई स्वतंत्र (!) प्रक्रियाओं में चलने वाला अनुक्रम चरण 2 (या चरण 4 पर प्रोबबी) पर ब्लॉक करता है (उदाहरण के लिए, 0.5 - 1.0 सेकंड)। सबूत के रूप में, मुझे लगता है कि सभी प्रक्रियाओं के लिए लॉग में टी 2 सचमुच वही है (कुछ माइक्रोसेकंड में अलग)। ऐसा लगता है कि प्रक्रियाओं के कुछ धागे अपेक्षाकृत अलग-अलग समय पर अनुभाग में प्रवेश करते हैं (मैं स्पष्ट रूप से टी 1 के लिए 0.5 - 1 सेकंड अंतर देख सकता हूं), म्यूटेक्स में लॉक करें, और उस समय अनलॉक करने योग्य समय में अनलॉक करने के दौरान अनलॉक करें लॉग के अनुसार ताला (टी 2 - टी 1 अंतर)। मुझे डरावना लग रहा है।
इस मुद्दे का प्रकटन अपेक्षाकृत दुर्लभ है, लगभग 5-10 मिनट मध्यम भार के तहत। परीक्षण में कोई एनटीपी समय बदलाव लॉग नहीं है (यह वास्तव में मेरा पहला विचार था)। यदि यह एनटीपी था, तो सेवा में वास्तविक देरी नहीं होगी, लॉग में केवल गलत समय होगा।
मैं कहां से शुरू करूं? क्या मैं शेड्यूलर ट्यून करना शुरू करूँ? लिनक्स में सैद्धांतिक रूप से एक संपूर्ण बहुप्रचारित प्रक्रिया को क्या रोक सकता है?
तो म्यूटेक्स धागे द्वारा साझा किए गए संसाधन की सुरक्षा करता है .. क्या आप जानते हैं कि ब्लॉकिंग व्यवहार को देखते समय कितने धागे मौजूद हैं? यानी यह अजीब नहीं हो सकता है अगर धागे के एक टन उस पल में अपनी बारी के लिए इंतजार कर रहे हैं। साथ ही, क्या संसाधन का उपयोग करने का कोई कारण है कि समय की एक बड़ी विविधता है? – nckturner
जब ऐसा होता है तो आप सिस्टम पर मेमोरी प्रेशर की निगरानी कर सकते हैं। बस एक अनुमान (बहुत बढ़ाया नहीं गया) push_back आवंटन निष्पादित कर सकता है जो वर्चुअल आवंटन को गति दे सकता है और धीमा हो सकता है यदि कुल प्रतिबद्धता शुल्क सिस्टम पर पहले से अधिक हो। – nanda
इस अनुक्रम को क्या कॉल कर रहा है? यह कितनी बार चलता है? – ethrbunny