हार्डवेयर (विशेष रूप से, एमएमयू , जो सीपीयू का हिस्सा है) यह निर्धारित करता है कि पृष्ठ आकार क्या संभव है। प्रोसेसर रजिस्टर आकार से कोई संबंध नहीं है और केवल पता स्थान के आकार का एक अप्रत्यक्ष संबंध है (इसमें एमएमयू दोनों निर्धारित करता है)।
लगभग सभी आर्किटेक्चर 4kB पेज के आकार का समर्थन करते हैं। कुछ आर्किटेक्चर बड़े पृष्ठों का समर्थन करते हैं (और कुछ छोटे पृष्ठों का भी समर्थन करते हैं), लेकिन 4kB एक बहुत ही व्यापक डिफ़ॉल्ट है।
लिनक्स दो पृष्ठ आकारों का समर्थन करता है:
- सामान्य आकार के पृष्ठ, जो मुझे लगता है कि सभी आर्किटेक्चर पर डिफ़ॉल्ट रूप से 4kB हैं, हालांकि कुछ आर्किटेक्चर अन्य मूल्यों की अनुमति देते हैं, जैसे ARM64 पर 16kB या IA64 पर 8kB, 16kB या 64kB । ये एमएमयू (जिसे लिनक्स पीटीई कहते हैं ) पर वर्णनकर्ताओं के सबसे गहरे स्तर के अनुरूप हैं ।
- विशाल पृष्ठ , यदि संकलित किया गया है (
CONFIG_HUGETLB_PAGE
आवश्यक है, और CONFIG_HUGETLBFS
अधिकांश उपयोगों के लिए भी)। यह एमएमयू वर्णनकर्ताओं के दूसरे सबसे गहरे स्तर (जिसे लिनक्स पीएमडी कहता है) से मेल खाता है (या कम से कम यह आमतौर पर होता है, मुझे नहीं पता कि यह सभी आर्किटेक्चर पर है)।
पृष्ठ का आकार मेमोरी उपयोग, मेमोरी उपयोग और गति के बीच एक समझौता है।
- एक बड़े पृष्ठ के आकार का अर्थ है कि जब पृष्ठ का आंशिक रूप से उपयोग किया जाता है, तो अधिक बर्बादी होती है, इसलिए सिस्टम स्मृति से बाहर चला जाता है।
- एक गहरी MMU डिस्क्रिप्टर लेवल का मतलब है पेज टेबल के लिए अधिक कर्नेल मेमोरी।
- एक गहरी MMU डिस्क्रिप्टर स्तर का अर्थ है पृष्ठ तालिका ट्रैवर्सल में अधिक समय बिताना।
अधिकांश अनुप्रयोगों के लिए बड़े पृष्ठ के आकार छोटे हैं, जबकि लागत पर्याप्त है। यही कारण है कि अधिकांश सिस्टम केवल सामान्य आकार के पृष्ठों का उपयोग करते हैं।
आप getconf
उपयोगिता या C फ़ंक्शन के साथ अपने सिस्टम पर (सामान्य) पृष्ठ आकार को क्वेरी कर सकते हैं sysconf
।
$ getconf PAGE_SIZE
4096
विशाल पृष्ठों का उपयोग करने के लिए वहां hugetlbfs
फाइलसिस्टम और mmap
पिंग फ़ाइलों को माउंट करने की आवश्यकता होती है ।