फास्ट कर्नेल हेडर, पैच का एक सेट जो कर्नेल संकलन को 50-80% तक तेज करता है

इंगो मोलनार, एक प्रसिद्ध लिनक्स कर्नेल डेवलपर और सीएफएस टास्क शेड्यूलर के लेखक लिनक्स कर्नेल विकास मेलिंग सूची चर्चा के लिए प्रस्तावित कई पैच, कर्नेल स्रोत में सभी फाइलों के आधे से अधिक को प्रभावित करते हैं और कॉन्फ़िगरेशन के आधार पर 50 -80% की समग्र कर्नेल पुनर्निर्माण गति वृद्धि प्रदान करते हैं।

कार्यान्वित अनुकूलन उल्लेखनीय है कि यह सबसे बड़े परिवर्तन के साथ जुड़ा हुआ है कर्नेल विकास के इतिहास में: उन्होंने 2297 पैच को एक साथ शामिल करने का निश्चय किया, 25 हजार से अधिक फाइलों को बदल दिया।

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

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

मुझे अपने नए "फास्ट कर्नेल हेडर्स" प्रोजेक्ट के पहले सार्वजनिक संस्करण की घोषणा करते हुए खुशी हो रही है, जिस पर मैं 2020 के अंत से काम कर रहा हूं, जो कि दोहरे उद्देश्य के साथ लिनक्स कर्नेल हेडर पदानुक्रम और हेडर निर्भरता का एक व्यापक पुनर्विक्रय है:

- कर्नेल बिल्ड को गति दें (पूर्ण और वृद्धिशील निर्माण समय दोनों)

- एक दूसरे से सबसिस्टम और परिभाषाओं एपीआई का डिकूपिंग टाइप करें

जैसा कि अधिकांश कर्नेल डेवलपर्स जानते हैं, लिनक्स कर्नेल में लगभग ~ 10,000 मुख्य .h हेडर होते हैं, जिसमें / और आर्क / * / शामिल / पदानुक्रम शामिल होते हैं। पिछले 30+ वर्षों में, वे परस्पर निर्भरता के एक जटिल और दर्दनाक सेट में विकसित हुए हैं जिसे हम प्यार से 'डिपेंडेंसी हेल' कहते हैं।

किए गए परिवर्तनों में से हैं: उच्च-स्तरीय हेडर फ़ाइलों को एक दूसरे से अलग करना, हेडर फाइलों को जोड़ने वाले इनलाइन कार्यों का बहिष्करण, प्रकार और एपीआई के लिए हेडर फाइलों की मैपिंग, हेडर फाइलों के एक अलग सेट का प्रावधान (लगभग 80 फाइलों में अप्रत्यक्ष निर्भरताएं थीं जो असेंबली में हस्तक्षेप करती हैं, अन्य फाइलों के माध्यम से उजागर होती हैं हेडर फाइलें), निर्भरताओं का स्वचालित जोड़ ".h" और ".c" फ़ाइलों के लिए, हेडर फ़ाइलों का चरण-दर-चरण अनुकूलन, "CONFIG_KALLSYMS_FAST=y" मोड का उपयोग, ऑब्जेक्ट फ़ाइलों की संख्या को कम करने के लिए असेंबली ब्लॉकों में C फ़ाइलों का चयनात्मक समेकन।

परिणामस्वरूप, संसाधित हेडर फ़ाइलों के आकार को कम करने के लिए किए गए कार्य की अनुमति हैप्रीप्रोसेसिंग के बाद के चरण में परिमाण के 1-2 आदेश।

  • उदाहरण के लिए, अनुकूलन से पहले, हेडर फ़ाइल "linux / gfp.h" का उपयोग करने के परिणामस्वरूप कोड की 13543 लाइनें और 303 आश्रित हेडर फ़ाइलों को शामिल किया गया था, और अनुकूलन के बाद आकार को घटाकर 181 लाइनों और 26 आश्रित फ़ाइलों तक कर दिया गया था।
  • एक अन्य उदाहरण: बिना पैच वाली "कर्नेल / pid.c" फ़ाइल को प्रीप्रोसेस करना कोड की 94 हजार पंक्तियों को जोड़ता है, जिनमें से अधिकांश का उपयोग pid.c में नहीं किया जाता है। हेडर फाइलों को विभाजित करने से हमें तीन बार संसाधित कोड की मात्रा को कम करने की अनुमति मिलती है, जिससे संसाधित लाइनों की संख्या 36 तक कम हो जाती है।

जब कर्नेल को पूरी तरह से परीक्षण प्रणाली पर "मेक -j96 vmlinux" कमांड के साथ बनाया गया था, तो पैचिंग ने v5.16-rc7 शाखा के संकलन समय में 231,34 से 129,97, 15,5 सेकंड (27,7 से XNUMX बिल्ड प्रति तक की कमी) को दिखाया। घंटा) और निर्माण के दौरान सीपीयू कोर उपयोग की दक्षता में भी वृद्धि हुई।

एक वृद्धिशील संकलन के साथ, अनुकूलन प्रभाव और भी अधिक ध्यान देने योग्य है: हेडर फ़ाइलों में परिवर्तन करने के बाद कर्नेल के पुनर्निर्माण का समय काफी कम हो गया है (112% से 173%, जो हेडर फ़ाइल में बदलाव पर निर्भर करता है)।

अनुकूलन वर्तमान में केवल ARM64, MIPS, स्पार्क, और x86 (32-बिट और 64-बिट) आर्किटेक्चर के लिए उपलब्ध हैं।

बारीक यदि आप इसके बारे में अधिक जानने में रुचि रखते हैं, आप में विवरण देख सकते हैं निम्नलिखित लिंक।


पहली टिप्पणी करने के लिए

अपनी टिप्पणी दर्ज करें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा। आवश्यक फ़ील्ड के साथ चिह्नित कर रहे हैं *

*

*

  1. डेटा के लिए जिम्मेदार: मिगुएल elngel Gatón
  2. डेटा का उद्देश्य: नियंत्रण स्पैम, टिप्पणी प्रबंधन।
  3. वैधता: आपकी सहमति
  4. डेटा का संचार: डेटा को कानूनी बाध्यता को छोड़कर तीसरे पक्ष को संचार नहीं किया जाएगा।
  5. डेटा संग्रहण: ऑकेंटस नेटवर्क्स (EU) द्वारा होस्ट किया गया डेटाबेस
  6. अधिकार: किसी भी समय आप अपनी जानकारी को सीमित, पुनर्प्राप्त और हटा सकते हैं।