Ubuntu 24.04 LTS फ्रेम पॉइंटर्स को डिफ़ॉल्ट रूप से सक्षम करेगा

Ubuntu 24.04 LTS डिफ़ॉल्ट रूप से फ्रेम पॉइंटर्स सक्षम करके binaries compile करेगा, 32-बिट x86 पर एक अतिरिक्त रजिस्टर पाने के लिए उन्हें छोड़ने वाली पुरानी optimization को उलटते हुए। टिप्पणीकारों का तर्क है कि आधुनिक 64-बिट CPUs पर performance hit आमतौर पर 1–2% से काफी कम होता है, जबकि observability में लाभ बहुत बड़े हैं: अधिक विश्वसनीय stack traces, perf, eBPF/bpftrace, और continuous profilers जैसे tools का आसान उपयोग, साथ ही full debug symbols के बिना भी बेहतर post-mortem debugging। कुछ लोगों को Python के interpreter जैसे अत्यधिक संवेदनशील workloads में regressions की चिंता है, लेकिन उभरती सहमति यह है कि distributions को डिफ़ॉल्ट रूप से debuggability को प्राथमिकता देनी चाहिए और केवल उन्हीं workloads के लिए selectively opt out करना चाहिए जहाँ स्पष्ट, मापने योग्य slowdown दिखाई दे।

पृष्ठभूमि और तर्क

  • कई टिप्पणीकार फ्रेम पॉइंटर्स को छोड़ना 32-बिट x86 की एक पुरानी माइक्रो‑ऑप्टिमाइज़ेशन के रूप में देखते हैं, जहाँ फ्रेम पॉइंटर वापस पाने से एक महत्वपूर्ण अतिरिक्त रजिस्टर मिलता था और बड़े स्पीडअप्स मिलते थे।
  • x86-64 पर कई अधिक और चौड़े रजिस्टर हैं, इसलिए फ्रेम पॉइंटर छोड़ने का लाभ बहुत छोटा माना जाता है।
  • कई लोग नोट करते हैं कि अन्य डिस्ट्रीब्यूशन्स (जैसे Fedora) पहले से ही फ्रेम पॉइंटर्स सक्षम करती हैं और Ubuntu के इस कदम को एक व्यापक प्रवृत्ति का हिस्सा मानते हैं।

प्रदर्शन प्रभाव पर बहस

  • 64-बिट आर्किटेक्चर्स पर रिपोर्ट किया गया ओवरहेड आमतौर पर “मापना कठिन” होता है, अक्सर 1% से कम, हालांकि कुछ विशिष्ट वर्कलोड्स में 1–2% के दावे भी हैं।
  • आलोचकों का तर्क है कि 0.1–1% के वैश्विक रिग्रेशन भी बड़े पैमाने पर व्यर्थ हैं और टूल्स को बस फ्रेम पॉइंटर्स के बिना प्रोफाइल करने के लिए ठीक किया जाना चाहिए।
  • समर्थक जवाब देते हैं कि प्रोफाइल्स तक आसान पहुँच अक्सर 30–3000% ऑप्टिमाइज़ेशन देती है, जिससे यह समझौता बहुत अनुकूल बन जाता है।
  • कुछ लोग ऐसे सूक्ष्म मामलों का उल्लेख करते हैं जहाँ अतिरिक्त रजिस्टर अभी भी महत्वपूर्ण है (जैसे Python जैसे बाइटकोड इंटरप्रेटर, तंग हॉट लूप्स), और प्रति-पैकेज opt-out की अपेक्षा या समर्थन करते हैं।

डिबगिंग और प्रोफाइलिंग के लाभ

  • मजबूत आम सहमति है कि फ्रेम पॉइंटर्स stack unwinding को आसान, सस्ता और अधिक विश्वसनीय बनाते हैं, विशेषकर इनके लिए:
    • Perf, eBPF/bpftrace/bcc टूल्स, continuous profiling, और flame graphs।
    • Post-mortem debugging, core dumps, और LTS सिस्टम्स पर production incident analysis।
  • फ्रेम पॉइंटर्स के बिना, टूल्स को DWARF/.eh_frame unwind programs का उपयोग करना पड़ता है, जो धीमे, अधिक जटिल, और स्टैक्स corrupted होने पर fragile होते हैं।

टूलिंग, फ़ॉर्मैट्स, और kernel समर्थन

  • कई लोग फ्रेम पॉइंटर्स के बिना unwind करने के लिए DWARF+eBPF का उपयोग करने वाले मौजूदा समाधान बताते हैं, लेकिन नोट करते हैं कि वे जटिल हैं और व्यापक रूप से उपलब्ध नहीं हैं या सभी टूल्स के लिए उपयुक्त नहीं हैं।
  • kernel ORC unwinder (kernel के लिए) और भविष्य के user-space stack unwinding के लिए कम overhead वाले emerging SFrame format पर चर्चा।
  • कुछ का तर्क है कि उन्नत unwind formats पर निर्भर रहना आज अवास्तविक है; फ्रेम पॉइंटर्स मौजूदा tooling के साथ तुरंत काम करते हैं।

विशेष मामले, सुरक्षा, और ecosystem प्रभाव

  • Python का उल्लेख लगभग 10% रिग्रेशन के साथ किया गया है जब फ्रेम पॉइंटर्स सक्षम होते हैं; Ubuntu ऐसे मामलों को, यदि पुष्टि हो जाए, बाहर रखने की योजना बना रहा है।
  • embedded systems अक्सर debug/unwind info हटा देते हैं, जिससे वहाँ फ्रेम पॉइंटर्स विशेष रूप से मूल्यवान हो जाते हैं।
  • एक टिप्पणी नोट करती है कि फ्रेम पॉइंटर्स छोड़ने से कुछ stack-overflow exploit surfaces थोड़ा कम हो सकते हैं, लेकिन इस तर्क को आगे विकसित नहीं किया गया है।
  • इस पर बहस है कि ऐसे defaults distros द्वारा तय किए जाने चाहिए या upstreams पर छोड़े जाने चाहिए; अन्य लोग जवाब देते हैं कि operators और users को भी system-wide observability चाहिए।