2012-08-30 24 views
8

में NUMA अगली-स्पर्श नीति है जब हम NUMA सिस्टम पर काम करते हैं, तो स्मृति वर्तमान NUMA नोड से स्थानीय या दूरस्थ रिश्तेदार हो सकती है। स्मृति अधिक स्थानीय एक "पहला स्पर्श" नीति (बाध्यकारी रणनीति नोड के लिए डिफ़ॉल्ट स्मृति) है बनाने के लिए: http://lse.sourceforge.net/numa/status/description.htmlक्या आधुनिक लिनक्स

डिफ़ॉल्ट मेमोरी बाइंडिंग यह महत्वपूर्ण है कि उपयोगकर्ता कार्यक्रमों 'स्मृति पर आवंटित किया जाता है उस सीपीयू वाले एक नोड के पास जिस पर वे चल रहे हैं। इसलिए, डिफ़ॉल्ट रूप से, पृष्ठ दोष पृष्ठ-दोषकारी CPU युक्त नोड से स्मृति से संतुष्ट होते हैं। चूंकि पृष्ठ को छूने वाला पहला सीपीयू सीपीयू होगा जो पेज को दोष देता है, इस डिफ़ॉल्ट नीति को "पहला स्पर्श" कहा जाता है।

http://techpubs.sgi.com/library/dynaweb_docs/0640/SGI_Developer/books/OrOn2_PfTune/sgi_html/ch08.html

डिफ़ॉल्ट नीति पहले स्पर्श कहा जाता है। इस नीति के तहत, प्रक्रिया जो पहले छूती है (जो है, लिखती है, या पढ़ती है) स्मृति के एक पृष्ठ को उस नोड में आवंटित किया जाता है जिस पर प्रक्रिया चल रही है। यह नीति अनुक्रमिक कार्यक्रमों और कई समांतर कार्यक्रमों के लिए भी अच्छी तरह से काम करती है।

कुछ अन्य गैर-स्थानीय नीतियां भी हैं। कुछ NUMA नोड में मेमोरी सेगमेंट के स्पष्ट कदम की आवश्यकता के लिए एक फ़ंक्शन भी है।

लेकिन कभी-कभी (एकल अनुप्रयोगों के कई धागे के संदर्भ में) यह "अगली स्पर्श" नीति के लिए उपयोगी हो सकता है: कुछ फ़ंक्शन को कुछ मेमोरी क्षेत्र (100 एमबी तक) "कुछ डेटा के साथ" अनबिंड "करने के लिए कॉल करें और पुनः लागू करें इस क्षेत्र पर "पहले स्पर्श करें" जैसे हैंडलर जो थ्रेड तक पहुंचने के नोमा नोड को अगले स्पर्श (पढ़ने या लिखने) पर पृष्ठ माइग्रेट करेगा।

यह नीति उपयोगी है जब कई धागे द्वारा संसाधित करने के लिए बहुत बड़ा डेटा होता है और इस डेटा तक पहुंच के विभिन्न पैटर्न होते हैं (उदाहरण के लिए पहला चरण - थ्रेड के माध्यम से कॉलम द्वारा 2 डी सरणी विभाजित करें; दूसरा - एक ही डेटा को विभाजित करें पंक्तियों से)।

इस तरह की नीति MADV_ACCESS_LWP ध्वज के साथ madvice के माध्यम से 9 के बाद से सोलारिस में समर्थित किया गया, गिरी है कि अगले LWP निर्दिष्ट पता श्रेणी सबसे ज़्यादा उस तक पहुँच जाएगा छूने के लिए बताएँ

https://cims.nyu.edu/cgi-systems/man.cgi?section=3C&topic=madvise

MADV_ACCESS_LWP इसलिए कर्नेल को मेमोरी और अन्य संसाधनों को रेंज और उसके अनुसार एलडब्ल्यूपी आवंटित करने का प्रयास करना चाहिए।

था (मई 2009) "आत्मीयता-ऑन-अगले स्पर्श" नाम लिनक्स कर्नेल के लिए पैच, http://lwn.net/Articles/332754/ (thread) लेकिन जैसा कि मैं समझता हूँ कि यह मुख्य लाइन में अस्वीकृत किया गया था, है ना?

इसके अलावा ली शेरमेरहोर्न के "माइग्रेट_ऑन_फॉल्ट" पैच http://free.linux.hp.com/~lts/Patches/PageMigration/ थे।

तो, प्रश्न: क्या वर्तमान वेनिला लिनक्स कर्नेल में NUMA के लिए कुछ अगली-स्पर्श है या कुछ प्रमुख कांटे में, जैसे RedHat linux कर्नेल या ओरेकल लिनक्स कर्नेल?

+0

इस पेपर को जांचें - https://hal.inria.fr/inria-00358172/file/article.pdf "लिनक्स पर मल्टीथ्रेडेड अनुप्रयोगों के लिए उच्च-प्रदर्शन मेमोरी माइग्रेशन सक्षम करना", ब्रिस गोगलिन, नाथली फुरमेंटो, 200 9 "कार्यान्वयन mprotect के माध्यम से उपयोगकर्ता-स्थान में अगली-स्पर्श नीति और सेगमेंटेशन गलती के लिए सिग्नल हैंडलर "। अगली-स्पर्श का कार्यान्वयन उनके एमएमआई/मार्सेल https://runtime.bordeaux.inria.fr/MaMI//https://runtime.bordeaux.inria.fr/marcel/ का हिस्सा है। – osgx

उत्तर

1

मेरी समझ को देखते हुए, वेनिला कर्नेल में कुछ भी समान नहीं है।numactl में पृष्ठों को मैन्युअल रूप से माइग्रेट करने के लिए फ़ंक्शन हैं, लेकिन यह संभवतः आपके मामले में सहायक नहीं है। (NUMA नीति विवरण दस्तावेज़ीकरण/vm/numa_memory_policy में है यदि आप स्वयं को देखना चाहते हैं)

मुझे लगता है कि उन पैच को विलय नहीं किया गया है क्योंकि मुझे वर्तमान कर्नेल में दिखाई देने वाले प्रासंगिक कोड स्निपेट्स में से कोई भी दिखाई नहीं देता है।

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