2009-05-24 13 views
9
बनाम

कोई जानता है कि कैसे अच्छी तरह निम्नलिखित 3 गति के मामले में तुलना:Shmem बनाम tmpfs mmap

  • साझा स्मृति

  • tmpfs (/ dev/shm)

  • mmap (/ dev/shm)

धन्यवाद!

उत्तर

8

tmpfs के बारे में पढ़ें (वहाँ एक 32-बिट प्रक्रिया में इस तरह के रूप 4G> विशेष मामलों में जहां यह मतलब हो सकता है, कर रहे हैं) here। विशेष रूप से साझा स्मृति और tmpfs के बीच संबंधों को समझाते हुए, उस आलेख से निम्नलिखित की प्रतिलिपि बनाई गई है।

1) There is always a kernel internal mount which you will not see at 
    all. This is used for shared anonymous mappings and SYSV shared 
    memory. 

    This mount does not depend on CONFIG_TMPFS. If CONFIG_TMPFS is not 
    set the user visible part of tmpfs is not build, but the internal 
    mechanisms are always present. 

2) glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for 
    POSIX shared memory (shm_open, shm_unlink). Adding the following 
    line to /etc/fstab should take care of this: 

    tmpfs /dev/shm tmpfs defaults 0 0 

    Remember to create the directory that you intend to mount tmpfs on 
    if necessary (/dev/shm is automagically created if you use devfs). 

    This mount is _not_ needed for SYSV shared memory. The internal 
    mount is used for that. (In the 2.3 kernel versions it was 
    necessary to mount the predecessor of tmpfs (shm fs) to use SYSV 
    shared memory) 

इसलिए, जब आप वास्तव में POSIX साझा स्मृति (जो मैं पहले भी करते थे) का उपयोग करें, तो glibc/dev/shm पर एक फ़ाइल है, जो अनुप्रयोगों के बीच डाटा साझा करने के लिए किया जाता है पैदा करेगा। फ़ाइल-डिस्क्रिप्टर जो इसे लौटाता है वह उस फ़ाइल को संदर्भित करेगा, जिसे आप उस फ़ाइल को स्मृति में मैप करने के लिए कहने के लिए mmap पर जा सकते हैं, जैसे कि यह किसी भी "वास्तविक" फ़ाइल के साथ भी कर सकता है। आपके द्वारा सूचीबद्ध तकनीकें पूरक हैं। वे प्रतिस्पर्धा नहीं कर रहे हैं। Tmpfs सिर्फ फाइल-सिस्टम है जो glibc के लिए कार्यान्वयन तकनीक के रूप में इन-मेमोरी फ़ाइलों को प्रदान करता है।

एक उदाहरण के रूप में, वहाँ एक प्रक्रिया मेरी बॉक्स वर्तमान में इस तरह के एक साझा स्मृति वस्तु पंजीकृत होने पर चल रहा है:

# pwd 
/dev/shm 
# ls -lh 
insgesamt 76K 
-r-------- 1 js js 65M 24. Mai 16:37 pulse-shm-1802989683 
# 
+0

तो गति वही है?कैसे mmap-open फ़ाइलों की तुलना सामान्य glibc खुली फ़ाइलों से की जाती है? – SyRenity

-1

tmpfs सबसे धीमा है। साझा स्मृति और mmap एक ही गति हैं।

+2

आप कृपया समझा सकता है ... वास्तव में धन्यवाद – hhafez

+1

, ऐसा लगता है कि वास्तव में tmpfs शक्तियों साझा याद? और मुझे लगता है, अंतर्निहित परिवहन के रूप में tmpfs का उपयोग करते समय mmap केवल तेज़ है? – SyRenity

2

"यह निर्भर करता है।" आम तौर पर, वे सभी स्मृति में हैं और सिस्टम कार्यान्वयन पर निर्भर हैं ताकि प्रदर्शन अधिकतर उपयोगों के लिए नगण्य और मंच-विशिष्ट होगा। यदि आप वास्तव में प्रदर्शन की परवाह करते हैं, तो आपको अपनी आवश्यकताओं को प्रोफ़ाइल और निर्धारित करना चाहिए। किसी भी विधि में से किसी एक को बदलने के लिए यह बहुत छोटा है।

उस ने कहा, साझा स्मृति कम से कम गहन है क्योंकि इसमें कोई फ़ाइल ऑपरेशन शामिल नहीं है (लेकिन फिर से, बहुत कार्यान्वयन-निर्भर)। यदि आपको बार-बार, नक्शा/अनमप) खोलने और बंद करने की आवश्यकता है, तो कई बार, तो यह महत्वपूर्ण ओवरहेड हो सकता है।

चीयर्स!
शॉन

1

"साझा स्मृति" से आपका मतलब है सिस्टम वी साझा स्मृति, है ना?

मुझे लगता है कि जब आप इसका उपयोग करते हैं तो लिनक्स एमएमएपी एक छिपी हुई tmpfs है, इसलिए यह प्रभावी रूप से tmpfs को mmaping जैसा ही है।

फ़ाइल कर रहा/tmpfs पर हे एक दंड के लिए जा रहा है ... ज्यादातर

+0

कैसा है? यदि mmap साझा स्मृति का उपयोग करता है, तो प्रदर्शन समान होना चाहिए? – SyRenity

+0

@SyRenity पढ़ें() और दोस्तों में कर्नेल बफर कैश से प्रतिलिपि शामिल है। mmap बफर कैश में पृष्ठों तक सीधे पहुंच प्रदान करता है। तो mmap आमतौर पर तेज है। – Eloff

संबंधित मुद्दे