کارایی حافظه

کارایی حافظه

حافظه اصلی سیستم، دستورالعمل‌های برنامه و هسته، داده های کاری آنها و حافظه پنهان سیستم فایل را ذخیره می کند. در بسیاری از سیستمها ، ذخیره ثانویه برای این داده ها ، دستگاههای اصلی ذخیره سازی - دیسک ها - هستند که کندتر عمل می کنند. پس از پر شدن حافظه اصلی ، سیستم ممکن است شروع به تبادل داده بین حافظه اصلی و دستگاه های ذخیره سازی کند. این یک روند آهسته است که اغلب به یک تنگنای سیستم تبدیل شده و کارایی را به طور چشمگیری کاهش می دهد. این سیستم ممکن است بزرگترین فرآیند مصرف کننده حافظه را خاتمه دهد.

سایر فاکتور و عوامل کارایی که باید مورد توجه قرار بگیرد، شامل هزینه پردازنده برای تخصیص و آزادسازی حافظه، کپی حافظه و مدیریت نگاشت‌های فضای آدرس حافظه است. در معماری های چند سوکت ، محل حافظه می‌تواند به یک عامل تبدیل شود چراکه حافظه متصل به سوکت های محلی تاخیر دسترسی کمتری نسبت به سوکت های راه دور دارند.
اصطلاحات بکاررفته در این مقاله عبارت است از:

 حافظه اصلی :  همچنین حافظه فیزیکی نیز نامیده می شود. این ناحیه، ذخیره سریع اطلاعات رایانه را توصیف می کند که معمولا به DRAM ارائه می‌شود.

 حافظه مجازی :  انتزاعی از حافظه اصلی است که تقریبا بینهایت می‌باشد. حافظه مجازی یک حافظه واقعی نیست.

 حافظه مقیم :  حافظه ای که در حال حاضر در حافظه اصلی می‌باشد.

  فضای آدرس :  زمینه حافظه برای هر فرآیند و برای هسته فضای آدرس مجازی وجود دارد.

 بخش :  قسمتی از حافظه است که برای یک هدف خاص، مانند ذخیره صفحات قابل اجرا یا نوشتن، علامت‌گذاری شده است.

  OOM:  هنگامی که هسته، حافظه کمِ موجود را تشخیص می دهد، خارج از حافظه است.

 صفحه :  واحد حافظه ، همانطور که توسط سیستم عامل و CPUها استفاده می‌شود. از نظر تاریخی، 4 یا 8 کیلوبایت است. پردازنده‌های مدرن از سایز چند صفحه‌ای برای اندازه های بزرگتر پشتیبانی می‌کنند.

 خطای صفحه :  دسترسی به حافظه نامعتبر است که البته هنگام استفاده از حافظه مجازی در صورت تقاضا، به طور طبیعی اتفاق می افتد.

 صفحه بندی :  انتقال صفحات بین حافظه اصلی و دستگاه های ذخیره سازی.

  مبادله :  انتقال کل فرایندها بین حافظه اصلی و دستگاههای مبادله است. لینوکس اغلب از مبادله برای اشاره به صفحه بندی به دستگاه مبادله (انتقال صفحات مبادله) استفاده می‌کند. در این جا از تعریف اصلی استفاده شده است: مبادله برای کل فرایندها است.

  فضای مبادله :   یک ناحیه روی دیسک برای داده های ناشناس صفحه بندی شده و فرآیندهای جایگزین شده می باشد. ممکن است ناحیه ای در دستگاه ذخیره سازی باشد که به آن دستگاه مبادله فیزیکی نیز می گویند یا سیستم فایل، که فایل مبادله نامیده می شود. برخی ابزارها از واژه swap برای اشاره به حافظه مجازی (که گیج کننده و نادرست است) استفاده می کنند.

موارد زیر گزیده ای از مفاهیم مهم در مورد حافظه و کارایی حافظه است:

حافظه مجازی

حافظه مجازی یک انتزاع است که برای هر فرآیند و هسته؛ فضای آدرس بزرگ، خطی و خصوصی خود را فراهم می‌کند. این مهم توسعه نرم افزار را ساده کرده و حافظه فیزیکی را برای سیستم عامل مدیریت می کند. همینطور از چند وظیفه ای پشتیبانی می کند زیرا فضاهای آدرس مجازی با طراحی و همچنین اشتراک جداگانه طراحی شده اند و بهمین دلیل حافظه در حال استفاده می تواند بیشتر از حافظه اصلی گسترش یابد.

در تصویر زیر می توانید نقش حافظه مجازی را برای یک فرآیند برروی یک دستگاه دارای فضای مبادله (ذخیره سازی ثانویه) ملاحظه نمایید. یک صفحه از حافظه نشان داده می‌شود چراکه اکثر پیاده سازی های حافظه مجازی، مبتنی بر صفحه هستند.

فضای آدرس فرآیند توسط زیرسیستم حافظه مجازی به حافظه اصلی و دستگاه مبادله فیزیکی نگاشت می‌شود. صفحات حافظه را می‌توان در صورت نیاز توسط هسته بین آنها جابجا کرد، فرآیندی که صفحه بندی نامیده می‌شود. این امر به هسته اجازه می دهد تا حافظه اصلی را، بیش از حد، مشترک کند.

هسته ممکن است محدودیتی برای اشتراک بیش از حد اعمال کند. در هسته های مبتنی بر Solaris این اندازه برابر است با اندازه حافظه اصلی و دستگاه های مبادله فیزیکی. هسته در تخصیص هایی که سعی می کنند از این حد فراتر رود، شکست می‌خورد، مانند خطای “out of virtual memory” که البته در ابتدا می‌تواند باعث سردرگمی شوند زیرا حافظه مجازی خود یک منبع انتزاعی است.

لینوکس را می توان به گونه ای پیکربندی کرد که از همین رفتار تبعیت نموده و در عین حال به سایر رفتارها نیز اجازه دهد، از جمله عدم محدودیت در تخصیص حافظه. این امر overcommit نامیده می‌شود که بعد از عناوین صفحه بندی و تقاضای صفحه بندی توضیح داده می‌شوند.

صفحه بندی

صفحه بندی حرکت صفحات به داخل و خارج از حافظه اصلی است که به ترتیب به عنوان صفحه ورودی و صفحه خروجی نامیده می‌شود. این مهم ابتدا در کامپیوتر اطلس 1962 معرفی گردید که باعث موارد زیر می‌شود:

 برنامه های بزرگتر از حافظه اصلی برای اجرا

 حرکت کارآمد برنامه ها بین حافظه اصلی و دستگاه های ذخیره سازی

این توانایی ها امروزه نیز صادق است. برخلاف تعویض کل برنامه ها، صفحه بندی یک روش دقیق برای مدیریت و آزادسازی حافظه اصلی است زیرا واحد اندازه صفحه نسبتاً کوچک است (4KB). صفحه بندی با حافظه مجازی (paged virtual memory) از طریق BSD به یونیکس معرفی گردیده و استاندارد شد.

صفحه بندی سیستم فایل

صفحه بندی سیستم فایل در اثر خواندن و نوشتن صفحات در پرونده های دارای حافظه ایجاد می‌شود. این رفتار عادی برای برنامه هایی است که از نگاشت های حافظه فایل یعنی mmap() استفاده می‌کنند و همچنین در سیستم‌های فایلی که از حافظه پنهان صفحه استفاده می‌کنند. در صورت نیاز ، هسته می تواند حافظه را با صفحه بندی کردن برخی از موارد آزاد کند. اینجاست که اصطلاحات کمی پیچیده می شود: اگر صفحه سیستم فایل در حافظه اصلی تغییر کرده باشد ("کثیف ")، صفحه خروجی نیاز به نوشتن روی دیسک دارد. اگر در عوض، صفحه سیستم فایل تغییر نکرده باشد ("تمیز ") ، صفحه خارج شده فقط حافظه را برای استفاده مجدد فورا آزاد می کند، زیرا یک نسخه قبلاً روی دیسک وجود دارد. به این دلیل ، اصطلاح page-out به این معنی است که یک صفحه به خارج از حافظه منتقل شده است. این ممکن است شامل نوشتن به یک دستگاه ذخیره سازی باشد یا نباشد.

صفحه بندی ناشناس

صفحه بندی ناشناس شامل داده هایی است که برای پردازش های خصوصی است: انباشته و پشته های فرآیند. این واژه، ناشناس نامیده شده است زیرا هیچ مکان نامگذاری شده در سیستم عامل ندارد (یعنی حاوی نام مسیر سیستم فایل نیست).

صفحه خروج ناشناس نیاز به انتقال داده‌ها به دستگاه‌های مبادله فیزیکی یا تعویض فایل‌ها دارد. لینوکس از واژه swapping برای اشاره به این نوع صفحه بندی استفاده می‌کند.

صفحه بندی ناشناس به کارایی صدمه می زند و بنابراین از آن به عنوان صفحه بندی "بد" یاد می شود. هنگامی که برنامه‌ها به صفحات حافظه ای که صفحه بندی شده اند دسترسی پیدا می کنند، روی ورودی/خروجی دیسک که برای خواندن آنها به حافظه اصلی لازم است‌، مسدود می‌شوند. این یک صفحه ناشناس است که تأخیر همزمان را به برنامه معرفی می‌کند. صفحه های ناشناس ممکن است به طور مستقیم برروی کارایی برنامه تأثیر نگذارند چراکه می‌توانند توسط هسته به صورت غیرهمزمان انجام شوند.

کارایی زمانی مطلوب است که صفحه‌بندی (یا مبادله) ناشناس وجود نداشته باشد. این را می توان با پیکربندی برنامه ها برای حفظ حافظه اصلی موجود و نظارت بر اسکن صفحه، استفاده از حافظه و صفحه بندی ناشناس، برای اطمینان از عدم وجود دیگر شاخص‌های کمبود حافظه به دست آورد.

تقاضای صفحه بندی

همانطوریکه در تصویر مشاهده می‌کنید، سیستم عامل‌هایی که از تقاضای صفحه بندی پشتیبانی می‌کنند، صفحات حافظه مجازی را به حافظه فیزیکی تقاضا نگاشت می‌کنند. این امر باعث می‌شود تا پردازنده نتواند نگاشت‌ها را تا زمانی که واقعاً مورد نیاز باشد به تعویق بیندازد، به جای آنکه ابتدا محدوده ای از حافظه اختصاص داده شود.

دنباله نمایش داده شده در تصویر فوق با نوشتن برروی یک حافظه مجازی به تازگی اختصاص داده شده شروع می‌گردد و در نتیجه نگاشت‌های درخواست به حافظه فیزیکی منتقل می‌شود. خطای صفحه زمانی رخ می دهد که نگاشت صفحه از حافظه مجازی در دسترس نباشد.

اولین قدم می‌تواند خواندن باشد، در مورد یک صفحه نگاشت شده، که حاوی داده است اما هنوز به فضای آدرس فرآیند نگاشته نشده است. اگر بتوان نگاشت را از صفحه دیگری در حافظه تأیید کرد، خطای جزئی نامیده می‌شود. این ممکن است برای نگاشتن یک صفحه جدید از حافظه موجود، در طول رشد حافظه فرآیند (مطابق تصویر) رخ دهد. همچنین ممکن است برای نگاشت به یک صفحه موجود دیگر، مانند خواندن یک صفحه از یک کتابخانه مشترک نگاشت شده، رخ دهد. خطاهای صفحه ای که نیاز به دسترسی به دستگاه ذخیره سازی دارند (در این شکل نشان داده نشده است)، همچون دسترسی به یک فایل نگاشت نشده در حافظه ذخیره شده، خطاهای عمده نامیده می‌شوند. نتیجه مدل حافظه مجازی و تخصیص تقاضا این است که هر صفحه از حافظه مجازی ممکن است در یکی از حالات زیر باشد:

A.تخصیص داده نشده

B.تخصیص یافته، اما بدون نگاشت

C.اختصاص داده شده، و به حافظه اصلی نگاشت شده است(RAM)

D.اختصاص داده شده و به دستگاه swap فیزیکی نگاشت شده است.

اگر صفحه به دلیل فشار حافظه سیستم صفحه بندی شود ، به حالت (D) می رسد. انتقال از (B) به (C) خطای صفحه است. اگر به ورودی/خروجی دیسک نیاز داشته باشد ، خطای اصلی صفحه است. در غیر این صورت ، خطای جزئی صفحه است. از حالتهای فوق، می توان دو اصطلاح را در حافظه تعریف کرد:

 Resident set size (RSS): اندازه صفحات اصلی حافظه اختصاص داده شده (C)

 Virtual memory size: اندازه تمام ناحیه های اختصاص داده شده (B + C + D)

تقاضای صفحه بندی از طریق BSD به همراه حافظه مجازی صفحه بندی شده به یونیکس اضافه شد.

تخصیص بیش از حد

لینوکس از مفهوم overcommit پشتیبانی می کند که اجازه می دهد حافظه بیشتری نسبت به سیستم ذخیره شود - بیش از مجموع حافظه فیزیکی و دستگاههای مبادله. این امر به تقاضای صفحه بندی و تمایل برنامه ها برای عدم استفاده زیاد از حافظه اختصاص داده شده بستگی دارد.

با تخصیص بیش از حد، درخواست یک برنامه کاربردی برای حافظه (به عنوان مثال malloc()) موفق می‌شود که در صورت نبود این مکانیزم، با شکست مواجه می‌شد. به جای اختصاص حافظه به صورت محافظه کارانه در محدوده حافظه مجازی، برنامه نویس می‌تواند حافظه را به صورت سخاوتمندانه تخصیص داده و بعدا به صورت پراکنده از آن استفاده کند.

در لینوکس ، رفتار overcommit می تواند با یک پارامتر قابل تنظیم پیکربندی شود.

مبادله

مبادله عبارت است از حرکت کل فرایندها بین حافظه اصلی و دستگاه مبادله فیزیکی یا فایل مبادله. این تکنیک اصلی یونیکس برای مدیریت حافظه اصلی است.

برای تعویض یک فرایند ، تمام داده های خصوصی آن باید در دستگاه مبادله، از جمله ساختارهای نخ (thread) و فرآیند (داده های ناشناس) نوشته شود. داده هایی که از سیستم فایل ها سرچشمه گرفته و اصلاح نشده اند، می‌توانند در صورت نیاز حذف شده و دوباره از مکان های اصلی خوانده شوند.

فرایندهایی که جایگزین می شوند هنوز توسط هسته شناخته می شوند چراکه مقدار کمی از فراداده‌های فرایندی همیشه در حافظه هسته قرار دارند. برای تعویض مجدد یک فرایند، هسته اولویت موضوع، زمان انتظار روی دیسک و اندازه فرآیند را در نظر می‌گیرد. فرایندهای طولانی مدت و کوچکتر مطلوب هستند.

مبادله به شدت به کارایی آسیب می رساند، زیرا فرآیندی که جایگزین شده است ، نیاز به ورودی/خروجی دیسک های متعدد دارد تا دوباره اجرا شود. در یونیکس اولیه برای ماشینهای آن زمان، مانند PDP-11، که حداکثر اندازه پردازش 64 کیلوبایت داشت ، منطقی‌تر بود.

در حالی که سیستم های مبتنی بر Solaris هنوز می‌توانند مبادله شوند. البته این کار را تنها در صورتی انجام می‌دهند که صفحه بندی نتواند حافظه کافی را برای نیازهای برنامه آزاد کند (زیرا صفحه بندی با سرعت اسکن صفحه محدود می‌شود). سیستم‌های لینوکس اصلاً فرآیندها را عوض نمی‌کند و فقط به صفحه بندی تکیه می‌کند.

وقتی مردم می گویند "سیستم در حال انجام swapping است" معمولاً منظورشان صفحه بندی است. در لینوکس ، عبارت مبادله، به صفحه بندی به فایل یا دستگاه مبادله (صفحه بندی ناشناس) اشاره دارد.

استفاده از حافظه پنهان سیستم فایل

طبیعی است که استفاده از حافظه پس از بوت شدن سیستم افزایش یابد زیرا سیستم عامل از حافظه موجود برای ذخیره سیستم فایل و بهبود عملکرد استفاده می‌کند. اصل این است: اگر حافظه اصلی اضافی وجود دارد، از آن برای موارد مفید استفاده کنید. این می تواند باعث ناراحتی کاربرانی شود که می بینند حافظه آزاد موجود، کمی بعد از بوت شدن تقریباً به صفر می‌رسد. اما برای برنامه ها مشکلی ایجاد نمی‌کند ، زیرا هسته باید بتواند در صورت نیاز برنامه‌ها ، حافظه را به سرعت از حافظه پنهان سیستم فایل آزاد کند.

بهره وری و اشباع

استفاده از حافظه اصلی را می توان به عنوان حافظه استفاده شده در مقابل کل حافظه محاسبه کرد. حافظه استفاده شده توسط حافظه پنهان سیستم فایل را می توان به عنوان استفاده نشده تلقی نمود چراکه برای استفاده مجدد توسط برنامه ها در دسترس است.

اگر تقاضای حافظه از مقدار حافظه اصلی بیشتر شود، حافظه اصلی اشباع می شود. سپس سیستم عامل ممکن است با استفاده از صفحه بندی و مبادله حافظه را آزاد کند. هر یک از این فعالیت‌ها نشان دهنده اشباع حافظه اصلی است. اگر سیستم محدودیتی در میزان حافظه مجازی که مایل به تخصیص است اعمال کند، حافظه مجازی را می توان از نظر استفاده از ظرفیت مورد مطالعه قرار داد. در این صورت، هنگامی که حافظه مجازی خالی شد، هسته تخصیص را خراب می کند. به عنوان مثال ، malloc () مقدار ENOMEM را برمی‌گرداند. توجه داشته باشیم که حافظه مجازی موجود در یک سیستم گاهی اوقات (به صورت گیج کننده) مبادله موجود نامیده می‌شود.

تخصیص دهندگان

در حالی که حافظه مجازی، چند وظیفه ای از حافظه فیزیکی را انجام می دهد، تخصیص واقعی و قرار دادن در یک فضای آدرس مجازی اغلب توسط تخصیص دهندگان انجام می‌شود. اینها یا کتابخانه های سمت کاربر هستند یا روالهای مبتنی بر هسته، که رابط کاربری آسان برای استفاده از حافظه را برای برنامه نویس نرم افزار فراهم می‌سازند (به عنوان مثال، malloc() ، free()). تخصیص دهندگان می‌توانند تأثیر قابل توجهی برروی کارایی داشته باشند. یک سیستم ممکن است چندین کتابخانه تخصیص دهنده سطح کاربر را برای انتخاب فراهم کند. آنها می توانند کارایی را با استفاده از تکنیک هایی از جمله caching به ازای هر نخ بهبود بخشند. اما اگر تخصیص به صورت بخش بخش بوده و هدر برود ، می‌تواند کارایی را مختل سازد.

سایز کلمه

پردازنده ها ممکن است از چندین اندازه کلمه همچون 32 بیتی و 64 بیتی پشتیبانی کنند. از آنجاییکه اندازه فضای آدرس با محدوده آدرس‌دهی از اندازه کلمه محدود می‌شود، برنامه‌های کاربردی که نیاز به بیش از 4 گیگابایت دارند، برای فضای آدرس 32 بیتی بزرگ هستند ولذا لازم است برای 64 بیت یا بالاتر کامپایل شوند. بسته به معماری CPU ممکن است کارایی حافظه با استفاده از عرض بیت‌های بزرگتر بهبود یابد. در مواردی که یک نوع داده دارای بیت های بلااستفاده در عرض بیت بزرگتر است، ممکن است مقدار کمی از حافظه هدر رود.





نویسنده : شرکت مهندس پیشگان آزمون افزار یاس