कोई अंतर नहीं है betweem tmpfs और shm। tmpfs shm का नया नाम है। SHM SHaredMemory के लिए खड़ा है
देखें: लिनक्स tmpfs ।
आज भी मुख्य कारण tmpfs का उपयोग किया जाता है, मेरे gentoo बॉक्स पर मेरे / etc / fstab में यह टिप्पणी है। BTW क्रोमियम लापता लाइन के साथ नहीं बनेगा:
# glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for
# POSIX shared memory (shm_open, shm_unlink).
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0
जो लिनक्स कर्नेल प्रलेखन से बाहर आया
का हवाला देते हुए:
tmpfs के निम्नलिखित उपयोग हैं:
1) हमेशा एक कर्नेल आंतरिक माउंट होता है जिसे आप बिल्कुल नहीं देखेंगे
। यह साझा अनाम मैपिंग और SYSV साझा
मेमोरी के लिए उपयोग किया जाता है ।
यह माउंट CONFIG_TMPFS पर निर्भर नहीं करता है। यदि CONFIG_TMPFS सेट नहीं है, तो उपयोगकर्ता का दिखाई देने वाला हिस्सा tmpfs का नहीं है। लेकिन आंतरिक
तंत्र हमेशा मौजूद होते हैं।
2) glibc 2.2 और इसके बाद के संस्करण की tmpfs को
POSIX साझा मेमोरी (shm_open, shm_unlink) के लिए / dev / shm पर माउंट किया जाना है । निम्नलिखित
लाइन को / etc / fstab में जोड़कर इस बात का ध्यान रखना चाहिए:
tmpfs / dev / shm tmpfs चूक 0 0
निर्देशिका बनाने के लिए याद रखें जिसे आप आवश्यक होने पर tmpfs माउंट करने का इरादा रखते हैं।
SYSV साझा मेमोरी के लिए इस माउंट की आवश्यकता नहीं है । उसके लिए आंतरिक
माउंट का उपयोग किया जाता है। (2.3 कर्नेल संस्करणों में
SYSV
साझा मेमोरी का उपयोग करने के लिए tmpfs (shm fs) के पूर्ववर्ती को माउंट करना आवश्यक था )
3) कुछ लोग (मेरे सहित) इसे
/ tmp और / var / tmp पर उदाहरण के लिए माउंट करना बहुत सुविधाजनक समझते हैं और एक बड़ा स्वैच्छिक विभाजन है। और अब
tmpfs फ़ाइलों के लूप mounts काम करते हैं, इसलिए अधिकांश
वितरणों द्वारा भेजे गए mkinitrd को tmpfs / tmp के साथ सफल होना चाहिए।
4) और शायद एक बहुत अधिक मैं :-) के बारे में नहीं जानता
नौकरशाही का आकार घटाने के लिए तीन माउंट विकल्प हैं:
आकार: इस tmpfs उदाहरण के लिए आवंटित बाइट्स की सीमा। डिफ़ॉल्ट स्वैप के बिना आपके भौतिक रैम का आधा हिस्सा है। यदि आप अपने tmpfs के उदाहरणों को देखते हैं कि मशीन गतिरोध करेगी क्योंकि OOM हैंडलर उस मेमोरी को मुक्त नहीं कर पाएगा।
nr_blocks: आकार के समान, लेकिन PAGE_CACHE_SIZE के ब्लॉक में।
nr_inodes: इस उदाहरण के लिए इनोड की अधिकतम संख्या। डिफ़ॉल्ट आपके भौतिक RAM पृष्ठों की संख्या का आधा है, या (highmem वाली मशीन पर) कम RAM पृष्ठों की संख्या, जो भी कम हो।
पारदर्शी विशाल पृष्ठ कर्नेल डॉक्टर से:
पारदर्शी ह्यूजपेज समर्थन मुफ्त मेमोरी की उपयोगिता को बढ़ाता है, अगर सभी अप्रयुक्त मेमोरी को कैश या अन्य चल (या यहां तक कि अमिट संस्थाओं) के रूप में उपयोग करने की अनुमति देकर hugetlbfs के आरक्षण दृष्टिकोण की तुलना में। यह उपयोगकर्ता से ध्यान देने योग्य होने के लिए बड़े पृष्ठ आवंटन विफलताओं को रोकने के लिए आरक्षण की आवश्यकता नहीं है। यह पेजिंग और अन्य सभी उन्नत VM सुविधाओं को विशालपृष्ठों पर उपलब्ध होने की अनुमति देता है। इसका लाभ लेने के लिए आवेदन के लिए किसी संशोधन की आवश्यकता नहीं है।
हालाँकि, इस सुविधा का लाभ उठाने के लिए अनुप्रयोगों को और अधिक अनुकूलित किया जा सकता है, उदाहरण के लिए जैसे कि वे हर मॉलॉक (4k) के लिए एमएमएपी सिस्टम कॉल की बाढ़ से बचने के लिए अनुकूलित किए गए हैं। उपयोगकर्ता का अनुकूलन करना अब तक अनिवार्य नहीं है और khugepaged पहले से ही लंबे समय तक पृष्ठ के आवंटन का ध्यान रख सकता है यहां तक कि बड़ी मात्रा में अनजान अनुप्रयोगों के लिए भी जो बड़ी मात्रा में स्मृति से संबंधित है।
कुछ गणना करने के बाद नई टिप्पणी:
विशाल आकार: 2MB
विशाल उपयोग: कोई नहीं / बंद, जैसा कि सभी 0 के द्वारा दर्शाया गया है, लेकिन ऊपर 2Mb के अनुसार सक्षम है।
DirectMap4k: 8.03Gb
DirectMap2M: 16.5Gb
DirectMap1G: 2Gb
THS में ऑप्टिमाइज़ेशन के संबंध में ऊपर दिए गए पैराग्राफ का उपयोग करते हुए, ऐसा लगता है कि आपकी मेमोरी का tho 8Gb उन अनुप्रयोगों द्वारा उपयोग किया जा रहा है, जो 4k, 16.5Gb के मॉलस्क का उपयोग करके संचालित होते हैं, 2M के मॉलस्क का उपयोग करके अनुप्रयोगों द्वारा अनुरोध किया गया है। 2M के मैलोडो का उपयोग करने वाले अनुप्रयोग कर्नेल को 2M सेक्शन को बंद करके HugePage सपोर्ट की नकल कर रहे हैं। यह पसंदीदा तरीका है, क्योंकि एक बार जब कर्नेल द्वारा मॉलोक जारी किया जाता है, तो मेमोरी को सिस्टम में जारी किया जाता है, जबकि विशाल पृष्ठ का उपयोग करते हुए tmpfs बढ़ते हैं, जब तक कि सिस्टम को रिबूट नहीं किया जाता तब तक पूरी सफाई नहीं होती। अंत में, आसान एक, आपके पास 2 प्रोग्राम खुले / चल रहे थे जो 1Gb के एक मॉलोक का अनुरोध करते थे
आप में से जो पढ़ते हैं, उन्हें मालूम नहीं है कि सी में एक मानक संरचना सी है जो मेमोरी एलोकेशन के लिए है। ये गणना प्रमाण के रूप में कार्य करती हैं कि DirectMapping और THS के बीच ओपी का सहसंबंध शायद सही है। यह भी ध्यान दें कि केवल बड़े पैमाने पर बढ़ते हुए केवल 2MB की वृद्धि में लाभ होगा, जबकि THS का उपयोग करके सिस्टम को मेमोरी को प्रबंधित करने की अनुमति ज्यादातर 4k ब्लॉकों में होती है, जिसका अर्थ है कि स्मृति प्रबंधन प्रत्येक मैलोकोल कॉल सिस्टम को 2444k (2048 - 4) बचाता है ) कुछ अन्य प्रक्रिया का उपयोग करने के लिए।
/proc/meminfo
हैHugePage
(या आपके कर्नेल संस्करण में ये नहीं हैं)? यह किस वास्तुकला पर है (x86_64 मुझे लगता है)?