अंग्रेज़ीफ्रेंचस्पेनिश

Ad


ऑनवर्क्स फ़ेविकॉन

distcc - क्लाउड में ऑनलाइन

उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर पर ऑनवर्क्स फ्री होस्टिंग प्रदाता में डिस्टसीसी चलाएं

यह कमांड distcc है जिसे हमारे कई मुफ्त ऑनलाइन वर्कस्टेशन जैसे उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर का उपयोग करके ऑनवर्क्स फ्री होस्टिंग प्रदाता में चलाया जा सकता है।

कार्यक्रम:

नाम


distcc - distcc-पंप एक्सटेंशन के साथ वितरित C/C++/ObjC कंपाइलर

SYNOPSIS


व्याकुल करना [संकलक विकल्प]

व्याकुल करना [संकलक विकल्प]

[संकलक विकल्प]

व्याकुल करना [DISTCC विकल्प]

वर्णन


distcc एक नेटवर्क पर कई मशीनों में C कोड का संकलन वितरित करता है। जिला
हमेशा स्थानीय संकलन के समान परिणाम उत्पन्न करना चाहिए, इसे स्थापित करना आसान है और
उपयोग करें, और यह अक्सर स्थानीय संकलन की तुलना में बहुत तेज़ होता है।

इस संस्करण में सादे वितरण के साथ-साथ पंप मोड या नामक एक संवर्द्धन भी शामिल है
distcc-पंप.

प्रत्येक कार्य के लिए, सादे मोड में distcc पूर्ण पूर्व-संसाधित स्रोत कोड भेजता है
क्लाइंट से संकलन सर्वर तक पूरे नेटवर्क में कंपाइलर तर्क। पंप में
मोड, distcc स्रोत कोड भेजता है और हेडर फ़ाइलों को पुनरावर्ती रूप से शामिल करता है (उन्हें छोड़कर)।
डिफ़ॉल्ट सिस्टम हेडर निर्देशिकाओं से), ताकि प्रीप्रोसेसिंग और संकलन दोनों
संकलन सर्वर पर हो सकता है। इससे संकलनों के वितरण में तेजी आती है
मैदानी क्षेत्र पर परिमाण के एक क्रम तक।

संकलन एक क्लाइंट मशीन द्वारा संचालित होता है, जो आमतौर पर डेवलपर का कार्य केंद्र होता है
या लैपटॉप. Distcc क्लाइंट इस मशीन पर चलता है, जैसा कि प्रीप्रोसेसर (यदि होता है) पर चलता है
डिस्टसीसी के पंप मोड का उपयोग नहीं किया जाता है), लिंकर, और निर्माण प्रक्रिया के अन्य चरण। कोई
कई स्वयंसेवी मशीनें संकलन सर्वर के रूप में कार्य करती हैं और क्लाइंट को इसे बनाने में मदद करती हैं
प्रोग्राम, चलाकर जिलासीसीडी(1) आवश्यकतानुसार डेमॉन, सी कंपाइलर और असेंबलर।

distcc या तो टीसीपी सॉकेट (डिफ़ॉल्ट रूप से पोर्ट 3632 पर) या सुरंग के माध्यम से चल सकता है
कमांड जैसे एसएसएच(1). टीसीपी कनेक्शन के लिए स्वयंसेवकों को इसे चलाना होगा जिलासीसीडी(1) डेमन
या तो सीधे या inetd से. SSH कनेक्शन के लिए distccd स्थापित होना चाहिए लेकिन होना चाहिए
नहीं कनेक्शन के लिए सुन रहे हो.

टीसीपी कनेक्शन का उपयोग केवल सुरक्षित नेटवर्क पर ही किया जाना चाहिए क्योंकि वहां कोई उपयोगकर्ता नहीं है
स्रोत या ऑब्जेक्ट कोड का प्रमाणीकरण या सुरक्षा। SSH कनेक्शन आम तौर पर 25% होते हैं
एन्क्रिप्शन के लिए प्रोसेसर ओवरहेड के कारण धीमा, हालाँकि यह काफी भिन्न हो सकता है
सीपीयू, नेटवर्क और बनाए जा रहे प्रोग्राम पर निर्भर करता है।

distcc का उपयोग GNU मेक के साथ करने का इरादा है -j विकल्प, जो कई कंपाइलर चलाता है
समवर्ती रूप से प्रक्रियाएँ। distcc नौकरियों को स्थानीय और दूरस्थ दोनों सीपीयू में फैलाता है।
क्योंकि distcc अधिकांश कार्य को पूरे नेटवर्क में वितरित करने में सक्षम है, एक उच्चतर
स्थानीय बिल्ड की तुलना में समवर्ती स्तर का उपयोग किया जा सकता है। एक सामान्य नियम के रूप में, -j मूल्य
उपलब्ध सर्वर सीपीयू की कुल संख्या के लगभग दोगुने पर सेट किया जाना चाहिए, लेकिन इसके अधीन
ग्राहक सीमाएँ. यह सेटिंग अवरुद्ध किए जा रहे कार्यों को अधिकतम इंटरलीविंग की अनुमति देती है
डिस्क या नेटवर्क IO की प्रतीक्षा की जा रही है। ध्यान दें कि distcc अन्य बिल्ड नियंत्रण के साथ भी काम कर सकता है
उपकरण, जैसे SCons, जहां समान समवर्ती सेटिंग्स को समायोजित किया जाना चाहिए।

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

इसके विपरीत, पंप मोड का उपयोग करना और कहें कि 40 सर्वर, की एक सेटिंग -j80 या बड़ा हो सकता है
एकल-सीपीयू ग्राहकों के लिए भी उपयुक्त।

यह पुरजोर अनुशंसा की जाती है कि आप सभी मशीनों पर एक ही कंपाइलर संस्करण स्थापित करें
किसी निर्माण में भाग लेना। असंगत कंपाइलर रहस्यमय संकलन या लिंक का कारण बन सकते हैं
विफलताओं।

जल्दी शुरू


1 प्रत्येक मशीन के लिए, distcc डाउनलोड करें, अनपैक करें और इंस्टॉल करें।

2 प्रत्येक सर्वर पर चलाएँ जिलासीसीडी --डेमन साथ में --अनुमति प्रतिबंधित करने के विकल्प
उपयोग.

3 अपने परिवेश में सर्वरों के नाम रखें:
$ निर्यात DISTCC_HOSTS='लोकलहोस्ट लाल हरा नीला'

4 निर्माण!
$ मेक -j8 CC=distcc

जल्दी शुरू के लिए DISTCC-पंप मोड


ऊपर बताए अनुसार आगे बढ़ें, लेकिन चरण 3 में, निर्दिष्ट करें कि दूरस्थ होस्ट को इसका बोझ उठाना है
प्रीप्रोसेसिंग और नेटवर्क पर भेजी गई फ़ाइलों को संपीड़ित किया जाना चाहिए:

$ निर्यात DISTCC_HOSTS='--लोकलहोस्ट रेड, सीपीपी, एलज़ो ग्रीन, सीपीपी, एलज़ो को यादृच्छिक करें
नीला, सीपीपी, एलज़ो'

RSI --यादृच्छिक करें विकल्प संकलित सर्वरों के एक समान उपयोग को लागू करता है। जबकि आपको मिलेगा
केवल कुछ सर्वरों के साथ distcc के पंप मोड से कुछ लाभ, आपको बढ़ता हुआ लाभ मिलता है
अधिक सर्वर सीपीयू के साथ (सैकड़ों तक!)। अपने निर्माण को पंप कमांड के अंदर लपेटें,
यहां 10 सर्वर माने गए हैं:

$ डिस्टसीसी-पंप मेक -जे20 सीसी=डिस्टसीसी

कैसे मैदान (गैर पंप) DISTCC काम करता है


distcc केवल कंपाइलर और असेंबलर को दूरस्थ रूप से चलाता है। सादे distcc के साथ,
प्रीप्रोसेसर को हमेशा स्थानीय रूप से चलना चाहिए क्योंकि उसे विभिन्न हेडर फ़ाइलों तक पहुँचने की आवश्यकता होती है
स्थानीय मशीन जो स्वयंसेवक पर मौजूद नहीं हो सकती है, या समान नहीं हो सकती है।
लिंकर को इसी तरह पुस्तकालयों और ऑब्जेक्ट फ़ाइलों की जांच करने की आवश्यकता होती है, और इसलिए उसे स्थानीय रूप से चलना चाहिए।

कंपाइलर और असेंबलर केवल एक इनपुट फ़ाइल (पूर्व-संसाधित स्रोत) लेते हैं और
एकल आउटपुट (ऑब्जेक्ट फ़ाइल) उत्पन्न करें। distcc इन दोनों फ़ाइलों को पार भेजता है
नेटवर्क और इसलिए कंपाइलर/असेंबलर को दूरस्थ रूप से चला सकते हैं।

सौभाग्य से, अधिकांश प्रोग्रामों के लिए प्रीप्रोसेसर चलाना अपेक्षाकृत सस्ता है, और
लिंकर को अपेक्षाकृत कम कहा जाता है, इसलिए अधिकांश कार्य वितरित किए जा सकते हैं।

distcc यह निर्धारित करने के लिए अपनी कमांड लाइन की जांच करता है कि इनमें से कौन से चरण लागू किए जा रहे हैं, और
क्या काम बांटा जा सकता है.

कैसे DISTCC-पंप मोड काम करता है


पंप मोड में, distcc प्रीप्रोसेसर को दूरस्थ रूप से भी चलाता है। ऐसा करने के लिए, प्रीप्रोसेसर को अवश्य होना चाहिए
उन सभी फाइलों तक पहुंच है, जिन तक यह स्थानीय रूप से चलने पर पहुंच सकता था। में
पंप मोड, इसलिए, distcc को छोड़कर सभी पुनरावर्ती रूप से शामिल हेडर को इकट्ठा करता है
जो डिफ़ॉल्ट सिस्टम हेडर हैं, और उन्हें स्रोत फ़ाइल के साथ भेजता है
संकलन सर्वर.

डिस्टसीसी-पंप मोड में, सर्वर सभी स्रोत फ़ाइलों के सेट को अस्थायी रूप से अनपैक करता है
निर्देशिका, जिसमें एक निर्देशिका वृक्ष होता है जो फ़ाइल सिस्टम के भाग को प्रतिबिंबित करता है
प्रतीकात्मक लिंक सहित प्रीप्रोसेसिंग के लिए प्रासंगिक है।

फिर कंपाइलर को अस्थायी निर्देशिका में उस पथ से चलाया जाता है जो इससे मेल खाता है
क्लाइंट पर वर्तमान कार्यशील निर्देशिका। सैकड़ों फ़ाइलों को ढूँढ़ने और प्रसारित करने के लिए
जो अक्सर एकल संकलन का हिस्सा होते हैं, पंप मोड एक वृद्धिशील समावेश का उपयोग करता है
विश्लेषण एल्गोरिथ्म. इनक्लूड सर्वर एक पायथन प्रोग्राम है जो इसे लागू करता है
कलन विधि। डिस्टसीसी-पंप कमांड सर्वर को शामिल करना शुरू करता है ताकि पूरे निर्माण के दौरान
यह distcc कमांड द्वारा प्रश्नों का उत्तर दे सकता है।

शामिल सर्वर सशर्त से निपटने के लिए मैक्रो भाषा के स्थैतिक विश्लेषण का उपयोग करता है
संकलन और गणना शामिल है। यह उस संपत्ति का उपयोग करता है जो किसी दिए गए हेडर फ़ाइल में होती है
शामिल के लिए पहले ही विश्लेषण किया जा चुका है, यदि सभी शामिल हैं तो दोबारा ऐसा करना आवश्यक नहीं है
विकल्प (-I) अपरिवर्तित हैं (अन्य शर्तों के साथ)।

बड़े बिल्ड के लिए, हेडर फ़ाइलें औसतन प्रत्येक में सैकड़ों बार शामिल की जाती हैं। साथ
distcc-पंप मोड में ऐसी प्रत्येक फ़ाइल का केवल कुछ ही बार विश्लेषण किया जाता है, इसके बजाय शायद केवल एक बार
सैकड़ों बार पूर्व-संसाधित होने का। साथ ही, प्रत्येक स्रोत या हेडर फ़ाइल अब है
केवल एक बार संपीड़ित किया जाता है, क्योंकि शामिल सर्वर संपीड़ित फ़ाइलों को याद रखता है। के तौर पर
परिणामस्वरूप, संकलन तैयार करने में लगने वाला समय परिमाण के एक क्रम तक कम हो सकता है
सादे जिले की प्रीप्रोसेसिंग पर।

क्योंकि पंप मोड में distcc लगभग दस गुना तेजी से फाइलों को बाहर निकालने में सक्षम है, बिल्ड
सादे डिस्टीसीसी मोड की तुलना में बड़े बिल्ड के लिए गति 3 गुना या उससे अधिक बढ़ सकती है।

प्रतिबंध के लिए पंप मोड


पंप मोड का उपयोग करने के लिए क्लाइंट और सर्वर दोनों को distcc और के रिलीज़ 3.0 या बाद के संस्करण का उपयोग करने की आवश्यकता होती है
distccd (क्रमशः)।

वृद्धिशील में डिस्टसी-पंप मोड का विश्लेषण मौलिक धारणा पर आधारित है
निर्माण प्रक्रिया के दौरान स्रोत और हेडर फ़ाइलें नहीं बदलतीं। कुछ जटिल निर्माण
सिस्टम, जैसे कि लिनक्स कर्नेल 2.6, इस आवश्यकता को पूरी तरह से पूरा नहीं करते हैं। को
ऐसे मुद्दों को दूर करें, और अन्य कोने के मामलों जैसे कि पूर्ण फ़ाइलपथ में शामिल हैं, देखें
la include_server(1) मैन पेज

एक और महत्वपूर्ण धारणा यह है कि सभी मशीनों का कॉन्फ़िगरेशन शामिल होना चाहिए
सदृश। इस प्रकार डिफ़ॉल्ट सिस्टम पथ के अंतर्गत हेडर सभी सर्वरों पर समान होने चाहिए
और सभी ग्राहक. यदि एक मानक जीएनयू कंपाइलर इंस्टॉलेशन का उपयोग किया जाता है, तो यह आवश्यकता
उन सभी लाइब्रेरी पर लागू होता है जिनकी हेडर फ़ाइलें नीचे स्थापित हैं / usr / शामिल हैं or
/usr/स्थानीय/शामिल/। ध्यान दें कि सॉफ़्टवेयर पैकेज स्थापित करने से अक्सर अतिरिक्त परिणाम मिलते हैं
हेडर फ़ाइलें दोनों में से किसी एक की उपनिर्देशिकाओं में रखी जा रही हैं।

यदि यह धारणा सही नहीं है, तो distcc-पंप के साथ बिल्ड को तोड़ना संभव है
बिना किसी चेतावनी के गलत परिणाम प्राप्त करने के लिए मोड, या इससे भी बदतर। फिलहाल यह स्थिति नहीं है
सत्यापित, और इस समस्या के समाधान के लिए यह हमारी TODO सूची में है।

यह गारंटी देने का एक आसान तरीका है कि सम्मिलित कॉन्फ़िगरेशन समान हैं, क्रॉस- का उपयोग करना है
कंपाइलर जो निर्देशिकाओं तक सीमित एक डिफ़ॉल्ट सिस्टम खोज पथ को परिभाषित करता है
संकलक स्थापना.

देखना include_server(1) उल्लंघन के लक्षणों और कारणों पर अधिक जानकारी के लिए मैनुअल
डिस्टसीसी-पंप मोड धारणाओं की।

विकल्प सारांश


distcc को दिए गए अधिकांश विकल्पों को कंपाइलर विकल्प के रूप में समझा जाता है। निम्नलिखित विकल्प
distcc द्वारा ही समझा जाता है। यदि इनमें से कोई भी विकल्प निर्दिष्ट किया गया है, तो distcc नहीं करेगा
संकलक को आमंत्रित करें.

--मदद सारांश निर्देश प्रदर्शित करता है.

--संस्करण
Distcc क्लाइंट संस्करण प्रदर्शित करता है।

--शो-मेजबान
होस्ट सूची प्रदर्शित करता है जिसका उपयोग distcc करेगा। होस्ट विशिष्टताएँ अनुभाग देखें।

--स्कैन-शामिल है
उन फ़ाइलों की सूची प्रदर्शित करता है जिन्हें distcc रिमोट मशीन पर भेजेगा
शामिल सर्वर द्वारा गणना की गई। यह का एक रूढ़िवादी (अति-)अनुमान है
फ़ाइलें जो C कंपाइलर द्वारा पढ़ी जाएंगी। यह विकल्प केवल पंप मोड में काम करता है।
इसकी गणना कैसे की जाती है, इसके विवरण के लिए "डिस्ट्रिक्ट-पंप मोड कैसे काम करता है" अनुभाग देखें।

सूची आउटपुट द्वारा व्याकुल करना --स्कैन-शामिल है प्रति पंक्ति एक प्रविष्टि होगी। प्रत्येक
पंक्ति में एक श्रेणी और उसके बाद एक पथ होता है। श्रेणी फ़ाइल, सिमलिंक में से एक है,
निर्देशिका, या सिस्टमदिर:

फ़ाइल एक स्रोत फ़ाइल या हेडर फ़ाइल को इंगित करता है जिसे distcc सर्वर पर भेजा जाएगा
मेज़बान।

सिमलिंक एक प्रतीकात्मक लिंक इंगित करता है जो डिस्टीसीसी सर्वर होस्ट को भेजा जाएगा।

निर्देशिका एक निर्देशिका को इंगित करता है जिसकी स्रोत को संकलित करने के लिए आवश्यकता हो सकती है
फ़ाइल। उदाहरण के लिए, इसमें शामिल होने के कारण एक निर्देशिका "foo" की आवश्यकता हो सकती है
प्रपत्र #में "foo/../bar.h" शामिल करें। ऐसी निर्देशिकाएँ distcc पर बनाई जाएंगी
सर्वर होस्ट.

सिस्टमडिर इंगित करता है कि एक सिस्टम में निर्देशिका शामिल है, यानी एक निर्देशिका जो पर है
कंपाइलर के डिफ़ॉल्ट में पथ शामिल है, जैसे "/ usr / शामिल हैं"; ऐसी निर्देशिकाएँ हैं
यह माना जाता है कि यह distcc सर्वर होस्ट पर मौजूद है, और इसलिए इसे नहीं भेजा जाएगा
distcc सर्वर होस्ट।

-j होस्ट सूची से गणना के अनुसार, जिले का समवर्ती स्तर प्रदर्शित करता है; यह है
इस क्लाइंट द्वारा सभी सर्वरों को जारी की गई बकाया नौकरियों की अधिकतम संख्या। द्वारा
डिफ़ॉल्ट रूप से यह होस्ट सूची में होस्ट की संख्या का चार गुना होगा, जब तक कि
होस्ट सूची में /LIMIT विकल्प का उपयोग किया गया था। होस्ट विशिष्टताएँ अनुभाग देखें।

स्थापित करने DISTCC


विभिन्न परिस्थितियों के अनुरूप, distcc को कॉल करने के तीन अलग-अलग तरीके हैं:

कॉल को इंटरसेप्ट करने के लिए distcc को वास्तविक कंपाइलर के नाम से इंस्टॉल किया जा सकता है
यह और उन्हें दूर से चलाएँ। इस "नकाबपोश" कंपाइलर में व्यापक अनुकूलता है
मौजूदा स्रोत पेड़ों के साथ, और यह सुविधाजनक है जब आप सभी के लिए distcc का उपयोग करना चाहते हैं
संकलन. तथ्य यह है कि distcc का उपयोग किया जा रहा है, मेकफ़ाइल्स के लिए पारदर्शी है।

distcc को कंपाइलर कमांड लाइन से जोड़ा जा सकता है, जैसे "distcc cc -c hello.c"
या CC='distcc gcc'. यह सुविधाजनक है जब आप केवल कुछ के लिए distcc का उपयोग करना चाहते हैं
संकलन या इसे आज़माने के लिए, लेकिन कुछ मेकफ़ाइलों के साथ समस्या उत्पन्न हो सकती है
लिबटूल के संस्करण जो मानते हैं कि $CC में कोई स्थान नहीं है।

अंत में, distcc को सीधे कंपाइलर के रूप में उपयोग किया जा सकता है। "cc" का प्रयोग हमेशा के रूप में किया जाता है
इस "अंतर्निहित" मोड में वास्तविक कंपाइलर का नाम। यह इसके लिए सुविधाजनक हो सकता है
जब "स्पष्ट" मोड काम नहीं करता है तो इंटरैक्टिव उपयोग लेकिन वास्तव में इसकी अनुशंसा नहीं की जाती है
नए प्रयोग के लिए.

याद रखें कि आपको एक ही समय में distcc पर कॉल करने के लिए दो तरीकों का उपयोग नहीं करना चाहिए। अगर आप
एक छद्म निर्देशिका का उपयोग कर रहे हैं, CC और/या CXX को न बदलें, बस निर्देशिका को पहले डालें
आपके पथ पर. यदि आप छद्मवेशी निर्देशिका का उपयोग नहीं कर रहे हैं, तो आपको या तो CC को बदलना होगा
और/या CXX, या distcc को स्पष्ट रूप से कॉल करने के लिए मेकफ़ाइल को संशोधित करें।

मुखौटा धारण कर लिया


मूल विचार एक "बहाना निर्देशिका" बनाना है जिसमें के नाम से लिंक शामिल हों
distcc बाइनरी के लिए वास्तविक संकलक। यह निर्देशिका PATH के प्रारंभ में डाली गई है, इसलिए
कंपाइलर को कॉल को इंटरसेप्ट किया जाता है और इसके बजाय distcc चलाया जाता है। distcc फिर हटा देता है
वास्तविक संकलक को खोजने के लिए स्वयं PATH से।

उदाहरण के लिए:

# एमकेडीआईआर /यूएसआर/lib/distcc/bin
# सीडी /usr/lib/distcc/bin
# ln -s ../../../bin/distcc gcc
# ln -s ../../../bin/distcc cc
# ln -s ../../../bin/distcc g++
# ln -s ../../../bin/distcc c++

फिर, distcc का उपयोग करने के लिए, उपयोगकर्ता को बस निर्देशिका /usr/lib/distcc/bin को शुरुआत में डालना होगा
PATH, और DISTCC_HOSTS या फ़ाइल में एक होस्ट सूची सेट की है। distcc संभालेगा
आराम।

ध्यान दें कि यह छद्मवेशी निर्देशिका उस निर्देशिका से पहले PATH पर होनी चाहिए
इसमें समान नाम के वास्तविक कंपाइलर और कोई भी सहायक प्रोग्राम शामिल हैं
ये कंपाइलर कॉल (जैसे कि या एलडी) को एक निर्देशिका में PATH पर भी पाया जाना चाहिए
छद्म निर्देशिका के बाद चूंकि distcc वास्तविक कंपाइलर को PATH के साथ कॉल करता है
वह मान जिसमें छद्मवेशी निर्देशिका सहित सभी निर्देशिकाओं को काट दिया गया है।

बहाना मोड में "रिकर्सन त्रुटि" प्राप्त करना संभव है, जिसका अर्थ है कि distcc है
किसी तरह खुद को फिर से खोज रहा हूँ, वास्तविक संकलक नहीं। यह संकेत दे सकता है कि आपके पास दो हैं
PATH पर निर्देशिकाओं को छिपाना, संभवतः इसमें दो distcc इंस्टालेशन होने के कारण
विभिन्न स्थान. यह यह भी संकेत दे सकता है कि आप "बहकाया हुआ" और मिश्रण करने का प्रयास कर रहे हैं
"स्पष्ट" ऑपरेशन.

लिंक के बजाय शेल स्क्रिप्ट का उपयोग करके रिकर्सन त्रुटियों से बचा जा सकता है। उदाहरण के लिए, में
/usr/lib/distcc/bin एक फ़ाइल cc बनाएं जिसमें शामिल है:

#!/ बिन / श
distcc /usr/bin/gcc "$@"

इस तरह, हम जांच करके वास्तविक जीसीसी का पता लगाने के लिए distcc पर निर्भर नहीं हैं
पथ चर. इसके बजाय, संकलक स्थान स्पष्ट रूप से प्रदान किया गया है।

का उपयोग करते हुए DISTCC साथ में सीसीएसीएचई


ccache एक प्रोग्राम है जो संकलनों के परिणामों को कैश करके सॉफ़्टवेयर निर्माण को गति देता है।
ccache को आम तौर पर distcc से पहले बुलाया जाता है, ताकि परिणाम सामान्य से प्राप्त हो सकें
कैश. विशिष्ट मेकफ़ाइल बनाने के लिए कुछ प्रयोग की आवश्यकता हो सकती है
सब कुछ एक साथ काम करें.

सबसे विश्वसनीय तरीका सेट करना है

CCACHE_PREFIX='distcc'

यह ccache को distcc को वास्तविक कंपाइलर के चारों ओर एक रैपर के रूप में चलाने के लिए कहता है। ccache अभी भी उपयोग करता है
कंपाइलर अपग्रेड का पता लगाने के लिए वास्तविक कंपाइलर।

फिर ccache को किसी बहाना निर्देशिका का उपयोग करके चलाया जा सकता है or व्यवस्थित करके

CC='ccache जीसीसी"

संस्करण 2.2 के अनुसार, ccache पूर्व-संसाधित स्रोत से संकलन को कैश नहीं करता है और ऐसा ही होगा
यदि इसे distccd या distcc से चलाया जाता है तो कभी भी कैश हिट न हो। इसे केवल पर ही चलाया जाना चाहिए
ग्राहक पक्ष और किसी भी उपयोग के लिए distcc से पहले।

distcc का पंप मोड ccache के साथ संगत नहीं है।

होस्ट विशेष विवरण


एक "होस्ट सूची" जिले को बताती है कि संकलन के लिए किन मशीनों का उपयोग करना है। क्रम में, distcc दिखता है
में $DISTCC_HOSTS पर्यावरण चर, उपयोगकर्ता का $DISTCC_DIR/होस्ट फ़ाइल, और
सिस्टम-व्यापी होस्ट फ़ाइल। यदि कोई होस्ट सूची नहीं मिल पाती है, तो distcc एक चेतावनी जारी करता है और संकलित करता है
स्थानीय स्तर पर।

होस्ट सूची होस्ट विशिष्टताओं की एक सरल रिक्त स्थान से अलग की गई सूची है। सबसे आसान
और सबसे सामान्य रूप होस्ट नाम है, जैसे

स्थानीय होस्ट लाल हरा नीला

distcc सूची की शुरुआत में होस्ट को प्राथमिकता देता है, इसलिए मशीनों को इसमें सूचीबद्ध किया जाना चाहिए
गति का अवरोही क्रम. विशेष रूप से, जब केवल एक ही संकलन चलाया जा सकता है (जैसे
कॉन्फिगर स्क्रिप्ट के अनुसार), सूचीबद्ध पहली मशीन का उपयोग किया जाता है (लेकिन देखें)। --यादृच्छिक करें नीचे).

रखकर स्थानीय होस्ट अच्छा प्रदर्शन पाने के लिए सूची में सही बिंदु पर होना महत्वपूर्ण है।
चूँकि स्थानीय स्तर पर कार्य चलाने के लिए ओवरहेड कम है, इसलिए लोकलहोस्ट को आम तौर पर पहले स्थान पर होना चाहिए।
हालाँकि, यह महत्वपूर्ण है कि ग्राहक के पास स्थानीय नौकरियाँ चलाने के लिए पर्याप्त साइकिलें हों
डिस्टसीसी क्लाइंट। यदि ग्राहक स्वयंसेवकों की तुलना में धीमा है, या यदि बहुत सारे हैं
स्वयंसेवक, तो ग्राहक को बाद में सूची में रखा जाना चाहिए या बिल्कुल नहीं। एक जनरल के तौर पर
नियम, यदि क्लाइंट की कुल सीपीयू गति कुल के पांचवें हिस्से से कम है, तो
ग्राहक को सूची से बाहर रखा जाना चाहिए.

यदि आपके पास एक बड़ा साझा बिल्ड क्लस्टर और एक साझा होस्ट फ़ाइल है, तो उपरोक्त नियम
मेजबान फ़ाइल में पहली कुछ मशीनों को पहले आज़माने का कारण बनेगा, भले ही वे
सूची में बाद की मशीनों की तुलना में अधिक व्यस्त होने की संभावना है। इससे बचने के लिए कीवर्ड लगाएं
--यादृच्छिक करें मेजबान सूची में. इससे होस्ट सूची यादृच्छिक हो जाएगी, जो
बड़े बिल्ड क्लस्टर के लिए प्रदर्शन में थोड़ा सुधार करना चाहिए।

दो विशेष होस्ट नाम हैं --localslots और --localslots_cpp जो कि उपयोगी हैं
स्थानीय मशीन पर लोड समायोजित करना। --localslots होस्ट निर्दिष्ट करता है कि कितनी नौकरियाँ हैं
दूर से नहीं चलाया जा सकता जिसे स्थानीय मशीन पर एक साथ चलाया जा सकता है
--localslots_cpp नियंत्रित करता है कि कितने प्रीप्रोसेसर स्थानीय पर समानांतर में चलेंगे
मशीन। इन मूल्यों को ट्यून करने से प्रदर्शन में सुधार हो सकता है। बड़े प्रोजेक्टों पर लिंकिंग लग सकती है
बड़ी मात्रा में स्मृति. समानांतर लिंकर्स चलाना, जिन्हें दूर से निष्पादित नहीं किया जा सकता,
मशीन को स्वैप करने के लिए बाध्य किया जा सकता है, जिससे कार्य चलाने की तुलना में प्रदर्शन कम हो जाता है
स्वैपिंग के बिना अनुक्रम। समानांतर प्रीप्रोसेसरों की संख्या बिल्कुल सही प्राप्त करना
आपको मेक के साथ बड़े समानांतर कारकों का उपयोग करने की अनुमति देता है, क्योंकि स्थानीय मशीन में अब कुछ हैं
स्थानीय संसाधन उपयोग को मापने के लिए तंत्र।

अंत में मेजबान प्रविष्टि है

प्रदर्शन परियोजना के लिए उपयोग किए गए स्रोत और मेकफ़ाइल्स के विवरण पर निर्भर करता है, और
मशीन और नेटवर्क की गति। होस्ट सूची के लिए विभिन्न सेटिंग्स के साथ प्रयोग करना
और -j कारक प्रदर्शन में सुधार कर सकता है।

वाक्य-विन्यास है

DISTCC_HOSTS = HOSTSpec ...
होस्टस्पेक = LOCAL_HOST | SSH_HOST | टीसीपी_होस्ट | OLDSTYLE_TCP_HOST
| वैश्विक_विकल्प
| ज़ीरोकॉन्फ़
LOCAL_HOST = लोकलहोस्ट[/LIMIT]
| --localslots=
| --localslots_cpp=
SSH_HOST = [USER]@HOSTID[/LIMIT][:कमांड][विकल्प]
TCP_HOST = HOSTID[:पोर्ट][/LIMIT][विकल्प]
OLDSTYLE_TCP_HOST = HOSTID[/LIMIT][:पोर्ट][विकल्प]
होस्टिड = होस्टनाम | आईपीवी4 | आईपीवी6
विकल्प =, विकल्प[विकल्प]
विकल्प = लोज़ो | सीपीपी
GLOBAL_OPTION = --यादृच्छिक करें
ज़ीरोकॉन्फ़ = +ज़ीरोकॉन्फ़

यहां वाक्यविन्यास के कुछ व्यक्तिगत उदाहरण दिए गए हैं:

स्थानीय होस्ट
शाब्दिक शब्द "लोकलहोस्ट" की व्याख्या विशेष रूप से संकलनों को उत्पन्न करने के लिए की जाती है
स्थानीय मशीन पर डेमॉन को भेजने के बजाय सीधे निष्पादित किया जाता है। यदि तुम करो
परीक्षण के लिए स्थानीय मशीन पर एक डेमॉन से कनेक्ट करना चाहते हैं, तो दें
मशीन का आईपी पता या वास्तविक होस्टनाम। (यह धीमा होगा।)

IPV6 वर्गाकार कोष्ठकों में संलग्न एक शाब्दिक IPv6 पता, जैसे [::1]

IPV4 एक शाब्दिक IPv4 पता, जैसे 10.0.0.1

HOSTNAME
रिज़ॉल्वर का उपयोग करके देखा जाने वाला होस्टनाम।

:बंदरगाह 3632 के डिफ़ॉल्ट के बजाय एक निर्दिष्ट दशमलव पोर्ट संख्या से कनेक्ट करें।

@होस्टिड
टीसीपी के बजाय एसएसएच पर होस्ट से कनेक्ट करें। SSH कनेक्शन के लिए विकल्प हो सकते हैं
अदि होना ~ / .Ssh / config

उपयोगकर्ता@ निर्दिष्ट उपयोगकर्ता नाम के रूप में SSH पर होस्ट से कनेक्ट करें।

:आज्ञा
SSH से कनेक्ट करें, और distccd सर्वर को खोजने के लिए एक निर्दिष्ट पथ का उपयोग करें। यह है
आम तौर पर केवल तभी इसकी आवश्यकता होती है जब किसी कारण से आप distccd को किसी निर्देशिका में स्थापित नहीं कर सकते
SSH कनेक्शन के लिए डिफ़ॉल्ट PATH पर। यदि आपको "distccd:" जैसी त्रुटियां मिलती हैं तो इसका उपयोग करें
कमांड नहीं मिला" SSH मोड में।

/सीमा संख्या को सीमित करने के लिए किसी भी होस्ट विनिर्देश में दशमलव सीमा जोड़ी जा सकती है
नौकरियां जो यह ग्राहक मशीन को भेजेगा। सीमा डिफ़ॉल्ट रूप से चार प्रति है
होस्ट (लोकलहोस्ट के लिए दो), लेकिन सर्वर द्वारा आगे प्रतिबंधित किया जा सकता है। तुम्हे करना चाहिए
केवल दो से अधिक प्रोसेसर वाले सर्वर के लिए इसे बढ़ाने की आवश्यकता है।

,एलज़ो इस टीसीपी या एसएसएच होस्ट के लिए एलजेडओ संपीड़न सक्षम करता है।

,सीपीपी इस होस्ट के लिए distcc-पंप मोड सक्षम करता है। ध्यान दें: बिल्ड कमांड को लपेटा जाना चाहिए
सर्वर शामिल करने के लिए distcc-पंप स्क्रिप्ट।

--यादृच्छिक करें
निष्पादन से पहले होस्ट सूची के क्रम को यादृच्छिक करें।

+शून्यconf
इस विकल्प is केवल उपलब्ध if व्याकुल करना था संकलित साथ में Avahi समर्थन सक्षम at
कॉन्फ़िगर समय है. जब यह विशेष प्रविष्टि मेजबानों की सूची में मौजूद होगी, तो distcc करेगा
किसी भी उपलब्ध वितरण का पता लगाने के लिए अवही जीरोकॉन्फ डीएनएस सर्विस डिस्कवरी (डीएनएस-एसडी) का उपयोग करें
स्थानीय नेटवर्क पर सर्वर. इससे होस्ट को स्पष्ट रूप से सूचीबद्ध करने की आवश्यकता से बचा जा सकता है
डिस्टसीसी सर्वर मशीनों के नाम या आईपी पते। Distccd सर्वर होना चाहिए
distccd के लिए "--zeroconf" विकल्प के साथ प्रारंभ किया गया है। एक महत्वपूर्ण चेतावनी यह है
वर्तमान कार्यान्वयन में, पंप मोड (",cpp") और संपीड़न (",lzo") होगा
ज़ीरोकॉन्फ के माध्यम से स्थित होस्ट के लिए कभी भी उपयोग नहीं किया जाना चाहिए।

यहां कुछ संभावनाओं को प्रदर्शित करने वाला एक उदाहरण दिया गया है:

लोकलहोस्ट/2 @बिगमैन/16:/opt/bin/distccd पुरानीमशीन:4200/1
# cartman is नीचे
दूर/3,एलज़ो

होस्ट विशिष्टताओं में टिप्पणियों की अनुमति है. टिप्पणियाँ हैश/पाउंड चिह्न से शुरू होती हैं (#)
और पंक्ति के अंत तक दौड़ें।

यदि सूची में कोई होस्ट पहुंच योग्य नहीं है तो जिला एक चेतावनी जारी करेगा और उस होस्ट को अनदेखा कर देगा
लगभग एक मिनट.

रचना


RSI lzo होस्ट विकल्प निर्दिष्ट करता है कि डेटा ट्रांसफर के लिए LZO संपीड़न का उपयोग किया जाना चाहिए,
पूर्व-संसाधित स्रोत, ऑब्जेक्ट कोड और त्रुटि संदेश सहित। संपीड़न आमतौर पर होता है
100Mbps से धीमे नेटवर्क पर किफायती, लेकिन परिणाम नेटवर्क के आधार पर भिन्न हो सकते हैं,
प्रोसेसर और स्रोत वृक्ष।

संपीड़न को सक्षम करने से distcc क्लाइंट और सर्वर अधिक CPU समय का उपयोग करते हैं, लेकिन कम
प्रसार यातायात। जोड़ा गया सीपीयू समय पंप मोड के लिए महत्वहीन है। संपीड़न
स्रोत के लिए अनुपात आमतौर पर 4:1 और ऑब्जेक्ट कोड के लिए 2:1 है।

संपीड़न का उपयोग करने के लिए क्लाइंट और सर्वर दोनों को कम से कम distcc के रिलीज़ 2.9 का उपयोग करना आवश्यक है।
किसी सर्वर कॉन्फ़िगरेशन की आवश्यकता नहीं है: सर्वर हमेशा संपीड़ित उत्तरों के साथ प्रतिक्रिया करता है
संपीड़ित अनुरोध.

पंप मोड के लिए सर्वर पर lzo होस्ट विकल्प चालू होना आवश्यक है।

खोजे के रास्ते


यदि कंपाइलर नाम एक पूर्ण पथ है, तो इसे शब्दशः सर्वर पर भेज दिया जाता है और
कंपाइलर उस निर्देशिका से चलाया जाता है। उदाहरण के लिए:

व्याकुल करना /usr/local/bin/gcc-3.1415 -c नमस्ते सी

यदि कंपाइलर नाम पूर्ण नहीं है, या पूरी तरह से योग्य नहीं है, तो distccd का PATH खोजा जाता है।
जब distcc को छद्म निर्देशिका से चलाया जाता है, तो केवल कंपाइलर का आधार नाम होता है
इस्तेमाल किया गया। क्लाइंट के PATH का उपयोग केवल प्रीप्रोसेसर को चलाने के लिए किया जाता है और इसका कोई प्रभाव नहीं पड़ता है
सर्वर का पथ.

समय समाप्ति


डिस्टीसीसी क्लाइंट और सर्वर दोनों पूरे नेटवर्क में डेटा के ट्रांसफर पर टाइमआउट लगाते हैं।
इसका उद्देश्य उन होस्टों का पता लगाना है जो बंद हैं या पहुंच योग्य नहीं हैं, और संकलन को रोकना है
यदि उपयोग के दौरान सर्वर डिस्कनेक्ट हो जाता है तो अनिश्चित काल तक लटका रहता है। यदि क्लाइंट-साइड टाइमआउट
समाप्त होने पर, कार्य स्थानीय स्तर पर पुनः चलाया जाएगा।

टाइमआउट वर्तमान में कॉन्फ़िगर करने योग्य नहीं हैं।

निदान


स्थानीय या दूरस्थ कंपाइलरों से त्रुटि संदेश या चेतावनियाँ डायग्नोस्टिक के माध्यम से भेजी जाती हैं
क्लाइंट पर आउटपुट.

जब वर्बोज़ विकल्प का उपयोग किया जाता है तो distcc व्यापक डिबगिंग जानकारी प्रदान कर सकता है। यह
द्वारा नियंत्रित किया जाता है DISTCC_VERBOSE क्लाइंट पर पर्यावरण चर, और --शब्दशः
सर्वर पर विकल्प. समस्या निवारण के लिए, क्लाइंट और सर्वर दोनों त्रुटियों की जाँच करें
संदेश.

बाहर निकलें कोड


Distcc का निकास कोड सामान्यतः संकलक का होता है: सफल संकलन के लिए शून्य
और अन्यथा गैर-शून्य।

distcc "वास्तविक" त्रुटियों के बीच अंतर करता है जैसे कि स्रोत में सिंटैक्स त्रुटि, और
"आकस्मिक" त्रुटियाँ जैसे किसी स्वयंसेवक से जुड़ने में नेटवर्किंग समस्या। यदि
आकस्मिक त्रुटियों के कारण, distcc स्थानीय स्तर पर संकलन का पुनः प्रयास करेगा जब तक कि DISTCC_FALLBACK न हो जाए
विकल्प अक्षम कर दिया गया है.

यदि कंपाइलर सिग्नल के साथ बाहर निकलता है, तो distcc 128 प्लस सिग्नल का एक निकास कोड लौटाता है
संख्या.

distcc आंतरिक त्रुटियाँ 100 और 127 के बीच एक निकास कोड का कारण बनती हैं। विशेष रूप से

100 सामान्य वितरण विफलता।

101 ख़राब तर्क.

102 बाइंड विफल रहा।

103 कनेक्ट विफल रहा.

104 कंपाइलर क्रैश हो गया.

105 स्मृति से बाहर.

106 ख़राब मेज़बान विशिष्टता

107 आई/ओ त्रुटि

108 काट दिया गया।

109 प्रोटोकॉल त्रुटि.

110 रिमोट होस्ट पर दिया गया कंपाइलर नहीं मिला। जांचें कि $CC सेट है
उचित रूप से और यह खोज पथ पर एक निर्देशिका में स्थापित है
distccd.

111 डिस्टीसीसी को पुनरावर्ती कॉल।

112 विशेषाधिकारों को त्यागने में विफल।

113 नेटवर्क पहुंच अस्वीकृत.

114 किसी अन्य प्रक्रिया द्वारा उपयोग में।

115 ऐसी कोई फ़ाइल नहीं.

116 कोई होस्ट परिभाषित नहीं है और फ़ॉलबैक अक्षम हैं।

118 टाइमआउट।

onworks.net सेवाओं का उपयोग करके ऑनलाइन distcc का उपयोग करें


फ्री सर्वर और वर्कस्टेशन

विंडोज और लाइनेक्स एप डाउनलोड करें

लिनक्स कमांड

Ad