लिनक्स में डिस्क को इसकी मेमोरी को स्टोर करने और बाद में इसे पुनर्स्थापित करने के लिए "हाइबरनेट" कैसे करें?


99

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


8
दिलचस्प सवाल: D
डेंजरसैट

आप जो वर्णन करते हैं वह वास्तव में 'चेकपॉइंटिंग' के रूप में जाना जाता है, आपके पास उस शब्द के साथ खोज करने के लिए बेहतर भाग्य हो सकता है।
टिम पोस्ट

यह होना चाहिए। अच्छी सुविधा। हाइबरनेट बनाम पास।
विटाली फादेव

जवाबों:


54

मैं क्रायोपीआईडी को बनाए रखता था , जो कि एक कार्यक्रम है जो आप के बारे में बात कर रहा है। यह एक प्रोग्राम के एड्रेस स्पेस, VDSO, फाइल डिस्क्रिप्टर रेफरेंस और स्टेट्स को एक फाइल में लिखता है, जिसे बाद में फिर से बनाया जा सकता है। क्रायोपीआईडी ​​की शुरुआत तब हुई जब लिनक्स में ही प्रयोग करने योग्य हुक नहीं थे और पूरी तरह से यूजरस्पेस (वास्तव में, यह अभी भी काम करता है, आपके डिस्ट्रो / कर्नेल / सुरक्षा सेटिंग्स पर निर्भर करता है) से काम करता है।

समस्याएं (वास्तव में) सॉकेट्स, लंबित आरटी सिग्नल, कई एक्स 11 मुद्दे, कई अन्य लोगों के बीच ग्लिब कैशिंग गेटपिड () कार्यान्वयन। रैंडमाइजेशन (विशेषकर वीडीएसओ) बर्नार्ड के इससे दूर चले जाने के बाद हममें से कुछ के लिए इस पर काम करने के लिए असंवेदनशील निकला। हालांकि, यह मजेदार था और कई मास्टर्स थीसिस का विषय बन गया।

यदि आप केवल एक कार्यक्रम पर विचार कर रहे हैं जो अपनी चल रही स्थिति को बचा सकता है और उस राज्य में सीधे शुरू कर सकता है, तो उसका दूर .. बहुत आसान है कि कार्यक्रम के भीतर से केवल उस जानकारी को सहेजना आसान है, शायद जब कोई सिग्नल सर्विस कर रहा हो।


5
जुलाई 2014 तक, दुर्भाग्य से, क्रायोपीआईडी ​​अब नहीं है और हाल की गुठली पर नहीं चलता है। लेकिन इस बीच नई परियोजनाएं पैदा हुई हैं (कुछ कदम टीसीपी कनेक्शन "हाइबरनेशन" में भी उठाए गए हैं)। मैंने नीचे अद्यतन जवाब के साथ एक उत्तर दिया है । इसकी जांच - पड़ताल करें! ;)
dappiu

1
@dappiu यह बहुत अच्छा है - लेकिन क्रायोपीआईडी इस उदाहरण में केवल उदाहरण के लिए था कि यह कितना मुश्किल हो सकता है, यह बताने के लिए कि मैं कहां गया था कि वे कार्यक्रम के भीतर ही राज्य को बचाने का काम संभालें, इस तरह से कि आसानी से फिर से शुरू किया जा सके। क्रायोपीआईडी ​​स्टैगनेटिंग उत्तर को कम प्रासंगिक नहीं बनाता है।
टिम पोस्ट

क्रायोपिड 2 अधिक हाल ही में सक्रिय है (2013): sourceforge.net/projects/cryopid2
Leopd

31

मैं 2014 तक यहां स्टेटस अपडेट रखना चाहता हूं।

स्वीकृत उत्तर क्रायोपीआईडी ​​को चेकपॉइंट / पुनर्स्थापना करने के लिए एक उपकरण के रूप में सुझाता है, लेकिन मैंने पाया कि हाल की गुठली के साथ संकलन करने के लिए परियोजना असम्बद्ध और असंभव है। अब, मुझे एप्लिकेशन चेकपॉइंटिंग सुविधा प्रदान करने वाली दो सक्रिय रूप से तैयार की गई परियोजनाएं मिलीं।

पहला, मैं जो सुझाव देता हूं, वह यह है कि मेरे पास इसे चलाने के लिए बेहतर भाग्य है, सीआरआईयू है जो मुख्य रूप से उपयोगकर्ता स्थान में चेकपॉइंट / पुनर्स्थापना करता है, और कर्नेल विकल्प CONFIG_CHECKPOINT_RESTORE को काम करने के लिए सक्षम करने की आवश्यकता होती है।

चेकपॉइंट / रिस्टोर इन यूज़र्सस्पेस, या सीआरआईयू (उच्चारण kree-oo, IPA: / kr: /, रूसी: криу), लिनक्स ऑपरेटिंग सिस्टम के लिए एक सॉफ्टवेयर टूल है। इस टूल का उपयोग करके, आप एक रनिंग एप्लिकेशन (या इसके कुछ भाग) को फ्रीज कर सकते हैं और फाइलों के संग्रह के रूप में इसे हार्ड ड्राइव पर चेक कर सकते हैं। तब आप उस बिंदु से एप्लिकेशन को पुनर्स्थापित करने और चलाने के लिए फ़ाइलों का उपयोग कर सकते हैं जिस बिंदु पर यह जमे हुए था। CRIU परियोजना की विशिष्ट विशेषता यह है कि यह मुख्य रूप से उपयोगकर्ता स्थान में लागू की जाती है।

बाद वाला DMTCP है ; उनके मुख्य पृष्ठ से उद्धृत:

DMTCP (वितरित मल्टीट्रेडेड चेकपॉइंटिंग) बहु-थ्रेडेड और वितरित अनुप्रयोगों सहित कई युगपत अनुप्रयोगों की स्थिति की पारदर्शी जांच करने के लिए एक उपकरण है। यह किसी भी लिनक्स कर्नेल मॉड्यूल या अन्य कर्नेल संशोधनों के बिना, उपयोगकर्ता बाइनरी निष्पादन योग्य पर सीधे संचालित होता है।

तर्क पर एक अच्छा विकिपीडिया पृष्ठ भी है: Application_checkpointing


20

उल्लेख करने वाले उत्तर ctrl-zवास्तव में इस मामले में एक संकेत के साथ प्रक्रिया को रोकने के बारे में बात कर रहे हैं SIGTSTP। आप इसके साथ एक स्टॉप सिग्नल जारी कर सकते हैं kill:

kill -STOP <pid>

यह प्रक्रिया के निष्पादन को निलंबित करेगा। यह इसके द्वारा उपयोग की जाने वाली मेमोरी को तुरंत मुक्त नहीं करेगा, लेकिन जैसे ही अन्य प्रक्रियाओं के लिए मेमोरी की आवश्यकता होती है, रुकी हुई प्रक्रिया द्वारा उपयोग की जाने वाली मेमोरी को धीरे-धीरे स्वैप किया जाएगा।

जब आप इसे फिर से जगाना चाहते हैं, का उपयोग करें

kill -CONT <pid>

क्रायोपीआईडी ​​जैसे अधिक जटिल समाधान वास्तव में केवल तभी आवश्यक होते हैं जब आप चाहते हैं कि रुकी हुई प्रक्रिया एक सिस्टम शटडाउन / रीस्टार्ट को जीवित करने में सक्षम हो - यह आपकी आवश्यकता के अनुरूप ध्वनि नहीं करता है।


13

यह मुद्दा स्ट्रीम - फ़ाइलों और सॉकेट्स को पुनर्स्थापित कर रहा है - जो कि कार्यक्रम खुला है।

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

यदि आपने प्रति-प्रोग्राम हाइबरनेशन (एप्लिकेशन समर्थन के बिना) किया है, तो आप खुली फ़ाइलों को कैसे संभालेंगे? क्या होगा यदि कोई अन्य प्रक्रिया अंतरिम में उन फाइलों तक पहुंचती है? आदि?

जब प्रोग्राम लोड नहीं होता है, तो स्थिति बनाए रखना मुश्किल हो जाता है।

बस थ्रेड्स को सस्पेंड करने और डिस्क को स्वैप करने की अनुमति देने से बहुत अधिक प्रभाव पड़ेगा?

या प्रोग्राम को वर्चुअल मशीन में चलाएं और VM को सस्पेंड करने दें।


12

संक्षिप्त उत्तर "हाँ, लेकिन हमेशा मज़बूती से नहीं"। क्रायोपीआईडी ​​देखें:

http://cryopid.berlios.de/

खुली फाइलें वास्तव में सबसे आम समस्या होगी। क्रायोपीड स्पष्ट रूप से बताता है:

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

वही मुद्दे टीसीपी कनेक्शनों को भी प्रभावित करेंगे, हालांकि क्रायोपीआईडी ​​कनेक्शन फिर से शुरू करने के लिए tcpcp का समर्थन करता है।


3
सबमिट बटन दबाए जाने के बाद अब मुझे पता चला कि यह क्रायोपीआईडी ​​के लिए स्पैम / विज्ञापन की तरह है। यह नहीं है - मैं बस उपयोगिता का एक संतुष्ट उपयोगकर्ता हूं, वास्तव में।
उलिस मोंटेनेग्रो

12

लिनक्स कर्नेल ने अब आंशिक रूप से चेकपॉइंट / रिस्टार्ट फ्यूचर्स: https://ckpt.wiki.kernel.org/ को लागू कर दिया है, स्थिति यहाँ है

कुछ उपयोगी जानकारी lwn (linux साप्ताहिक नेट) में हैं: http://lwn.net/Articles/375855/ http://lwn.net/Articles/412749/ ......

तो उत्तर हां है"


3
यूजरस्पेस प्रोग्राम को blcr कहा जाता है।
बेहरोज़

6

छोटा जवाब हां है।" आप कुछ विचारों के लिए इसे देखकर शुरू कर सकते हैं: ELF एक कोर छवि से निष्पादन योग्य पुनर्निर्माण ( http://vx.netlux.org/lib/vsc03.html )


1
दिलचस्प लिंक; लेकिन लिंक यह इंगित करता है कि यह मज़बूती से काम नहीं करता है
विल

6

मैंने क्रायोपिड 2 नामक एक पैकेज का निर्माण किया, जिसे SourceForge से उपलब्ध क्रायोपिड 2 कहा जाता है। यह एक प्रक्रिया के साथ-साथ इसे हाइबरनेट करने के लिए भी स्थानांतरित कर सकता है (किसी भी खुली फ़ाइलों और सॉकेट्स के साथ - सॉकेट्स / पाइप में डेटा को हाइबरनेशन पर प्रक्रिया में चूसा जाता है और प्रक्रिया फिर से शुरू होने पर इन में वापस थूक दिया जाता है)।

इस परियोजना के साथ सक्रिय नहीं होने का कारण यह है कि मैं एक कर्नेल डेवलपर नहीं हूं - यह (और / या मूल क्रायोपिड) दोनों को बोर्ड पर किसी को प्राप्त करने की आवश्यकता है जो उन्हें अंतिम गुठली (जैसे लिनक्स 3.x) के साथ चल सकता है ।

क्रायोपिड विधि काम करती है - और संभवतः लिनक्स में सामान्य प्रयोजन प्रक्रिया हाइबरनेशन / माइग्रेशन का सबसे अच्छा समाधान है।


3

जैसा कि अन्य ने नोट किया है, ओएस के लिए यह कार्यक्षमता प्रदान करना मुश्किल है, क्योंकि टूटी हुई धाराओं को संभालने के लिए एप्लिकेशन को कुछ त्रुटि की जाँच करने की आवश्यकता है।

हालाँकि, साइड नोट पर, कुछ प्रोग्रामिंग लैंग्वेज और टूल्स जो वर्चुअल मशीनों का उपयोग करते हैं, स्पष्ट रूप से इस कार्यक्षमता का समर्थन करते हैं, जैसे सेल्फ प्रोग्रामिंग लैंग्वेज


0

Ctrl-Z की संभावना बढ़ जाती है कि प्रक्रिया के पृष्ठ स्वैप हो जाएंगे, लेकिन यह प्रक्रिया के संसाधनों को पूरी तरह से मुक्त नहीं करता है। किसी प्रक्रिया के संसाधनों को पूरी तरह से मुक्त करने में समस्या यह है कि फ़ाइल हैंडल, सॉकेट्स जैसी चीजें कर्नेल संसाधन हैं जिनका उपयोग करने के लिए प्रक्रिया हो जाती है, लेकिन यह नहीं पता है कि कैसे अपने आप को बनाए रखना है। इसलिए Ctrl-Z जितना अच्छा है उतना ही अच्छा है।


0

2.2 और 2.4 दिनों में लिनक्स के लिए चेकपॉइंट / रिस्टोर पर कुछ शोध किया गया था, लेकिन इसने इसे कभी भी पिछले प्रोटोटाइप नहीं बनाया। संभव के कुछ मूल्यों के लिए यह संभव है (अन्य उत्तरों में वर्णित कैविट्स के साथ) - मैं इसे करने के लिए एक कर्नेल मॉड्यूल लिख सकता हूं, यह संभव है। लेकिन संभव के सामान्य मूल्य के लिए (क्या मैं इसे वाणिज्यिक लिनक्स वितरण पर शेल से कर सकता हूं), यह अभी तक संभव नहीं है।


0

यह क्लस्टर्ड ऑपरेटिंग सिस्टम के अंतिम लक्ष्य की तरह है। मैथ्यू डिलन अपने ड्रैगनफ़्लू बीएसडी प्रोजेक्ट में कुछ इस तरह से लागू करने के लिए बहुत प्रयास करते हैं ।


क्या यह सुविधा ड्रैगनफली बीएसडी में पूरी तरह से लागू है?
अर्जुन जे राव

0

दूसरा वर्कअराउंड जोड़ना: आप वर्चुअलबॉक्स का उपयोग कर सकते हैं। अपने एप्लिकेशन को एक नियमित वर्चुअल मशीन में चलाएं और जब भी चाहें बस "मशीन की स्थिति को बचाएं"। मुझे पता है कि यह कोई जवाब नहीं है, लेकिन मैंने सोचा कि यह तब उपयोगी हो सकता है जब कोई वास्तविक विकल्प न हो।

अगर किसी भी कारण से आपको वर्चुअलबॉक्स पसंद नहीं है, तो vmware और Qemu उतने ही अच्छे हैं।


-2

नहीं है ctrl+zलिनक्स में, लेकिन मैं नहीं कर रहा हूँ यकीन है कि यह आपके द्वारा निर्दिष्ट सुविधाओं प्रदान करता है। मुझे संदेह है कि आपने यह प्रश्न पूछा है क्योंकि यह नहीं है

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