सिस्टम मेमोरी पर ... विशेष रूप से `tmpfs,` `shm,` और `विशालपृष्ठ…` के बीच अंतर


16

मैं हाल ही में विभिन्न लिनक्स कर्नेल मेमोरी आधारित फाइल सिस्टम के बारे में उत्सुक हूं।

Note:जहाँ तक मेरा सवाल है, शीर्षक में उस पृष्ठ की बेहतर समझ के साथ तुलना में नीचे दिए गए प्रश्नों को अधिक या कम वैकल्पिक माना जाना चाहिए। मैं उनसे नीचे पूछता हूं क्योंकि मेरा मानना ​​है कि उनका जवाब देना मुझे मतभेदों को समझने में बेहतर मदद कर सकता है, लेकिन जैसा कि मेरी समझ है कि यह सीमित रूप से सीमित है, यह इस प्रकार है कि दूसरों को बेहतर पता हो सकता है। मैं किसी भी उत्तर को स्वीकार करने के लिए तैयार हूं जो शीर्षक में उल्लिखित तीन फाइल सिस्टम के बीच अंतर की मेरी समझ को समृद्ध करता है।

अंततः मुझे लगता है कि मैं एक उपयोगी फाइल सिस्टम माउंट करना चाहूंगा, hugepages,हालांकि कुछ हल्के शोध (और अभी भी हल्का छेड़छाड़) ने मुझे विश्वास दिलाया है कि rewritable hugepage mountयह एक विकल्प नहीं है। क्या मैं गलत हूं? यहां खेलने वाले मैकेनिक क्या हैं?

के संबंध में भी hugepages:

     uname -a
3.13.3-1-MANJARO \
#1 SMP PREEMPT \
x86_64 GNU/Linux

    tail -n8 /proc/meminfo
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:     8223772 kB
DirectMap2M:    16924672 kB
DirectMap1G:     2097152 kB

(यहां पूर्ण-पाठ संस्करण / proc / meminfo और / proc / cpuinfo के हैं )

ऊपर क्या हो रहा है? क्या मैं पहले से ही आवंटित कर रहा हूं hugepages?क्या DirectMapमेमोरी पन्नों और के बीच अंतर हैhugepages?

अपडेट @Gilles से थोड़ी-सी नोक-झोंक के बाद, मैंने 4 और लाइनें ऊपर जोड़ दी हैं और ऐसा लगता है कि इसमें कोई अंतर होना चाहिए, हालांकि मैंने DirectMapउस tailकल को खींचने से पहले कभी नहीं सुना होगा ... शायद DMIया कुछ और?

केवल थोड़ा और ...

hugepagesप्रयास के साथ किसी भी सफलता का सामना करना, और किसी भी छवि फ़ाइलों के हार्डडिस्क बैकअप को संभालने से, क्या tmpfs?मेरे फाइलसिस्टम से swappedसबसे खराब स्थिति होने के कारण बढ़ते छोरों के जोखिम हैं? मैं समझता हूं कि tmpfsमाउंटेड फाइल सिस्टम कैश है - क्या मेरे माउंटेड लूपफाइल को मेमोरी से बाहर दबाया जा सकता है? क्या इससे बचने के लिए मैं शमन कर सकता हूं?

अंतिम - shm,वैसे भी वास्तव में क्या है ? यह कैसे अलग है या इसमें या तो शामिल है hugepagesयाtmpfs?


1
इसमें पिछली पंक्तियों के बारे में क्या /proc/meminfoहै HugePage(या आपके कर्नेल संस्करण में ये नहीं हैं)? यह किस वास्तुकला पर है (x86_64 मुझे लगता है)?
गाइल्स का एसओ- दुष्ट होना बंद करें '

बीमार उन्हें जोड़ें। मैं इसके बारे में चिंतित था कि यह बहुत लंबा है।
मिकसेर्व

@ गिल्स - मैंने ऊपर सादे पाठ से जोड़ा है। मुझे उम्मीद है कि यह ठीक है। पूछने के लिए धन्यवाद - मुझे इसे पहली जगह में शामिल करना चाहिए था - मुझे नहीं पता कि मैं कैसे चूक गया।
23

जवाबों:


13

कोई अंतर नहीं है 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) बचाता है ) कुछ अन्य प्रक्रिया का उपयोग करने के लिए।


2
यह वास्तव में अच्छा है- क्या यह मेरा DirectMap है ?
मिकसरोव

मैं इसका जवाब नहीं दे सकता क्योंकि मैंने DirectMapping किया और tmpfs आदि से संबंधित कुछ भी नहीं पाया। केवल एक चीज जो मैं पा सकता था वह यह था कि लिनक्स के फ्लेवर पर चलने वाले Oracle डेटाबेस के लिए HugeMem सपोर्ट को कैसे कॉन्फ़िगर किया जाए, जिसका अर्थ है कि वे THS के बजाय HugePages का उपयोग कर रहे हैं मैंने जिक्र किया। 2.6 शाखा में सभी कर्नेल यद्यपि THS का समर्थन करते हैं। हंच थो के रूप में, ऊपर मेरी नई टिप्पणी देखें।
eyoung100

हाँ, मैं भी बहुत कम निकला। मैंने एचपी, टीएचपी पर कुछ पढ़ने का काम किया है। मैं आपकी टिप्पणी से बहुत सहमत हूँ। यह वास्तव में आकार दे रहा है, यार। यह अंतिम भाग - एचपी केवल - क्या मुझे इसका अर्थ यह समझना चाहिए कि मैं एक विशाल पृष्ठ के ऊपर एक रीड / राइट फाइलसिस्टम माउंट कर सकता हूं ? जैसे, एक विशाल फ़ाइल माउंट से एक छवि फ़ाइल लूप-माउंटेड? लिखने योग्य?
मिकसरोव

हां, और यह ठीक से माउंट किए जाने पर लेखन योग्य है, लेकिन जागरूक रहें: 1. क्योंकि आपने इसे माउंट किया है, आप क्लीनअप के प्रभारी हैं। यह बेकार है: अपने उदाहरण का उपयोग करते हुए, कहते हैं कि आपके लूप में केवल एक पाठ फ़ाइल शामिल है, अक्षर: नमस्कार, मेरा नाम माइक है। प्रत्येक वर्ण को 1k मानकर, वह फ़ाइल 23k के रूप में सहेजेगी। आप 2025k बर्बाद कर चुके हैं क्योंकि विशाल पृष्ठ ने आपको 2MB का दिया है। यह बेकार व्यवहार है क्यों स्मृति प्रबंधन कर्नेल में बनाया गया था। यह हमें
कर्नेल 32

और अंत में 3. आप अपने माउंट को रिबूट या क्रैश पर खो देते हैं।
eyoung100

4

"DirectMap" समस्या को संबोधित करने के लिए: कर्नेल में भौतिक मेमोरी की एक रेखीय ("प्रत्यक्ष") मैपिंग होती है , जो प्रत्येक उपयोगकर्ता प्रक्रिया को आवंटित वर्चुअल मैपिंग से अलग होती है।

टीबीबी दबाव में कटौती के लिए कर्नेल इस मैपिंग के लिए सबसे बड़े संभावित पृष्ठों का उपयोग करता है।

DirectMap1G दिखाई दे रहा है यदि आपका CPU 1Gb पेज (बार्सिलोना को आगे बढ़ाता है; कुछ आभासी वातावरण उन्हें अक्षम करता है), और यदि कर्नेल में सक्षम है - डिफ़ॉल्ट 2.6.29+ के लिए है।


3

इसमें कोई अंतर नहीं है shmऔर tmpfs(वास्तव में, tmpfsकेवल पूर्व का नया नाम है shmfs)। hugetlbfsएक- tmpfsआधारित फाइल सिस्टम है जो कर्नेल विशाल पृष्ठों से अपना स्थान आवंटित करता है और कुछ अतिरिक्त कॉन्फ़िगरेशन खर्चों की आवश्यकता होती है (इसका उपयोग कैसे करें यह डॉक्यूमेंटेशन / vm / hugetlbpage.txt में बताया गया है )।


यह एक अच्छी कोशिश थी, और मैंने निश्चित रूप से उन डॉक्स को पढ़ा था। या हो सकता है नहीं जाहिर है - लेकिन मुझे लगता है कि मैं इस एक 100rep इनाम के लिए बाहर डाल करने के लिए जा रहा हूँ, लेकिन इससे पहले कि मैं क्या, मैं इसे आप के लिए की पेशकश करेगा अगर आप इस पर विस्तार कर सकते हैं। अब तक आपने मेरी समझ को समृद्ध किया है - मुझे पहले से ही पता था, सिवाय इसके कि दोनों केवल पर्यायवाची थे। किसी भी मामले में, यदि आप इसे कल सुबह तक बेहतर जवाब दे सकते हैं तो 100rep का इनाम आपका है। मेरे लिए विशेष रूप से दिलचस्प है मुझे पेज DirectMapमें बिल्कुल भी उल्लेख नहीं है procfs man। कैसे?
mikeserv

1
@mikeserv - मैं इस अंतर पाया शो क्या DirectMaps ढंग से काम से गणना कि कर रहे हैं: lkml.org/lkml/2008/11/6/163
SLM
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.