क्या इसे गति देना संभव है ।/configure?


29

कई सीपीयू कोर (12 का कहना है) के साथ एक कार्य केंद्र पर एक सॉफ्टवेयर पैकेज संकलित करने के लिए, कॉन्फ़िगरेशन चरण अक्सर वास्तविक संकलन चरण की तुलना में अधिक समय लेता है क्योंकि ./configureपरीक्षण एक-एक करके करता है, जबकि समानांतर में अन्य कमांड भी make -jचलाता है gcc

मुझे लगता है कि शेष 11 कोर खाली बैठे होने के लिए संसाधनों का एक बड़ा बेकार है, धीमी गति ./configureसे पूरा होने की प्रतीक्षा कर रहा है । इसे क्रमिक रूप से परीक्षण करने की आवश्यकता क्यों है? क्या प्रत्येक परीक्षण एक दूसरे पर निर्भर करता है? मुझसे गलती हो सकती है, लेकिन ऐसा लगता है कि उनमें से अधिकांश स्वतंत्र हैं।

इससे भी महत्वपूर्ण बात यह है कि क्या इसमें कोई तेजी है ./configure?


संपादित करें: स्थिति को स्पष्ट करने के लिए, यहां जीएनयू कोरुटिल्स के साथ एक उदाहरण दिया गया है

cd /dev/shm
rm -rf coreutils-8.9
tar -xzf coreutils-8.9.tar.gz
cd coreutils-8.9
time ./configure
time make -j24

परिणाम:

# For `time ./configure`
real    4m39.662s
user    0m26.670s
sys     4m30.495s
# For `time make -j24`
real    0m42.085s
user    2m35.113s
sys     6m15.050s

साथ coreutils-8.9 , ./configureलेता है 6 गुना से अधिक समय make। यद्यपि ./configureकम CPU समय का उपयोग करें ("उपयोगकर्ता" और "sys" बार देखें), इसमें बहुत अधिक समय ("वास्तविक") लगता है क्योंकि इसे समानांतर किया गया है। मैंने परीक्षण को कुछ बार दोहराया है (प्रासंगिक फाइलों के साथ संभवतः मेमोरी कैश में रह रहा है) और समय 10% के भीतर है।


4
यह हास्यास्पद है, और शर्म की बात है, कि कोई अच्छा निर्माण उपकरण नहीं हैं। जो सभी मौजूद हैं, वे शुद्ध रूप से जड़ता के कारण हैं। बिल्डिंग बायनेरिज़ एक ऐसी काल्पनिक, अप्रत्याशित चीज है।
मैट जॉइनर

यह क्रमिक रूप से परीक्षण करता है क्योंकि यह पता लगाना एक दुःस्वप्न होगा कि किसी विशेष सिस्टम पर समानता कैसे चल रही है।
साइमन रिक्टर

जवाबों:


13

मुझे लगभग 10 साल पहले से इस मुद्दे के बारे में ऑटोकॉन्फ़ मेलिंग सूची पर चर्चा याद है, जब अधिकांश लोगों के पास वास्तव में केवल एक सीपीयू कोर था। लेकिन कुछ भी नहीं किया गया है, और मुझे संदेह है कि कुछ भी नहीं किया जाएगा। समानांतर प्रसंस्करण के लिए सभी निर्भरताएं स्थापित करना बहुत कठिन होगा configure, और इसे इस तरह से करें कि यह पोर्टेबल और मजबूत हो।

आपके विशेष परिदृश्य के आधार पर, वैसे भी कॉन्फ़िगर रन को गति देने के लिए कुछ तरीके हो सकते हैं। उदाहरण के लिए:

  • तेज शेल का उपयोग करें। उदाहरण के लिए, प्रयोग करने पर विचार dashकरने के बजाय bashके रूप में /bin/sh। (नोट: डेबियन के तहत, dashपैच किया गया है ताकि configureइसका उपयोग न करें, क्योंकि इसका उपयोग करने से बहुत सारी configureस्क्रिप्ट टूट जाती हैं।)
  • यदि आप दूरस्थ रूप से (ssh के माध्यम से, उदाहरण के लिए) रन बनाते हैं, तो मैंने पाया है कि कंसोल आउटपुट बहुत धीमा हो सकता है। कॉल करने पर विचार करें configure -q
  • यदि आप बार-बार एक ही प्रोजेक्ट बनाते हैं, तो कैश फ़ाइल का उपयोग करने पर विचार करें। पुकारते हैं configure -C। विवरण के लिए Autoconf प्रलेखन देखें।
  • यदि आप बहुत सारे प्रोजेक्ट बनाते हैं, तो साइट फ़ाइल ( config.site) का उपयोग करने पर विचार करें । फिर से, प्रलेखन देखें।
  • समानांतर में कई परियोजनाओं का निर्माण।

2
क्या आप कृपया थोड़ा और समझा makeसकते हैं कि समानांतर क्यों रखा जा सकता है configureया autoconfनहीं?
नेटवॉप

ऐसा लगता है कि मुझे शेल के साथ कुछ प्रदर्शन समस्याएं हैं। sh -c "echo $i" > /dev/null1000 बार चलने पर इस सिस्टम पर लगभग 10s लगते हैं, लेकिन मेरे अन्य सिस्टम पर केवल 1-2s।
नेटवॉप

1
GNU मेक अप कई प्रक्रियाओं को शुरू करने और प्रबंधित करने के लिए काफी जटिल सी कोड का उपयोग करता है। कॉन्फ़िगर स्क्रिप्ट पोर्टेबल बॉर्न शेल में लिखे गए हैं। यह संभव होगा, लेकिन शायद बहुत मुश्किल।
पीटर आइजेंट्रूट

4
configureपरीक्षणों के बीच निर्भरता को छाँटना वास्तव में एक कम जटिलता ऑपरेशन (टोपोलॉजिकल प्रकार) है और इसे कंप्यूटिंग के शुरुआती दिनों में हल किया गया है। असली समस्या यह है कि कोई भी इसे करने के लिए ऑटोकॉन्फ़ में कोड जोड़ने की जहमत नहीं उठाता है और यह तथ्य कि कई प्रोग्रामर मैन्युअल रूप से उत्पन्न फ़ाइलों को संशोधित करते हैं। पूरे सिस्टम को नया रूप दिया जाना चाहिए ताकि कॉन्फ़िगरेशन अब शेल स्क्रिप्ट द्वारा नहीं बल्कि एक निवासी बाइनरी रीडिंग मेटा डेटा फ़ाइलों द्वारा किया जाता है।
बिलसी.सी.

1
कृपया मेलिंग सूची (संग्रह का एक लिंक) पर उल्लेखित चर्चा का संदर्भ जोड़ें।
कार्ल रिक्टर

3

आप में रहने के लिए sourcetree के लिए ramdrive का उपयोग करने में स्मार्ट रहे हैं, लेकिन इसके बारे में दो बार सोचते हैं - क्या कॉन्फ़िगर करता है? यह न केवल आपके सॉकेट्री की जाँच करके अपना काम करता है , बल्कि अक्सर पुस्तकालय, संकलक इत्यादि की उपलब्धता के लिए भी प्रणाली है । इस मामले में, एक्सेस की समस्या कभी-कभी डिस्क एक्सेस में रहती है - यदि आपके पास है तो आपने इसे बहुत जल्दी किया होगा। SSD- आधारित रूट फ़ाइल सिस्टम का उदाहरण दें।


1
दुर्भाग्य से, ऐसा लगता है कि SSDs ज्यादा मदद नहीं करेगा। मैंने ./configureबार-बार दौड़ने की कोशिश की, लेकिन बाद में रन पहले रन के रूप में लगभग ले लेते हैं। चूंकि सिस्टम में बहुत सारी मुफ्त मेमोरी है, मुझे लगता है कि सिस्टम डिस्क पर जाए बिना मेमोरी कैश से कंपाइलर्स और लाइब्रेरी चला रहा है।
netvope

1
अगर आपने चलाने की कोशिश की है ।/configure को बार-बार (और अगर यह ऑटोकैफ द्वारा बनाया गया है) तो इसके सभी परिणाम कैश्ड होने चाहिए और यह बहुत अच्छा होना चाहिए। यदि आप अधिक सहायता चाहते हैं तो आप हमारे लिए कॉन्फ़िगर स्क्रिप्ट पोस्ट कर सकते हैं। मुझे पूरा यकीन है कि यहाँ गुरु की बहुतायत है
बूबू

मैंने वास्तव में इसे रनों के बीच साफ किया ( ./configureहमेशा एक ताजा निकाले गए स्रोत के पेड़ में चल रहा है)। मैं मूल पोस्ट में अधिक विवरण जोड़ने जा रहा हूं (स्थान यहां सीमित है)।
netvope

मैंने सिर्फ फोल्डर को साफ किए बिना परीक्षण किया (यानी ./configureदूसरे के तुरंत बाद चल रहा है ./configure) और दोनों रन समान समय लगते हैं। क्या इसका मतलब है कि कैशिंग शायद मेरे सिस्टम पर काम नहीं कर रहा है?
netvope 12

मैं कोरुटिल लाऊंगा और समय होने पर कॉन्फ़िगर करने का प्रयास करूंगा। बने रहें।
बूबू

3

यदि आप ondemand cpu गवर्नर का उपयोग कर रहे हैं, तो प्रदर्शन एक का उपयोग करने का प्रयास करें। यह i7 और a8-3850 पर 40-50% तक मदद करता है। Q9300 पर ज्यादा फर्क नहीं पड़ता।

एक क्वाड कोर सीपीयू पर, आप कर सकते हैं

for cpu in `seq 0 3`; do sudo cpufreq-set -g performance -c $cpu; done

(-R विकल्प को बनाना चाहिए ताकि आपको प्रत्येक कोर के लिए cpufreq-set न करना पड़े, लेकिन मेरे कंप्यूटर पर यह काम नहीं करता है।)

कैश विकल्प हालांकि और भी अधिक मदद करता है।


3

कई तरह की ./configureस्क्रिप्ट हैं। एक स्क्रिप्ट बनाने के लिए एक डेवलपर के पास लोकप्रिय उपकरण ( उनमें से एक होने के नाते) आ रहे हैं ./configure, लेकिन ऐसा कोई नियम नहीं है जो कहता है कि प्रत्येक डेवलपर को इन उपकरणों का उपयोग करना होगा, और फिर इन उपकरणों के बीच भी, इन लिपियों के तरीके में व्यापक बदलाव हो सकते हैं। निर्माण कर रहे हैं।

मैं किसी भी लोकप्रिय ./configureस्क्रिप्ट के बारे में नहीं जानता हूँ जो समानांतर में चलाई जा सकती है। लोकप्रिय टूल द्वारा निर्मित अधिकांश स्क्रिप्ट कम से कम कुछ या सभी परिणामों को कैश करते हैं, इसलिए यदि आप इसे फिर से चलाते हैं ( make cleanपहली, वैसे भी) किए बिना , यह दूसरी बार बहुत तेजी से चलता है।

यह कहना नहीं है कि यह नहीं किया जा सकता है ... लेकिन मुझे संदेह है कि काम करने वाले लोगों के लिए बहुत कम प्रेरणा है autoconf, उदाहरण के लिए, ऐसा करने के लिए, क्योंकि अधिकांश पैकेजों के लिए, कॉन्फ़िगर चरण वास्तविक संकलन और लिंकिंग के सापेक्ष बहुत तेज है चरणों।


2
हालांकि इन उपकरणों का उपयोग करने का एक अच्छा कारण है: वे परिपक्व हैं, और वे बहुत सारे छोटे विवरणों का ट्रैक रखते हैं। मुझे लगता है कि यदि आप अपने क्रॉस कंपाइलर में कॉन्फ़िगर स्क्रिप्ट को इंगित नहीं कर सकते हैं और यह समय के 90% बॉक्स से बाहर है, तो लिनक्स एम्बेडेड दुनिया में इतनी बड़ी स्थिति में नहीं होगा ।
साइमन रिक्टर

2

हार्ड ड्राइव इस मामले में अड़चन है। बिल्ड को गति देने के लिए, फास्ट ड्राइव के साथ सिस्टम पर बनाएं (पढ़ें: कम पहुंच का समय)। SSD डिस्क के बारे में बहुत उपद्रव है, लेकिन उनके बारे में कुछ आलोचना थी कि वे संकलन के समय को सकारात्मक तरीके से प्रभावित नहीं कर रहे हैं। कहने का तात्पर्य यह है कि SSD पर निर्माण एक सभ्य सता अभियान की तुलना में अधिक तेज नहीं था। मुझे याद नहीं आ रहा है कि यह लेख कहाँ पढ़ा गया है यह लेख कुछ साल पुराना है।

वैसे भी ... असत्य को राम और वहाँ से निर्माण।

mkdir /tmp/tmp 
mount -t tmpfs -o size=400M tmpfs /tmp/tmp 
cd /tmp/tmp
tar xjf somesourcetarball-1.1.33.tar.bz2

1
धन्यवाद, लेकिन मैं पहले से ही / dev / shm पर संकलन कर रहा था जो एक tmpfs है :-)
netvope

0

आपका प्रश्न आज और भी अधिक प्रासंगिक हो सकता है क्योंकि हमारे पास (सुंदर) कम एकल कोर प्रदर्शन के साथ दर्जन-कोर सीपीयू हैं। कंटीन्यूअस इंटीग्रेशन (CI) के लिए ऑटोमेटेड बिल्ड वास्तव में हर कमिट के लिए CPU समय / ऊर्जा की बहुत बर्बादी करता है। शाखाओं के बीच hopping के साथ भी।

इसलिए https://gitlab.com/gnuwget/wget2/wikis/Developer-hints:-Inc बढ़ते-speed-of-GNU-toolinin पर बात को तेज करने के बारे में मेरे संकेतों की समीक्षा करें / पढ़ें ।

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

यदि आप पोर्टेबल सॉफ्टवेयर लिखना चाहते हैं, तो ऑटोटूलस की तरह कोई अन्य बिल्ड सिस्टम नहीं है। लेकिन अगर आप (विस्तृत) पोर्टेबिलिटी के बारे में बुरा नहीं मानते हैं, तो ऑटोटूल से बचें - तेज और अच्छे-पर्याप्त बिल्ड टूल्स का ढेर है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.