रैम्फ़ और tmpfs के बीच प्रदर्शन अंतर


23

मुझे लगभग 10 जीबी डेटा के लिए मेमोरी स्टोरेज सिस्टम सेटअप करने की आवश्यकता है, जिसमें कई 100 केबी सिंगल फाइल (चित्र) शामिल हैं। बहुत सारी रीड और काफी समय-समय पर लिखने वाली (नई फाइलें जोड़ना, कुछ पुराने को हटाना) होगी।
अब, मुझे पता है कि tmpfs एक नियमित फाइल सिस्टम की तरह व्यवहार करता है जिसके लिए आप कर सकते हैं, उदाहरण के लिए, df के साथ खाली / उपयोग किए गए स्थान की जाँच करें , जो कि एक अच्छी सुविधा है। हालाँकि, मुझे दिलचस्पी है कि अगर IO संचालन की गति के संबंध में ramfs कुछ लाभ प्रदान करेगा। मुझे पता है कि मैं रैमफ़्स का उपयोग करते समय भस्म मेमोरी के आकार को नियंत्रित नहीं कर सकता और यह कि मेरा सिस्टम लटका सकता है यदि यह पूरी तरह से मुफ्त रैम का उपभोग करता है, लेकिन यह इस परिदृश्य में एक मुद्दा नहीं होगा।

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


उम, सर्वर में कितनी रैम है?
इविविट

1
सर्वर में कुल 16 जीबी रैम है। यह भी ध्यान देने योग्य है कि मेरे पास एसएसडी स्टोरेज नहीं है, लेकिन एक एकल 7200 आरपीएम एचडीडी है। यही कारण है कि मैं कुछ प्रकार के रैम स्टोरेज का उपयोग करने पर विचार कर रहा हूं।
इवान कोवेसेविक

जवाबों:


21

मेरी सिफारिश:

सामान्य परिस्थितियों में वास्तविक जीवन गतिविधि को मापें और देखें।

उन फ़ाइलों को सभी समय पर कैश की जरूरत है और सेवा की संभावना नहीं है। लेकिन vmtouch नाम का एक अच्छा टूल है जो आपको बता सकता है कि किसी निश्चित समय में कैश में क्या है। आप इसका उपयोग कुछ निर्देशिकाओं या फ़ाइलों को कैश में लॉक करने के लिए भी कर सकते हैं। तो देखें कि कुछ नियमित उपयोग के बाद क्या चीजें दिखती हैं। इस स्थिति के लिए tmpfs और ramfs का उपयोग करना आवश्यक नहीं है।

देखें: http://hoytech.com/vmtouch/

मुझे लगता है कि आपको यह देखकर आश्चर्य होगा कि सबसे सक्रिय फाइलें संभवतः पहले से ही कैश में निवासी होंगी।


जहाँ तक tmpfs बनाम ramfs की बात है, वहाँ कोई सराहनीय प्रदर्शन अंतर नहीं है। परिचालन अंतर हैं। एक वास्तविक जीवन में उपयोग का मामला ओरेकल है, जहां रैमफिक्स का उपयोग ओरेकल को रैम में डेटा का प्रबंधन करने की अनुमति देने के लिए किया गया था, जबकि इसे स्वैप किए जाने के जोखिम के बिना। tmpfs डेटा को मेमोरी प्रेशर के तहत स्वैप-आउट किया जा सकता है। मक्खी पर सेटिंग्स को आकार देने और संशोधित करने में भी अंतर हैं।


1
बहुत कम उपयोगिता! +1
जनने पिक्कारेंन

1
@ बहुत बढ़िया उत्तर। हमारे एक मामले में कुछ साल पहले हमने वास्तव में यह पाया था कि ज्यादातर इस्तेमाल की जाने वाली फाइलें पहले से ही कैश में निवासी हैं। संकेत: फ़ाइल सिस्टम अब मेरे विचार से बहुत अधिक बुद्धिमान हैं।
१२:

13

यह मत सोचो। अपने सिस्टम में पर्याप्त रैम रखें और कर्नेल की डिस्क कैश को आपके लिए ध्यान रखें। इस तरह आपको मेमोरी से सीधे आने वाले रीड्स का लाभ मिलता है, जबकि अभी भी डिस्क पर डेटा को बनाए रखने में सक्षम है।


1
मेरे सिस्टम में वर्तमान में 16 जीबी रैम है। इसका एक सादा डेबियन उन छवियों की सेवा करने के लिए नगनेक्स को स्थापित करता है। मेरे पास 1 Gbit नेटवर्क कनेक्शन है जो हर समय 100% लोड के अंतर्गत होगा, उन चित्रों को बिना किसी विशेष क्रम के परोसें। क्या आपको लगता है कि कर्नेल इस परिदृश्य में कैश में वैसे भी उन सभी 10 गिग्स को लोड करेगा?
इवान कोवेसेविक

3
हां, अगर सिस्टम में पर्याप्त रैम है, और सर्वर पर अन्य एप्लिकेशन रैम संसाधनों के लिए प्रतिस्पर्धा नहीं कर रहे हैं, तो वे फाइलें कैश में रहेंगी।
ईईएए

2
मैं ~ 15 साल के लिए यूनिक्स प्रशासन में रहा हूं, और मैं ऐसी स्थिति में कभी नहीं चला हूं, जहां tmpfs / ramfs ने देशी कर्नेल fs कैश पर कोई लाभ प्रदान किया हो । यह कहना नहीं है कि परिस्थितियां वहां मौजूद नहीं हैं जहां उन्हें वारंट किया जाएगा, लेकिन वे काफी दुर्लभ हैं। आमतौर पर अगर आपको चीजों के लिए RAM कैश की आवश्यकता होती है, तो एक उद्देश्य-निर्माण कैशिंग परत (Redis / Memcache / etc) का उपयोग करता है।
EEAA

4
डिस्क कैशिंग निश्चित रूप से उस मामले के लिए काम करेगा जहां छवियों को पढ़ने की आवश्यकता होती है, लेकिन tmpfs या ramfs अभी भी उपयोगी हो सकते हैं यदि आप बहुत सारे यादृच्छिक / छोटे लेखन को गति देना चाहते हैं, लेकिन एक डिस्क से बंधा हुआ है जो यादृच्छिक I / के साथ धीमा है ओ इस बात का ध्यान रखें कि अगर मशीन दुर्घटनाग्रस्त हो जाती है या बिजली की खराबी हो जाती है, तो tmpfs की सामग्री तब से चली जाएगी जब वे (केवल) स्मृति में हैं।
Martijn

1
@ मर्तिजन सही हैं। tmpfs और ramfs वास्तव में उपयोगी हैं। उदाहरण के लिए, मैं एक गिट रिपॉजिटरी का एक गहन पुनर्लेखन (फ़िल्टर-शाखा) कर रहा हूं। इसे मेमोरी में करना मेरे SSD पर करने की तुलना में अधिक तेज़ है। कैशिंग पढ़ने में मदद नहीं करता है, क्योंकि (सामान्य रूप से) लिनक्स को डिस्क संचालन की स्थायित्व के बारे में कुछ गारंटियों को पूरा करना पड़ता है।
पॉल ड्रेपर

7

1) प्रदर्शन बेंचमार्क।

इस पृष्ठ को एक संदर्भ के रूप में उपयोग करते हुए , मैंने tmpfs और ramfs के बीच I / O की तुलना की, और परिणाम यह है कि यह प्रदर्शन के मामले में बहुत समान है:

# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)

# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s

# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s

2) इस पृष्ठ के अनुसार , tmpfs स्वैप का उपयोग करता है, और ramfs स्वैप का उपयोग नहीं करता है।


2
आपका जवाब सही रास्ते पर है। हालांकि मैं प्रदर्शन के संबंध में आपके निष्कर्ष से सहमत नहीं होगा, आपके परीक्षण बताते हैं कि रामफ्स के पक्ष में 0.2 जीबी / एस और 0.1 जीबी / एस के अंतर हैं। मेरा मानना ​​है कि वैध सांख्यिकीय नमूना प्रदान करने के लिए इसे और भी अधिक परीक्षण किया जाना चाहिए। 2 के बारे में) हां, यह ज्ञात है, हालांकि मैं चाहता था कि मैं स्वैप का उपयोग करने पर वास्तव में बेहतर जानकारी प्राप्त कर सकूं।
इवान कोवासेविक

अगर हमने अलग-अलग आकार की फाइलों के साथ कई बार बेंचमार्क किया, तो मुझे नहीं लगता कि हम कोई अंतर देखेंगे। आप देखेंगे कि जब मैंने आकार को चार बार टकराया था, तो अंतर वास्तव में चौड़ा होने के बजाय संकुचित हो गया था।
माइकल मार्टिनेज

1
उस मामले के बारे में जहां आपके पास छोटी फ़ाइलों का एक गुच्छा है। उदाहरण के लिए मिलियन 100-200 केबी फाइल लिखना। क्या आपको एक ही फ़ाइल के आकार के लिए बार-बार 0.2 GB / s का अंतर मिलता है? जो निश्चित रूप से प्रदर्शन अंतर को इंगित करेगा। जब मैं अपने शेड्यूल पर होता हूं तो मैं खुद इसका परीक्षण करूंगा। लेकिन यही कारण है कि मैंने यहां पूछा, इसलिए मैं इसे टू-डू सूची से पार कर सकता था अगर कोई और पहले से ही ऐसा करता।
इवान कोवासेविच

हाँ, यह सुनिश्चित करने का एकमात्र तरीका परीक्षण करना है।
माइकल मार्टिनेज

1

यदि आपके पास विभिन्न कर्नेल बफ़र्स को होस्ट करने के लिए पर्याप्त मात्रा में रैम स्थापित है, तो एप्लिकेशन स्टैक और हीप्स, नियमित फ़ाइल सिस्टम कैश और आपके द्वारा इसमें डालने के इरादे वाली सभी फाइलें ramfsकभी भी धीमी नहीं होनी चाहिए tmpfsक्योंकि इसमें कोई जोखिम नहीं होगा भौतिक I / O डिजाइन द्वारा। भौतिक I / Os निस्संदेह उस क्षेत्र में प्रदर्शन में गिरावट का मुख्य कारण हैं।

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

आपको दूसरे प्रश्न का उत्तर देने के लिए, हाँ, tmpfsपुराने डेटा को पहले स्वैप क्षेत्र में ले जाएगा, न कि अंतिम "हॉट"।

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