Abstrct
مقداری زیادی از کارها به داخل زیر سیستم مدیرت حافظه در سریهای کرنل l inux.2.5 منتقل شده است و نسبت به تا (سیستم حافظه مجالس ) حالت پایداری بیشتری را در تنوعات زیادی از پارمان کاری دارد.
و همچنین بیشتر مسائل مقیاس پذیری حل شده و منجر به عملکرد بیشتر mamgement memory بر روی ماشینهای بزرگبر ( با ram بیش از 1GB یا دارای بیش از یک praccassor یا هر دو ) شده است.
بعضی از این تغییرات برای ماشینها ی کوچک نیز سودمند است و در سریهای کرنل 2..4 تقسیمات اصلی linux به طور گستردهای از کرنل mainline بخصوص از محیط um منشعب شده است.
این مسئله باعث به وجود آمدن مداوم مسائلی و تلاش مضاعف به هدر رفته در ویژگیهای پیاده سازی میشود سریهای 2.5 گشته ( در آنها هم هست ).
سریهای 2.4 تحت مدیریت andrew morton است که بنیان مستحکم برای پیشرفتهای آتی فراهم میآورد.
و همچنین پتانسیل بیشتری برای کار مشترک بیشتر ، این مقدار در صورت تغییرات که در سیستم 1inux um بهای 2.5 صورت گرفته است که به طور قابل ملاحظهای ماشینهای بزرگبر را فشرده میکند میکند و همچنین تغییراتی که برای آینده میشوند را در بر میگیرد که بیشتر آنها در حال حاضر به عنوان قطعات جدا موچود میشوند ماشینهای بزرگبر همچنین باید از عهده تعداد زیادی از فعالیتهای همزمان بر آیند که منظور من حد تا میباشد.
به منظور سادگی و صراحت و اختیار ما ، ماشین l A 32 با mode PAE با طرح حافظه فرمان را در این مقاله در نظر میگیریم این محاسبات بر روی یک سیستم 16-cpu numa-o
( ) گرفته است.
Lntrodueticn
اقتصاد بازار و رواج سیستمهای 32bit بزرگ را تحمیل میکند با وجود اینکه نرم افزار هم بوجود میآید گرجه chip های 64bit ارزان شروع به ظهور کردن اما آنها هنوز مانند سیستمهای بزرگ در دسترس نیستند اگر چه تکنیکها و دست آوردهای توصیف شده در این مقاله ، بدون هیچ هدفی تنها در این ماشینها کاربرد دارد
محیط مجازی erlobal kernel
شکل اساسی ماشینهای 3.2bit فقدان فضای آدرس دهی مجازی هم برای کاربرد و هم کرنل 3.2bit ما را محدود به 4Gb میکند هر فضای آدرس دهی پردازشهای کاربر فقط مربئط به همان فرآیند میشود اما فضای آدرس دهی کرنل ، erlobal است برای تعمین عملکرد مناست در فضای آدرس دهی کاربر با فضای آدرس دهی کرنل تقسیم میشود ( به اشتراک گذاشته میشود )
« شکل ْ1 »
انشعاب فضای آدرس دهی پیش فرض 0------
ممکن است که بتوان این انشعاب را تغییر داد اما اغلب مطلوب نیست بعضی از کاربردها نظیر بانکهای اطلاعاتی به مقدار خیلی زیادی فضای آدرس دهی برای پردازش نیاز دارند در صورتیکه کرنل نیازمند فضای زیادی برای ساختارهای اطلاعاتی خواص باشد.
اولین حافظه فیزیکی 896 mB به صورت 1:1 در فضای آدرس دهی erlobal مشترک نقاشی کند.
این دامنه حافظه به
عنوان حافظه پایین شناخته میشود ( zone-normal ) حافظه بیش از 896mB بعنوان حافظه بزرگ شناخته میشود ( zome-hiGihmem ) هرچه بیشتر حافظه فیزیکی به ماشین اضافه شود فشار بیشتری را بر محیط کرنل erlobal وارد آودرهایم ، کرنل استاندارد linux 2.4 از عهده مقادیر زیادی از حافظه بر میآید شاید در بهترین حالت به 4GB محدود شود اشتعابات inler price ، linux 2.4 با 16 GB تا 32GB حافظه کار میکند که بستگی به انشعاب دارد.
عنوان حافظه پایین شناخته میشود ( zone-normal ) حافظه بیش از 896mB بعنوان حافظه بزرگ شناخته میشود ( zome-hiGihmem ) هرچه بیشتر حافظه فیزیکی به ماشین اضافه شود فشار بیشتری را بر محیط کرنل erlobal وارد آودرهایم ، کرنل استاندارد linux 2.4 از عهده مقادیر زیادی از حافظه بر میآید شاید در بهترین حالت به 4GB محدود شود اشتعابات inler price ، linux 2.4 با 16 GB تا 32GB حافظه کار میکند که بستگی به انشعاب دارد.
Limux 2.5 از عهده حافظه ای تقریبآ 32GB بر میآیند متآسفانه بیشتر اطلاعاتی که در فضای آدرس دهی کرنل گذاشته شده است قابل تبادل نمیباشد و کرنل linux اغلب این اطلاعات را به طور شا بستهای تحت فشار حافظه خورد نمیکند بنابر این حالت شکست اغلب قابل تشخیص نمیباشد و حافظه متوقف میشود و سیستم hang میکند.
مصرف فضای اصلی ، فضای کرنل .
mem-map (physicol page cintrol structures ) .
slab caches partiulaly : - bupter-head - denlry-cache - inode-cache .
pagetables mem-mup یک آرایه از کنترل است که هر یک برای یک صفحه فیزیکی RAM در سیتم میباشد در یک ماشین 16 GB ، 19 درصد فضای آدرس دهی را میگیرد برای فضای آدرس دهی 64GB ، 48 درصد محل فضای کل که در اختیار داریم در بر میگیرد که فضای ناکافی را برای متن و اطلاعات کرنل نرمال باقی میگذارد در صورتی که ماشین boot شود نیز قابل استفاده نمیباشد.
Willian irwin و hugh dickins ، تکنولوژی را به نام c luster های صفحهای پیاده سازی میکنند که یک ساختار کنترلی صفحه را به وجود میآورد و بنابر این به شدت فضای گرفته شده را کاهش میدهد ( یک گروه8 صفحهای از 48 درصد فضابه 9 درصد کاهش مییابد.) Kmap کرنل دسترس مستقیم دائمی به حافظهپایین وارد اما نیازمند اجرای عملیات خاص برای نگاشت حافظه بالا میباشد حافظه بالا معمولآ یک صفحه 4 k را نگاشت میکند از طریق دو مکانیزم اصلی 1- kmap مداوم 2- kmap اتمی یک شماره وارد تا آزاد شدن ورودیها ، شماره به صفر نزول میکند و آنها به عنوان کثیف شناخته میشوند زمانیکه ما به انتهای این منبع میرسم تمام منابع با لبه صفر به عنوان تمیز علامت گذاری میشوند یک table elash در سیستم طلب میشود و با فرمان ممکن است دوباره استفاده شوند تمام این عملیات erlobal وقت یک قفل erlobal ( kmup - loch ) انجام میشوند.
Kmup اتمی تعداد کمی ورودی در هر cpu دارد هر کدام برای یکی از عملیات ویژه ( که ممکن است مجبود به انجام همزمان شوند بنابر این ورودی کافی نسبت ) برای استفاده از slot ، kmup اتمی یک ورودی t lb واحد باید flash شود موتها بر روی یک cpu .
این مسئله عملیات بدون قفل را مجاز کند و مدیریت اطلاعات محلی cup ( local data ) را نیز مجاز میکند اگر چه به خاطر طبیعت c pu local نگاشت ، احتمال s leep سیستم و یا انتقال به یک cpu دیگر به هنگام این نگاشت وجود ندارد.
مسئلهای که در آن k miup یا به وجود میآید منجر به استفاده خیلی زیاد و شدت سرعت پایین میآید page tsbler page table آدرسهای مجازی بردازش را به آدرسهای فیزیکی ماشین نگاشت میدهد برای ماشین IA32 با PAE هر ورودی PTE که یک صفحه 4K را کنترل میکند 8bit فضا را اشغال میکند..
میشود به عبارت دیگر ، بار اضافی PTE 2درصد RAM فیزیکی میباشند اگر ما هیچ اشتراکی اجرا نگذاشته باشیم اگر چه در بیشتر بارهای کاری مقادیر قبل ملاحضان از فضا بین فرآیند ها تقسیم میشود یا در کتابخانههایی تقسیم شده با در سگمنتهای حافظه تقسیم شده بخصوص بارهای کاری datnbase DB اغلب از شگفتیهای تقسیم شدهزیادی به عنوان مثال 2erB استفاده میکند که بین تعداد زیادی از فرآیندها تقسیم میشود زمانیکه خود حافظه بین فرآیندها تقسیم میشوند psgetable ما دو برابر میشود.
یک copy برای هر فرآیند.
بنابر این برای 5000 فرآیند که نقشه سگمنتی 2 er B را تقسیم میکند بار سرباز PTE برای آن سگمنت 20erB از حافظه است.
( یعنی باز اضافی 1000 برابر فضای مصرف شده است ) با تقسیم سطح PTE ، pngetable توسط dave mecracken پیاده سازی شد این مسئله ما را قادر میسازد که نگاشتهای مسخصهای را بر روی محیط های بزرگی ، بر اساسهای مختلف تقسیم کنیم.
که از این طریق بار اضافی نگاشت را برای آن مورد خاص از 2 0erB به 4 erB کاهش میدهیم.
یک منبع استاتیک حافظه که برای صفحات زیادی نگه داشته شده است در هنگام bootبه وجود میآید و به کاربرهایی که آنرا از طرق یک f lag تقاضا میکند به حافظه اشتراکی ساخته شده.
کا ر آتی برای ایجاد یک مکانیزم انعطاف پذیرتر طراحی شده است که در آن نگه داشتن یک تعداد از صفحات stutic صد سوری page tsble هایی که به طور بالقوه بر روی سیستمها قابل استفاده هستند ممکن است سطح سوم p age table را داخل محیط محافظه بالا قرار دهیم بجای اینکه در حافظه e rlabal kevnel قرار دهیم.
با وجود اینکه مسئله از نظر مصرف فضا بهتر است.
اما به قیمت زیاد شدن زمان میشود اگر چه پیاده مسیرهایی مدرن page tuble های حافظه از kmup اتمی استفاده میکند.
هزینه بارگذاری نصب نگاشتها برای دسترسی چنین استفاده سنگینی گران میباشد.
بخصوص برای بارهای کاری که فرآینده را به طور مداوم ایجاد و نابود میکند.
برای تکامل kermel بار اضافی highpte افزایش در حدود 8 درصد زمان سیستم بود.
UKVA کمبود فضای مجازی بر روی I A32 باعث نگاشت مستقیم هر چیزی مخصوصآ چیزهایی که در حافظه بالا قرار دارد ما مکانیزمهایی را برای انجام این مسآله به طور مداوم با kmupc وkmop-Atomic اما هر دوی این مکانیزمها بار اضافی قابل توجهی را مدیریت dutu base و table fladhing تحمیل میکند.
برای بارهای کاری با تعداد زیادی فرآیند ، یکی از مصرف کنندهای حافظه مجازی ،pagetable ما میباشند بخصوص صفحات PTE ، Button lewel ، یک انتخابی ( high - PTE ) در کرنل وجود دارد برای گذاشتن این صفحات در حافظه بالا و نگاشت آنها از طریق kmup - Atomic در هنگام نیاز ، خواهند بود اما در یک محیط pre-process بجای یک محیط erlobal بنابر این عملکرد مناسب بدون اتلاف مقادیر زیادی از حافظه مجازی انجام میشود.
UKVA یعنی user - kernel virtual addressiny یک محیط حافظه کرنل pre-piocess به وجود میآورد.
همان VM در ویرایش به صفحات فیزیکی نگاشت می شوند درست شبه آدرسهای فضایی کاربر ، اما به پشتیبانی فضای کرنل ، یک پیاده سازی جاری این محیط را در محیط user فعلی مکان دهی میکند اگر چه پیاده سازی باعث مشکل شدن مکان دهی چیزهایی میشود پیاده سازی که در این جا توصیف میشود محیط داخل محیط مجازی کرنل جاری ، اقرار میدهد و بر روی بر IA32 با PAE موجود دارای صفحات 4k میباشد که هر کدام توسط PTE ، 8 یاتبی کنترل میشوند هر فرآیند فقط نیازمند u kva کافی برای نگاشت در pagetable خودش میباشد.
4erB/(4k/page)=1m pages 1mpages*8bytes/pte=8mBor virtul spase for ptes.
در این مثال این فضا از 4 KB تا 8mB در 4erB میباشد.
اگر چه محل این محیط واقآ مهم نیست.
Lintializstion از آنجایی که محیط ukva لوازم اولیه برای دستیابی به تمام صفحات PTE میباشد باید برای تمام طول عمر pagotuble های فرآیند موجود باشد به این دلیل مقدار اولیه برای راه اندازی در این pgd - allec اتفاق میافتد و به طور همزمان با ایجاد یک ورودی pagetable سطح بالا.
در IA32 یک ورودی pmd و pte به یک اندازهاند و ptrs-per -pmd با ptrs - per - pte برابر است.
همچنین هر بار که این صفحه PTE مکان دهی میشود یک ورودی pnd به آن اشاره میکند.
هر بار که شما بخواهید یک صفحه PTE مکان دهی شود را نگاشت کنید یک ورودی PTE ساخته میشود.
( highpte ere kmap to do this ) Runtime انبوه کار ukva در PTE-alloc-mupc انجام میشود در نگهداری ارتباط 1:1 هر بار که یک pmd-populntec انجام میشود یک PTE ، ukva است.
از آنجایی که مجیط ukva به طور مجازی مجاورت دارد میتواند درست مانند یک آرایه از هر PTE در سیستم در دستس قرار گیرد PTE کنترل کننده اولین صفحه حافظه در ابتدای فضای را کنترل میکند آن همیشه جایی که PTE برای هر آدس مجازی داده شده نگامت میشود شناخته میشود.
و این همچنین بدان معنی است 4 صفحه ukva PTE خودشان به فضاهای شناخته شده ثابتی نگاشته میشوند دومین متد زمانیکه از PTE- allocate-mupc خواسته میشود یک PTE برای فرآیند دیگر مکان دهی کند استفاده میشود از آنجایی که ukva تنها شامل pagetable های فرآیند جاری میباشد pagetable های یک فرآیند دیگر باید در مسیر قرار گیرند و ورودیهای خاصی ساخته شود در طول قرار گرفتن در مسیر صفحات u kva PTE باید از kmup-atomic به صورتی که آنها بتوانند جایگزین شوند نگاشت داده میشوند.
Hot & cold pages با افزایش سرعت cpu به سرعت حافظه در طول زمان و تغییر در معماری cpu به شیوههای نظیر pipelininy ، بهره برداری مناسب از cpu های گردازشگر به طور فرآیندهای اهمیت مییابد مکانیزم صفحات Hot& celd در linux 2.5 راه مهمی را برای کمک به افزایش کارایی data cadie به وجود میآورد این برای سیستمهای up مناسب است اما حتی سودمندی زیادی بر روی smp به وجود میآورد برای هر cpu در سیستم برای هر محدودهای از مفهوم کلی این است که صفحاتی که درصف hot هستند caehe hot بر روی آن cpu و صفحاتی که در صف cold اند cnder cold بر روی آن cpu انجام شد.
فقط صفحات مربته صفر ( گروههای تک صفحهای ) در این صفحات نگه داشته میشوند مکان دهی مرتبه بالاتر ( گروههای خیز صفحهای ) به طور مستقیم توسط budy allocator نگه داشته میشوند.
صف hot به عنوان صفحات lifo stuck آزاد شده و توسط free-pagesc فرمان مدیریت میشود و به hot stack هول داده میشوند.
میزان کردن بعدآ در این محیط مورد نیاز است cold بطور ابتدایی فقط به عنوان یک مکانیزم دستهای برای تخصص های صفحهای عمل میکند این برای صفحاتی که در ابتدا توسط cup سئوال شده لمس نمیشوند.
در زیر مقایسهای بین pradile ها یک با کاری معادل ( کاپایل kernel ) با و بدون مکانیزم صفحات hot & celd در کرنل آمده است با اندازه گیری برشهای زمانی که در هر روتین صرف شدهاند و اینکه کدام روتینها بیشترین تغییر را دارا میباشند آنهایی که با علامت + نشان گذاری شدهاند با صفحات&foeld hot گرانتر میشوند آنهایی که با علامت منفی (-) نشانه گذلری شدهاند ارزانتر میشوند 17.5 % کاهش کل در تعداد مجموع fich های صرف شده مشاهده میشود page relaim درverion 2.5 لبتهای lru از حالت erlobal به حالت perzone تغییر شکل داده شدهاند که باعث ساده شدن آزاد کردن یک نوع خاص از حافظه ( مثال zone- normal ) بدون تآثیر گذاشتن بر انواع دیگر میشود همچنین باعث شکستن قفلهای erlobal و کاهش ترافیک خطی cross-node برای ماشینهای N.U.M.A.
میشود.
در زیر مهمترین المانها از بانک اطلاعاتی profile ، کرنل 2.4.18.
که کامیایل کرنل را بر روی یک 19.way.Q میشود.
از صفحه 61 قسمت سمت راست نوشته شود.
{2763 -text -lock - dcache } 2499-text-lock-swap} } swap - leck - teot ورودی است در pagemap - lru - lock .
یکی از قفلهای erlobal اصلی در VM ، pagemup - lru - lock بوده پیاده سازی pagevec توسط Andrew morton مجادله بر روی آنرا تا %98 توسط دستهبندی عملیات صفحهها با هم به شکل " pagevecs " - vectors از صفحات که میتوانستند به عنوان گروههایی کارآمدتر باهم عمل کنند.
Rmup با وجود اینکه استفاده از مکانیزم rmup نسبتآ پایدار مانده است.
متد نگهداری اطلاعات برای نگاشت معکوس منبعی ، از مشکلات و مباحثات شده است.
کد 2.5 جاری از 2.5.68 مکانیزمی به نام pte-chains را استفاده میکنند که برای هر صفحه فیزیکی یک بست متصل شدهاشاده گرما را به ورودیهای pte فرآیندهایی که هر صفحه را نگاشت میکند نگهداری میکنند.
این ذخیرههای pte چند شکل دارند ؟
.
locking .
space consumption .
time consun tion قفل گذاری در ابتدا به عنوان یک قفل جهانی عمل میکرد که با بدترین قفلهای VM جهان موجود به اشتراک میگذاشت این مسئله باعث مباحثه عظیمی در مورد قفل شد همانطور که در جدول 1 ( صفحه 63 ) میبینید.
مشکل با pte-chainsمصرف در فضاست.
یک لیست اتصالی واحد ساده چهار بابت در هر ورودی برای اشاده گر pte و چهار بابت در هر ورودی برای اشاره گر به ورودی بعدی استفاده میکند.
دو متد برای کم ترین این هستند استفاده میکنند.
صفحات دارای تنها یک نگاشت واحد میتوانند از " page-direct " به جای ذخیره گرفتن اشاره گر به یک لیست اتصالی در صفحه ساختاری بکار برده شوند ما از فضای مشابهی برای اشاره مستقیم به pta با استفاده از pta union که صفحه ساختاری تعریف میشود استفاده میشود.
{ struct pte - chain chain Pte - adlr -t direct Pte } و این سوئیچ توسط flag ، PER -divert کنترل میشود.
2- لیستها توسط cache-line گروه بندی میشوند که باعث میشوند چندین اشاره گر pte در یک " list next " وجود داشته باشد نه تنها باعث کاهش اندازه لیست اتصالی با نصف اندازه قبلاش میشود.
اینکه مرکز بت اطلاعات DB را افزایش میدهد.
(شکل صفحه63 figure 2 ) این مثال را با 5000 فرآیند که سگمنت حافظه 2erb را به اشتراک میگذارند در نظر میگیریم نه تنها ما اکنون 20 erB از page-tulole داریم 10 MB از pte-cains نیز داریم این کار ساده نسبت به منظور انتقال زنجیره ها به حافظه بالا ، اشاره گرمای "next element" باید بصورت آردسهای فیزیکی بجای امال آنها احتیاج به نگاشته شدن در آدرسهای مجازی قبل از استفاده دارند که این یک براشه گران قیمت برای لیستهای اتصال میشود.
آخرین اما نه کمترین مشکلات هست اتلاف زمانی برای صفحه استفاده شده و برای هر فرآیند استفاده کننده آن ما باید یک قفل گذارده و ورودی صفحه را ایجاد کنیم ( با استفاده از یک عملیات اتمیک گران قیمت ) ، بعدتر از آن اینکه زمانی که نگاشت را از بین میبریم باید همان قفل را بگذاریم و سپس از pte-chaine عبود کنیم در جستجوی آن المان برای آزاد کردن حتی برای یکبار 128 بر SDET ، پروفایل کرنل توابع rmap را به این صورت نشان میدهیم : صفح 63 قسمت سمت راست.
86159 page-remove-rmup 38690 puge-add-rmup مشکل بخصوص زیر یک بار کاری مانند SDIT که ترافیک fork/exec/exit ایجاد میکند زیاد میشود که نگاشتها بصورت متداوم ساخته و از بین میروند من این مشکل را بنیادی با یک رویکرد صفحهای میبینم و یک عملیات pre-page و بنابر این بسیار گران است حتی برای یک کامپایل کرنل ساده page-rmove-rmove هنوز گزانترین تابع در کل کرنل است : صفحه 64 قسمت سمت چپ بالای صفحه 23222 page-remove-rmup rmup shadow pages ingo molner یک متد rmup پیشنهاد داده است که من rmup sladow pages مینامم که بعضی از مشکلات با pte-chains حل میکند اما مبنایش در صفحه است در هنگام نوشتن هیچ تخصیص فضا در دسترس نیست اما بعضی از خواص ممکن است توسط آنالیست مشخص شود.
یکی از مزایای اصلی متد rmup shadow page این است که بانک اطلاعاتی rmup میتواند آسانتر به محدوده بالا منتقل شود اگر چه این بدون هزینه نسبت ، هر صفحه در دسترس قرار گرفته توسط kmup نگاشته شود که برای صفحات pte گران هستند.
با وجود اینکه rmup shadow page بعضی از مشکلات pte-chains را حل کند هنوز page-baseo است بنابراین هنوز نیاز به مقدار زیادی اطلاعات دارد و بنابر این مشکلات اصلی زمان و فضا و غیر قابل حل به نظر میرسند اگر چه انتقال chuins به حافظه بالا به صرفه باشد.
شکل صفحه 64