एक अस्थायी निर्देशिका के रूप में `/ रन / shm` (पूर्व में` / देव / shm`) का उपयोग करें


9

क्या /run/shm(पूर्व में /dev/shm) एक निर्देशिका बनाना और एक अनुप्रयोग के लिए एक अस्थायी निर्देशिका की तरह उपयोग करना अच्छा है?

पृष्ठभूमि: मैं एक प्रोग्राम के लिए ब्लैक बॉक्स टेस्ट लिख रहा हूं जो फाइलों और निर्देशिकाओं के साथ बहुत सारे सामान करता है। प्रत्येक परीक्षण के लिए मैं बहुत सारी फाइलें और निर्देशिका बनाता हूं और फिर प्रोग्राम चलाता हूं और फिर फाइलों और निर्देशिकाओं के अपेक्षित सेट बनाता हूं और फिर तुलना करने के लिए अलग-अलग रन बनाता हूं। मेरे पास अब लगभग 40 परीक्षण हैं और उन्हें चलाने में पहले से ही 2 सेकंड का समय लग रहा है। चीजों को गति देने की उम्मीद करते हुए मैं किसी तरह की रैमडिस्क पर एक निर्देशिका में परीक्षण चलाना चाहता हूं।

राम डिस्क के बारे में शोध करना मैंने एक प्रश्न पर जवाब देते हुए कहा कि यह एक निर्देशिका बनाने /dev/shmऔर एक अस्थायी निर्देशिका की तरह उपयोग करने के लिए ठीक है । कुछ और शोधों पर मैंने डेबियन से विकी पृष्ठ पर यह कहते हुए ठोकर खाई कि यह /dev/shmसीधे प्रयोग करने में त्रुटि है । मुझे shm_*कार्यों का उपयोग करना चाहिए । दुर्भाग्य से shm_*फ़ंक्शन शेल स्क्रिप्ट में उपयोग के लिए उपलब्ध नहीं हैं।

अब मैं उलझन में हूं। यह अस्थायी निर्देशिका की तरह /run/shm(पूर्व में /dev/shm) उपयोग करना ठीक है या नहीं ?


हां, कई उपयोगकर्ता /tmpसाझा मेमोरी में भी माउंट करते हैं।
Eddy_Em

मुझे लगता /tmpहै कि अधिक अर्थपूर्ण होगा। यदि आपके उपयोगकर्ताओं के पास /dev/shmचीजों को गति देने के लिए अस्थायी फ़ाइलों का उपयोग करने के लिए पर्याप्त रैम है , तो वे इसे वहां माउंट करेंगे। लेकिन अगर उनके पास पर्याप्त रैम नहीं है, और वहां बढ़ते हुए वे अपने कंप्यूटर को स्वैप फ़ाइलों का उपयोग करने के लिए सभी प्रक्रियाओं को मजबूर करके धीमा कर देते हैं, तो वे अपने राम को अधिक महत्वपूर्ण चीजों के लिए सहेज लेंगे, और /tmpफाइल सिस्टम के लिए साधारण डिस्क स्थान का उपयोग करेंगे । दूसरे शब्दों में, /tmpअधिक ट्यून करने योग्य है।
जैक

जवाबों:


10

/runजब तक आपके पास इस पर उचित अधिकार न हो तब तक कुछ निर्देशिका का उपयोग करना पूरी तरह से ठीक है। कुछ आधुनिक डिस्ट्रोस में, /tmpपहले से ही मेमोरी में एक वर्चुअल फ़ाइल सिस्टम है या अंदर एक निर्देशिका के लिए सिम्लिंक है /run। यदि यह आपका मामला है (आप देख सकते हैं कि /etc/fstab, या टाइपिंग में mtab), तो आप /tmpअपनी अस्थायी निर्देशिका के रूप में उपयोग कर सकते हैं ।

इसके अलावा, डेबियन से लेख के साथ भ्रमित मत हो। shm_*इंटर-प्रोसेस कम्युनिकेशन के लिए साझा मेमोरी सेगमेंट बनाने के लिए फ़ंक्शंस का उपयोग किया जाता है। उन कार्यों के साथ, आप दो या दो से अधिक प्रक्रियाओं के बीच स्मृति के एक टुकड़े को साझा कर सकते हैं ताकि उन्हें उसी डेटा का उपयोग करके संवाद या सहयोग कर सकें। प्रक्रियाओं में मेमोरी का सेगमेंट अपने स्वयं के एड्रेस स्पेस में संलग्न होता है और वहां हमेशा की तरह पढ़ और लिख सकते हैं। कर्नेल जटिलता से संबंधित है। वे फ़ंक्शन शेल फ़ंक्शन के रूप में उपलब्ध नहीं हैं (और शेल संदर्भ में बहुत उपयोगी नहीं होंगे)। अधिक जानकारी के लिए, पर एक नज़र है man 7 shm_overview। लेख का मुद्दा यह है कि किसी भी कार्यक्रम को साझा खंडों का प्रतिनिधित्व करने वाले सीधे छद्म फाइलों का प्रबंधन नहीं करना चाहिए, बल्कि साझा स्मृति खंडों को बनाने, संलग्न करने और हटाने के लिए उपयुक्त कार्यों का उपयोग करना चाहिए।


2
नीचे सबसे उपयुक्त स्थान /runहो सकता है /run/user/${UID}/
पॉल फेनी

1
दरअसल, मेरे सिस्टम पर, pulseaudio और systemd कुछ फाइलें वहां pid फाइल की तरह इंस्टॉल करते हैं। हालाँकि, / tmp अभी भी अस्थायी फ़ाइलों के लिए मेरा पसंदीदा स्थान होगा।
lgeorget

2
@PaulFenney: / run / user / $ UID को $ XDG_RUNTIME_DIR के रूप में भी जाना जाता है
user2394284
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.