4 पॉइंट द्वारा GN⁺ 2024-03-31 | 1 टिप्पणियां | WhatsApp पर शेयर करें

RCU का परिचय

  • ऑपरेटिंग सिस्टम रोज़ इस्तेमाल होने वाले सबसे performance-sensitive प्रोग्रामों में से एक है।
  • ऑपरेटिंग सिस्टम हमेशा और तेज़ हो सकता है, और kernel तथा driver डेवलपर कोड optimization में लगातार लगे रहते हैं।
  • ऑपरेटिंग सिस्टम को बड़े पैमाने पर concurrency की ज़रूरत होती है, यह user-space process और thread को schedule करता है, और इसके अपने thread तथा hardware के साथ इंटरैक्ट करने वाले interrupt handler होते हैं।

RCU कैसे काम करता है

  • जब अक्सर पढ़े जाने वाले लेकिन कम लिखे जाने वाले डेटा (जैसे: अभी जुड़े हुए USB डिवाइस) को atomic तरीके से बदलना हो, तब RCU(Read, Copy, Update) रणनीति का उपयोग किया जाता है।
  • डेटा को पढ़कर उसकी कॉपी बनाई जाती है, उसमें बदलाव किया जाता है, और फिर pointer को atomically नए version पर update किया जाता है।
  • यह तरीका इस्तेमाल में आसान है और इसमें waiting latency नहीं होती, लेकिन memory leak हो सकता है।

Memory leak समस्या का समाधान

  • memory leak रोकने के लिए, update function के अंदर पुराने डेटा को तुरंत delete करने के बजाय, उसे तब तक टाला जा सकता है जब तक कोई active reader उसे पढ़ नहीं रहा हो।
  • reader के डेटा पढ़ते समय writer को डेटा deletion के लिए इंतज़ार कराया जाता है, जिससे memory को सुरक्षित तरीके से manage किया जा सके।

RCU का वास्तविक उपयोग

  • RCU का Linux में दसियों हज़ार बार उपयोग होता है, और Facebook की Folly C++ library तथा Rust के crossbeam-epoch में भी इसका उपयोग किया जाता है।
  • RCU performance और latency की ज़रूरतों से प्रेरित synchronization देता है, और garbage collection जैसी memory management शैली प्रदान करता है।

Garbage collection को लेकर गलतफ़हमियाँ

  • यह आम धारणा कि garbage collection, manual memory management से धीमा होता है, विवरण में जाते ही जल्दी टूट जाती है।
  • free() function मुफ़्त नहीं है, और memory allocator को अंदरूनी रूप से बहुत सारा state बनाए रखना पड़ता है।
  • आधुनिक garbage collection moving और generational optimization देता है, जिससे high throughput और बेहतर cache performance मिलती है।

नियंत्रण का भ्रम

  • डेवलपर कभी-कभी real-time system बनाना चाहते हैं, लेकिन वास्तव में memory management पर उनका पूर्ण नियंत्रण नहीं होता।
  • ऑपरेटिंग सिस्टम केवल memory allocation के बारे में डेवलपर की मंशा का अनुमान लगाता है, और कभी-कभी साधारण pointer access भी disk I/O में बदल सकता है।

निष्कर्ष

  • हर software को garbage collection से लाभ नहीं मिलता, लेकिन garbage collection एक उपयोगी tool है, और system programmer को अब इससे डरना नहीं चाहिए।

GN⁺ की राय

  • RCU multithreading environment में data consistency बनाए रखते हुए concurrency बढ़ाने की एक प्रभावी तकनीक है। यह high-performance computing या real-time system में बहुत महत्वपूर्ण तत्व है।
  • garbage collection को लेकर बनी धारणाओं को तोड़ने वाला RCU का उदाहरण डेवलपरों को memory management पर नया नज़रिया देता है। यह खासकर system programming जैसे क्षेत्रों में और भी महत्वपूर्ण है, जहाँ memory management बेहद अहम होता है।
  • RCU जैसी क्षमता देने वाले अन्य प्रोजेक्ट्स में Java का ConcurrentLinkedQueue और .NET का ConcurrentBag शामिल हैं; ये भी lock-free data structure प्रदान करते हैं।
  • RCU तकनीक अपनाते समय system की requirements और performance goals को ध्यान में रखना चाहिए, और इस तकनीक से मिलने वाले फ़ायदों तथा संभावित लागतों को समझना चाहिए।
  • यह लेख डेवलपरों को memory management और concurrency को और गहराई से समझने, पुरानी धारणाओं पर दोबारा विचार करने, और नए समाधान तलाशने में मदद कर सकता है।

1 टिप्पणियां

 
GN⁺ 2024-03-31
Hacker News राय
  • MPL और MaPLe की अभिनव parallel garbage collection (GC) तकनीकों को देखने का सुझाव

    • POPL 2024 में distinguished paper award और ACM SIGPLAN 2023 paper award जीता
    • मुख्य प्रस्ताव इस प्रकार हैं:
      • साबित तौर पर efficient parallel garbage collection आधारित 'disentanglement'
      • साबित तौर पर efficient automatic granularity control
  • garbage collection के synchronization के रूप में RCU का उपयोग दिलचस्प है

    • write worker से last read worker को memory freeing की ज़िम्मेदारी सौंपना सार्थक लगता है
    • performance सुधारने के लिए memory freeing को read worker की जगह एक dedicated batch process में शिफ्ट करने पर विचार करना पड़ सकता है
  • memory management को लेकर एक आम गलतफहमी

    • यह मान लेना कि programmer memory management के लिए optimal pause time जानता है
    • games और crypto trading programs में programmer वास्तव में optimal pause time जान सकता है
  • RCU use case भरोसेमंद लगता है, लेकिन दूसरी परिस्थितियों में garbage collection का अनुभव अच्छा नहीं रहा

    • यह इस दावे की तरह पढ़ा जाता है कि customized memory management solutions सबसे अच्छा performance दे सकते हैं
    • इस गलतफहमी पर चर्चा कि free() call memory को OS को वापस कर देता है
  • garbage collection का उपयोग करने पर नई allocations cache की बजाय RAM से होती हैं

    • इसका performance पर बड़ा असर पड़ सकता है
    • Julia भाषा में benchmark का उदाहरण दिया गया है
  • अच्छी tracing garbage collection ने throughput के मामले में बहुत पहले ही manual memory management को पीछे छोड़ दिया था

    • हाल के समय में latency भी अधिकांश applications के लिए स्वीकार्य स्तर पर है
    • memory usage मुख्य विचारणीय बिंदु है
  • garbage collection के साथ अच्छी तरह मेल खाने वाली चीज़ों में से एक है async/await

    • Rust में async/await का उपयोग memory management के साथ मिलकर समस्याएँ पैदा करता है
  • RCU के motivation के बाद सामान्य garbage collection पर चर्चा में जाना कुछ हैरान करता है

  • software development में दो तरह की स्थितियों पर विचार किया जाता है

    • hot path के लिए customized allocator का उपयोग करें, और बाकी जगह garbage collection सुविधाजनक है
  • RCU से सामान्य tracing garbage collection की ओर जाना एक चतुर रणनीति जैसा लगता है

    • manual memory management सिर्फ malloc/free calls से कहीं अधिक चीज़ों को शामिल करता है
  • system programmers के लिए यह पहचानना कठिन है कि कब garbage collect किया जा सकता है

  • Rust और C++ के lifetime management tools memory freeing को automate करने में मदद करते हैं, लेकिन complexity को सरल नहीं बनाते हैं