fork - In multi-core machine, Linux OS, when process scheduler will migrate one process to another cpu -
मेरे प्रोग्राम में, जिसका आरएसएस 65G है, जब कॉल तो मेरा सवाल है कि एक सीपीयू कांटा में व्यस्त था, क्यों शेड्यूलर इस सीपीयू पर अन्य निष्क्रिय सीपीयू पर प्रतीक्षा कर रहा है? सामान्य में, कब और कैसे अनुसूचक सीपीयू के बीच प्रक्रिया माइग्रेट करते हैं? आरएसएस 65G है, जब कॉल फोर्क, sys_clone- & gt; dup_mm- & gt; copy_page_range 2 सेकंड से अधिक का उपभोग करेगा मौजूदा कोड की जबकि rwlock एक धागा कांटा खत्म होने तक सीपीयू का समय नहीं मिल सकता है तो मेरा प्रश्न एक सीपीयू कांटा में व्यस्त था, क्यों अनुसूचक इस सीपीयू पर अन्य निष्क्रिय सीपीयू पर प्रतीक्षा कर रहा है? क्या आप निश्चित हैं, कि दूसरे धागे को चलने के लिए तैयार है और मम्मा के साथ कुछ भी नहीं करना चाहता है, जैसे: असल में, प्रतीक्षा-सीपीयू धागा मेरा आईओ धागा है, जो ग्राहक से पैकेज भेजता / प्राप्त करता है, मेरे अवलोकन में, पैकेज हमेशा मौजूद है, लेकिन IO धागा इसे प्राप्त नहीं कर सकता। आपको अपनी प्रतीक्षा-सीपीयू थ्रेड (इसके लिए भी SysRq है) का ढेर और I / O का प्रकार चेक करना चाहिए फ़ाइल का इसके अलावा आप प्रतीक्षा-सीपीयू धागा के "आखिरी इस्तेमाल सीपीयू" की जांच कर सकते हैं, उदा। थ्रेड व्यू ( यदि आप केवल फोर्क ,
sys_clone-> gt ; Dup_mm- & gt; कॉपी_पृष्ठ_आरेन्ज 2 सेकंड से अधिक का उपभोग करेगा इस मामले में, एक सीपीयू 100% sys जब निष्पादित कांटा, एक ही समय में, एक धागा काँक खत्म होने तक सीपीयू का समय नहीं मिल सकता है। मशीन में 16 सीपीयू हैं, अन्य सीपीयू बेकार है।
कांका (या
क्लोन ) कर रही है, तो नई प्रक्रिया के रूप में प्रतिलिपि होना चाहिए। नया
मिमी बनाता है और वास्तविक प्रतिलिपि बनाएं।
copy_page_range पर कोई प्रत्यक्ष कॉल नहीं है, लेकिन मुझे लगता है कि इसे
dup_mm में लिखे जा सकता है और इसे
copy_page_range पर कॉल किया गया है। <
dup_mmap में
नया
mm और पुराने
oldmm दोनों में लॉक कई ताले हैं, 356 डाउन_लिटेक्ट (& amp; पुराने-> एमएमएपी_एसएएम);
mmap_sem रीडर / लेखक सिकंदरा लेने के बाद, सभी मेटैप्स पर अपने मेटाइआइमेन्शन की प्रतिलिपि बनाने के लिए एक लूप है:
381 लूप के बाद (यह आपके मामले में लंबे समय तक है),
mmap_sem कोड> अनलॉक किया गया है:
465 बाहर: 468 up_write (& oldmm- & gt; mmap_sem);
mmap_sep लेखक के नीचे है, कोई भी अन्य पाठक या लेखक
पुराने एमएम में mmaps के साथ कुछ भी कर सकता है।
brk ),
mmap आईजी I / O का प्रकार है जो कि
mmap_sem पर फोर्क द्वारा अवरुद्ध किया जाएगा।
H कुंजी) को सक्षम करके और "अंतिम उपयोग किए गए CPU" कॉलम को आउटपुट (
fj में पुराने में) से
शीर्ष निगरानी उपयोगिता में ;
f को
पी पर स्क्रॉल करें, नए में दर्ज करें)। मुझे लगता है कि यह संभव है कि आपका प्रतीक्षा-सीपीयू धागा पहले से ही अन्य सीपीयू पर था, बस चलाने के लिए अनुमति नहीं है (तैयार नहीं)।
exec , यह उपयोगी हो सकता है:
vfork +
exec पर स्विच करें (या सिर्फ
posix_spawn )। आपकी प्रक्रिया (लेकिन) जब तक कि नई प्रक्रिया
exec या
बाहर निकलना नहीं करती है, लेकिन नकल की जाने वाली 65 जीबी के मिमी के इंतजार के मुकाबले चलने में तेज़ हो सकता है।
Comments
Post a Comment