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

OpenZFS में deduplication क्या है?

  • deduplication की परिभाषा: OpenZFS में डेटा को डिस्क पर लिखने से पहले यह जांचा जाता है कि वही डेटा पहले से डिस्क पर मौजूद है या नहीं। अगर मौजूद है, तो नया write करने के बजाय मौजूदा copy के लिए एक reference जोड़ दिया जाता है.
  • deduplication की चुनौती: यह पता लगाना कठिन होता है कि डेटा पहले से डिस्क पर है या नहीं, और अगर है तो वह कहाँ है। इसके लिए अतिरिक्त input/output (IO) की जरूरत पड़ती है, जिससे performance गिर सकती है.

deduplication कैसे काम करता है?

  • काम करने का तरीका: जब deduplication सक्रिय होता है, तो data block तैयार किया जाता है और checksum निकाला जाता है। पहले metaslab allocator space allocate करता था, लेकिन deduplication चालू होने पर checksum को deduplication table में lookup किया जाता है.
  • deduplication table: इसे एक hash table के रूप में रखा जाता है, जहाँ checksum key होता है और disk location व reference count value होते हैं। इसे pool metadata का हिस्सा माना जाता है.

पारंपरिक deduplication की समस्याएँ

  • deduplication table की समस्या: पारंपरिक deduplication, OpenZFS के disk hash table object का उपयोग करके लागू किया जाता है। इसकी संरचना जटिल है और deduplication जैसे application के लिए उपयुक्त नहीं है.
  • memory usage: deduplication table को पढ़ने का काम ARC में cache होता है, इसलिए अगर पर्याप्त RAM हो तो table update के read हिस्से को कम किया जा सकता है.
  • unique entry की समस्या: deduplication table में unique entries को track करने के लिए लगने वाली जगह भी एक समस्या है। जिन blocks का reference count 1 होता है, वे table में जगह घेरते रहते हैं, और अगर वही डेटा दोबारा नहीं लिखा जाता तो यह cost वापस नहीं मिलती.

FastDedup इस समस्या को कैसे हल करता है?

  • live entry list को छोटा करना: memory usage कम करने के लिए live entry list का memory footprint घटाया गया है। नई deduplication table में entry के "value" हिस्से को घटाकर 72 bytes कर दिया गया है.
  • deduplication log: live entry list की जगह log का इस्तेमाल करके बदलाव दर्ज किए जाते हैं, और crash recovery के समय log को replay किया जाता है। log memory में रखा जाता है ताकि lookup तेज हो सके.
  • incremental log flushing: log के आकार को नियंत्रित करने के लिए हर transaction पर log का कुछ हिस्सा ZAP में लिखा जाता है। memory pressure होने पर log flushing को और तेज किया जाता है.

GN⁺ का सार

  • OpenZFS का नया "FastDedup" फीचर पारंपरिक deduplication की समस्याओं को हल करने के लिए बनाया गया है। यह memory usage कम करता है और log के जरिए ज्यादा efficient data management संभव बनाता है.
  • deduplication सिर्फ कुछ खास workloads में ही उपयोगी है, और सामान्य उपयोग के लिए यह अब भी अप्रभावी हो सकता है। इसकी वजह deduplication table को manage करने का बड़ा overhead है.
  • इसी तरह की functionality वाले दूसरे projects में Btrfs का deduplication फीचर शामिल है, जो दूसरे file systems में एक विकल्प हो सकता है.

1 टिप्पणियां

 
GN⁺ 2024-10-31
Hacker News राय
  • शीर्षक देखकर क्लिक किया, लेकिन ZFS में रुचि न होने के बावजूद लगभग पूरा लेख पढ़ गया। लेख बहुत स्पष्ट तरीके से समझाया गया था, और mobile CSS theme खास तौर पर पसंद आया। संक्षिप्त सार लेख के नीचे है.

  • copy_file_range चर्चा के अलावा, अच्छा होगा अगर file system में एक ही hash वाले 1MB से बड़े files को ढूंढकर चुनिंदा रूप से deduplication लागू किया जा सके.

  • पारंपरिक deduplication की समस्या यह है कि overhead बहुत ज़्यादा होता है, इसलिए खास workload को छोड़कर इसका फायदा देखना मुश्किल है। Pure और Dell/EMC arrays में VMWare workloads पर 3:1 deduplication/compression बचत देखी गई थी.

  • deduplication का प्रभाव hash किए जाने वाले blocks के आकार पर बहुत निर्भर करता है। block जितना छोटा होगा, matching block मिलने की संभावना उतनी ज़्यादा होगी। व्यक्तिगत रूप से मैं 4KB block size को पसंद करता हूँ.

  • मैं "offline" deduplication या "lazy" deduplication चाहता हूँ। deduplication सक्षम होने पर हर write और free operation के लिए deduplication table पर lookup और write की आवश्यकता होती है। डेटा लिखते समय मैं चाहता हूँ कि काम जल्दी पूरा हो.

  • fast deduplication को लेकर मैं बहुत उत्साहित हूँ। मैं ArchiveBox डेटा पर ZFS deduplication इस्तेमाल करना चाहता था। ऐसा लग रहा है कि बहुत सारे URL archive करना और file system से सब कुछ compress करवाना संभव हो जाएगा.

  • मैं अपने personal archive में ZFS deduplication का उपयोग करता रहा हूँ, और अभी disk space को 3 गुना तक घटा रहा हूँ। reliability के मामले में ZFS ने बहुत अच्छा काम किया है, और यह data loss रोकने में सक्षम रहा है.

  • सामान्य deduplication सिद्धांत में अच्छा लगता है, लेकिन व्यवहार में ठीक से काम नहीं करता। IPFS variable-sized chunks का उपयोग करके डेटा deduplicate करने की कोशिश करता है, लेकिन वास्तव में कोई खास अंतर नहीं पड़ता और केवल complexity बढ़ती है.

  • अच्छा होगा अगर disk controller का dedicated hardware, ECC जैसी गणनाओं के लिए blocks के hash को system के सामने expose कर सके.

  • काश file system का API पूरी तरह अलग रूप का होता। compatibility की वजह से सभी OS के file system API जकड़े हुए हैं.

  • अगर write performance महत्वपूर्ण है, तो write के समय deduplication करने की ज़रूरत नहीं है। deduplication बाद में, साथ-साथ, और low priority पर किया जा सकता है.