2012-10-23 27 views
8

की तुलना में जेमलोक का सीपीयू और मेमोरी उपयोग मैंने हाल ही में जेमलोक के बारे में सीखा था, यह फ़ायरफ़ॉक्स द्वारा उपयोग किया जाने वाला मेमोरी आवंटक है। मैंने नए सिस्टम को ओवरराइड करके और ऑपरेटर को हटाकर और मैमलोक समकक्षों को मॉलोक और फ्री यानी जे_मॉलोक और जे_फ्री द्वारा कॉल करके अपने सिस्टम में जेमलोक को एकीकृत करने का प्रयास किया है। मैंने एक परीक्षण आवेदन लिखा है जो 100 मिलियन आवंटन करता है। मैंने एप्लिकेशन को ग्लिबैक मॉलोक के साथ चलाया है और जेमलोक, जेमलोक के साथ चलते समय इस तरह के आवंटन के लिए कम समय लगता है, सीपीयू उपयोग बहुत अधिक है, इसके अलावा मेमोक की तुलना में मेमोरी पैर प्रिंट भी बड़ा है। jemalloc analysis पर इस दस्तावेज़ को पढ़ने के बाद ऐसा लगता है कि जेमलोक में मॉलोक से अधिक पैरों के निशान हो सकते हैं क्योंकि यह स्मृति की तुलना में गति को अनुकूलित करने के लिए तकनीकों को नियोजित करता है। हालांकि, मुझे जेमलोक के साथ सीपीयू उपयोग के लिए कोई संकेत नहीं मिला है। मैं यह बताना चाहता हूं कि मैं एक मल्टीप्रोसेसर मशीन पर काम कर रहा हूं जिसके विवरण नीचे दिए गए हैं।ग्लिबैक malloc

प्रोसेसर: 11 VENDOR_ID: GenuineIntel cpu परिवार: 6 मॉडल: 44 मॉडल का नाम: इंटेल (आर) जिऑन (आर) सीपीयू X5680 @ 3.33GHz स्टेपिंग: 2 cpu मेगाहर्ट्ज: 3325.117 कैश आकार: 12288 KB शारीरिक आईडी: 1 भाई बहन: 12 कोर आईडी: 10 cpu कोर: 6 apicid: 53 एफपीयू: हाँ fpu_exception: हाँ सीपीयूआईडी का स्तर: 11 WP: हाँ झंडे: एफपीयू VME डे सार्वजनिक उपक्रम tsc MSR पीएई mce cx8 apic सितम्बर mtrr पीजीई एमसीए cmov पैट pse36 clflush डीटीएस ACPI MMX fxsr SSE SSE2 एस एस एच टी टीएम syscall NX pdpe1gb rdtscp एल एम CONSTANT_TSC इड़ा NONSTOP_TSC Arat PNI ds_cpl वीएमएक्स एसएमएक्स पर नजर रखने के स्था TM2 SSSE3 cx16 xtpr sse4_1 sse4_2 popcnt lahf_lm bogomips: 6649.91 clflush आकार: 64 cache_alignment: 64 पते आकार: 40 बिट शारीरिक, 48 बिट आभासी ऊर्जा प्रबंधन [8]

मैं उपयोग कर रहा हूँ शीर्ष -c बी -d 1.10 -p 24,670 | CPU उपयोग का ट्रैक रखने के लिए awk -v time = $ TIME '{print time, ",", $ 9}'

क्या किसी को जेमलोक को एकीकृत करते समय समान अनुभव होते हैं?

धन्यवाद!

उत्तर

1

वास्तविक प्रश्न समाधान के लिए यह प्रश्न यहां से संबंधित नहीं हो सकता है, यह अन्य अलग-अलग हार्डवेयर/वातावरण/उपयोग परिदृश्यों पर अन्य लोगों को अप्रासंगिक होना चाहिए। आपको लक्ष्य प्रणाली पर परीक्षण करना चाहिए और देखें कि आपको क्या उपयुक्त है।

उच्च स्मृति पदचिह्न के लिए, कंप्यूटर विज्ञान में सबसे शास्त्रीय प्रदर्शन अनुकूलन में से एक टाइम-मेमोरी ट्रेडऑफ है। यही है, बाद में तत्काल लुकअप के लिए कुछ परिणामों को कैश करना और लगातार पुनर्मूल्यांकन को रोकना। इसके अलावा, चूंकि यह संभवतः बहुत अधिक जटिल है, शायद वहां बहुत अधिक आंतरिक बहीखाता होगी। इस प्रकार का ट्रेडऑफ कम या ज्यादा अपेक्षित होना चाहिए, खासकर जब इस तरह के निम्न स्तर और व्यापक रूप से इस्तेमाल किए जाने वाले कोर मॉड्यूल के बीच चयन करना चाहिए। आपको अपनी उपयोग विशेषताओं के लिए peformance विशेषताओं को पूरा करना होगा, आमतौर पर, कोई चांदी की गोली नहीं है।

आप Google के TCMalloc पर भी देखना चाहते हैं जो काफी करीब है हालांकि मुझे लगता है कि जेमलोक सामान्य रूप से थोड़ा अधिक प्रदर्शन करने वाला है, साथ ही समय के साथ कम ढेर विखंडन भी बना रहा है।

+0

आपकी टिप्पणियों के लिए धन्यवाद प्रीट। मैं यह पता लगाने की कोशिश कर रहा था कि किसी के पास किसी अन्य मल्टीप्रोसेसर मशीन पर समान टिप्पणियां हैं। मैं पूरी तरह से आपसे सहमत हूं कि सटीक प्रदर्शन पूरी तरह से हार्डवेयर निर्भर होगा, हालांकि मैं सोच रहा था कि सीपीयू उपयोग का पैटर्न समान होना चाहिए यानी जेमलोक के लिए उच्च मल्टीप्रोसेसर एनवी में। – deb

1

एयरोस्पेइक ने हमारे नोएसक्यूएल डेटाबेस पर जेमलोक लागू किया, और सार्वजनिक रूप से v3.3.x के साथ एक साल पहले कार्यान्वयन जारी किया।बस आज Psi Mankoski ने an article on High Scalability प्रकाशित किया कि हमने क्यों और कैसे किया, और ग्लिबल मॉलोक की तुलना में प्रदर्शन में सुधार हुआ।

हमने वास्तव में राम उपयोग में कमी देखी क्योंकि जिस तरह से हम रैम विखंडन को कम करने के लिए जेमलोक की डीबगिंग क्षमता का उपयोग करने में सक्षम थे। उत्पादन वातावरण में, सर्वर% नि: शुल्क मेमोरी अक्सर "स्पाकी ग्राफ" थी, और जेमलोक के कार्यान्वयन से पहले 54% जितनी अधिक बढ़ी थी। कार्यान्वयन के बाद, आप 4 महीने की विश्लेषण अवधि में राम उपयोग में कमी देख सकते हैं। रैम% मुक्त मेमोरी "flatline" शुरू हुई और सर्वर नोड के आधार पर ~ 22-40% के बीच होवरिंग, कहीं अधिक अनुमानित हो।

जैसा प्रीट कहता है, समय के साथ बहुत कम विखंडन था, जिसका अर्थ है कम रैम उपयोग। इस तरह के एक बयान के पीछे Psi का लेख "पुडिंग में सबूत" देता है।

19

एक बुद्धिमान व्यक्ति ने सीपीपीकॉन पर कहा कि आपको प्रदर्शन के बारे में कभी अनुमान लगाने की आवश्यकता नहीं है। आपको इसके बजाय इसे मापना होगा। मैंने मल्टीथ्रेड किए गए लिनक्स एप्लिकेशन के साथ jemalloc का उपयोग करने का प्रयास किया। यह कस्टम अनुप्रयोग स्तर प्रोटोकॉल सर्वर (टीसीपी/आईपी पर) था। इस सी ++ एप्लिकेशन ने जेएनआई के माध्यम से कुछ जावा कोड का उपयोग किया (जावा के इस्तेमाल के 5% के करीब, और 95% बार जब यह सी ++ कोड का उपयोग करता था) मैं उत्पादन मोड में 2 अनुप्रयोग उदाहरण चलाता हूं। प्रत्येक में 150 धागे थे। glibc चलाने के 72 घंटों के बाद एक ने 900 एम मेमोरी का उपयोग किया, और jemalloc एक ने 2.2 जी स्मृति का उपयोग किया। मुझे महत्वपूर्ण CPU उपयोग अंतर नहीं देखा गया। वास्तविक प्रदर्शन (औसत ग्राहक अनुरोध समय) दोनों उदाहरणों के लिए समान था। तो, मेरे परीक्षण glibc में jemalloc बहुत बेहतर था। बेशक, यह मेरा आवेदन विशिष्ट है। निष्कर्ष: यदि आपके पास यह सोचने के कारण हैं कि विखंडन के कारण आपका एप्लिकेशन मेमोरी प्रबंधन प्रभावी नहीं है, तो आपको वर्णन किए गए एक जैसा परीक्षण करना होगा। यह आपकी विशिष्ट आवश्यकताओं के लिए एकमात्र विश्वसनीय सूचना स्रोत है। यदि jemalloc हमेशा बेहतर होता है कि glibc, glibcjemalloc अपने आधिकारिक आवंटक को बनाएगा। यदि glibc हमेशा बेहतर होता है, तो jemalloc मौजूद होना बंद कर देगा। जब प्रतियोगियों समानांतर में लंबे समय तक मौजूद होते हैं, तो इसका मतलब है कि प्रत्येक का अपना उपयोग आला होता है।

0

मैं सरल NoSQL डेटाबेस विकसित कर रहा हूं।
(https://github.com/nmmmnu/HM4)

jemalloc बनाम मानक malloc

जब मैं jemalloc, प्रदर्शन कमी है, लेकिन स्मृति "विखंडन" का उपयोग के साथ-साथ कम हो जाती है। जेमलोक भी चोटी पर कम स्मृति का उपयोग करता प्रतीत होता है, लेकिन अंतर 5-6% है।

स्मृति विखंडन के साथ मेरा क्या मतलब है निम्नानुसार है।

  • सबसे पहले मैं कुंजी मान युग्म के बहुत सारे (स्मृति के 5-7 जीबी)
  • तो मैं स्मृति के उपयोग को देखने का आवंटन।
  • फिर मैं सभी जोड़ों और किसी भी अन्य स्मृति को मेरे निष्पादन योग्य उपयोगों को हटा देता हूं। आवंटन का आदेश विलोपन के आदेश के समान है।
  • अंत में मैं फिर से स्मृति उपयोग की जांच करता हूं।

मानक मॉलोक में, उपयोग लगभग शिखर पर है। (मैं विशेष रूप से mmap स्मृति के लिए जाँच की और कोई भी नहीं है)।

जेमलोक उपयोग न्यूनतम है।


बोनस जानकारी - tcmalloc

पिछली बार मैंने tcmalloc साथ की जाँच की, यह वास्तव में बहुत तेजी से था - मानक malloc से अधिक शायद 10% सुधार।

शिखर पर, यह मानक मॉलोक की तुलना में कम स्मृति का उपभोग करता है, लेकिन जेमलोक से अधिक है।

मुझे स्मृति विखंडन के बारे में याद नहीं है, लेकिन यह जेमलोक परिणाम से बहुत दूर था।

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

  • कोई संबंधित समस्या नहीं^_^