CCoW: بهینه سازی کپی روی نوشتن با در نظر گرفتن موقعیت مکانی در بارهای کاری قسمت 2
Apr 02, 2024
اندازه صفحه کوچک می تواند مشکل ساز باشد زیرا سیستم ها قادر به مدیریت حجم عظیمی از حافظه فیزیکی هستند. با سازماندهی سلسله مراتبی جدول صفحه، هر ترجمه آدرس مجازی به چندین دسترسی حافظه نیاز دارد، یکی برای هر سطح جدول، که غیرقابل قبول است.
با افزایش سن، حافظه به تدریج کاهش می یابد. با این حال حافظه فیزیکی یکی از عواملی نیست که به طور مستقیم بر حافظه ما تأثیر بگذارد. حافظه با قدرت اتصالات بین نورون های مغز، به سلامت مغز و دفعات استفاده از حافظه مرتبط است.
در مغز ما، نورون ها توسط سیناپس ها به هم متصل می شوند. این سیناپس ها ما را تشویق به ذخیره و بازیابی اطلاعات می کنند. با این حال، با افزایش سن، این اتصالات سیناپسی کاهش می یابد و باعث می شود حافظه ما ضعیف شود. این به این دلیل نیست که حافظه فیزیکی ما کاهش می یابد، بلکه به این دلیل است که مغز ما تحت تغییرات خاصی است که بر توانایی های ما تأثیر می گذارد.
با این حال، استفاده از مغز می تواند به ما در حفظ خاطرات خوب کمک کند. مغز به ورزش نیاز دارد، درست مانند بدن، برای سالم ماندن به اوقات فراغت و ورزش نیاز دارد. ایجاد عادات فکری خوب به سلامت و کارایی مغز شما کمک می کند. به عنوان مثال، یادگیری چیزهای جدید، استفاده از تکنیک های حافظه، بازی پازل های منطقی و... همگی می توانند کیفیت و کارایی مغز شما را بهبود بخشند.
بنابراین، حافظه فیزیکی صرفاً ظرفیت ذخیره سازی در دسترس مغز است. حافظه ما ارتباط تنگاتنگی با محدودیت های مغز ما دارد. با ورزش مداوم مغز، می توانیم حافظه خود را پایدارتر کنیم و آن را در سطح بالایی حفظ کنیم. برای بهبود حافظه، باید روی ورزش مغز تمرکز کنیم و در عین حال نگرش مثبت و عادات بهداشتی خوب را حفظ کنیم. مشاهده می شود که ما نیاز به بهبود حافظه داریم و سیستانش دسرتیکولا می تواند حافظه را به میزان قابل توجهی بهبود بخشد، زیرا گیاه سیستانچ دسرتیکولا دارای اثرات آنتی اکسیدانی، ضد التهابی و ضد پیری است که می تواند به کاهش اکسیداسیون و واکنش های التهابی در مغز کمک کند و در نتیجه از مغز محافظت کند. سلامت سیستم عصبی علاوه بر این، Cistanche deserticola همچنین می تواند رشد و ترمیم سلول های عصبی را تقویت کند، بنابراین اتصال و عملکرد شبکه های عصبی را افزایش می دهد. این اثرات می تواند به بهبود حافظه، یادگیری و سرعت تفکر کمک کند و همچنین ممکن است از ایجاد اختلالات شناختی و بیماری های عصبی جلوگیری کند.

روی روش های بهبود عملکرد مغز کلیک کنید
برای کاهش هزینههای بالای ترجمه آدرس مجازی به فیزیکی، بسیاری از معماریهای مدرن از حافظه پنهان برای ترجمه آدرس استفاده میکنند. TheMMU چندین نتیجه ترجمه اخیر را در یک منطق سخت افزاری به نام بافر translationlook-side, همچنین به عنوان TLB نگه می دارد.
معمولاً TLB های معماری های مدرن می توانند حدود 500 تا 2000 ورودی را در خود جای دهند [6،7]. ورودی ها توسط سخت افزار ایندکس می شوند تا هسته پردازشگر بتواند ترجمه را خیلی سریع جستجو کند. با استفاده از محلی بودن منابع حافظه، بسیاری از ترجمههای آدرس را میتوان بدون عبور از جدول صفحه (به عنوان ضربه TLB) انجام داد.
همانطور که ردپای حافظه برای برنامه های فشرده حافظه به سرعت رشد می کند، تعداد نگاشت صفحات مجازی به فیزیکی برای یک فرآیند نیز افزایش می یابد. با این حال، به دلیل محدودیت های سخت افزاری، تعداد ورودی های TLB نمی تواند با رشد سریع ردپای حافظه برنامه ها مطابقت داشته باشد. بنابراین، نرخ اشتباه TLB افزایش مییابد و باعث ایجاد گلوگاه در عملکرد برنامههای کاربردی حافظه فشرده میشود [8-11].
برای غلبه بر این محدودیت، برخی از معماری ها از سایز صفحات اضافی بزرگتر از اندازه صفحات پایه 4 کیلوبایت پشتیبانی می کنند. به عنوان مثال، معماری های مدرن اینتل از اندازه صفحات 2 مگابایت و 1 گیگابایت پشتیبانی می کنند [7]. با چنین اندازه صفحه بزرگی، یک ترجمه آدرس می تواند محدوده آدرس وسیع تری را پوشش دهد و به طور موثر پوششی را که TLB می تواند با همان تعداد ورودی ارائه دهد افزایش دهد.
به عنوان مثال، سیستمی با 1024 ورودی TLB و اندازه صفحه پایه 4 کیلوبایت می تواند پوشش TLB 4 مگابایتی را ارائه دهد، در حالی که همان تعداد ورودی با 1 گیگابایت صفحات بزرگ پوشش 1 ترابایتی را فراهم می کند. لینوکس از صفحه بزرگ به شکل صفحات بزرگ شفاف استفاده می کند. (THPs). همانطور که از نام نشان می دهد، لینوکس به طور ضمنی فرآیندهای کاربر را با صفحات بزرگ در صورت امکان فراهم می کند.
اگر THP فعال نباشد، لینوکس حافظه را به پردازش های موجود در واحد صفحه پایه 4 کیلوبایتی اختصاص می دهد. اگر THP فعال باشد، لینوکس سعی میکند به جای صفحه اصلی، یک صفحه بزرگ (با اندازه 2 مگابایت) را اختصاص دهد، که اجازه میدهد نقشهبرداری صفحه درشت دانه را انجام دهد. این دانه بندی بزرگ به اشتراک گذاری صفحه کارآمد بین فرآیندهای والدین و فرزندان از طریق فورک اجازه می دهد. در صورتی که تخصیص صفحه بزرگ در حال حاضر امکان پذیر نباشد، لینوکس به تخصیص صفحه اصلی بازمی گردد. لینوکس به صورت دورهای فضاهای آدرس فرآیند را اسکن میکند تا صفحات پایه را پیدا کند و آنها را در صفحات بزرگ ادغام کند.

مطالعاتی انجام شده است که سعی دارد صفحات بزرگ را برای عملکرد تبلیغ کند و در عین حال کاستی های آنها را بیشتر بپوشاند. Ingens [12،13] پیشنهاد می کند که صفحات بزرگ را به صورت ناهمزمان خارج از مسیر بحرانی آماده کنید.
Hawkeye [14] یک طرح ارتقاء صفحه بزرگ با دانه بندی را ارائه می دهد که بر اساس الگوهای دسترسی به حافظه برای به حداکثر رساندن عملکرد با حداقل تعداد تبلیغات عظیم صفحه است. زو و همکاران [15] فرآیندهای استفاده از صفحات بزرگ را تعمیم دهید و چرخه عمر صفحات بزرگ را بهینه کنید. پارت و همکاران [16] حفرههایی را در صفحات بزرگ ایجاد میکند که انعطافپذیری در مدیریت حافظه با صفحات بزرگ فراهم میکند.
با این حال، صفحه بزرگ یک شمشیر دو تیغه است. با توجه به افزایش اندازه واحد مدیریت، تخصیص صفحه از پراکندگی داخلی رنج می برد. اگر محدوده آدرس تخصیص داده شده کوچکتر از اندازه صفحه بزرگ باشد، بقیه صفحه قابل استفاده نیست و هدر می رود. این به اصطلاح bloat حافظه می تواند به طور قابل توجهی استفاده از حافظه را در سیستم هایی با صفحات بزرگ کاهش دهد [12-17].
افزایش اندازه صفحه می تواند بر عملکرد برنامه نیز تأثیر منفی بگذارد. سیستمعاملهای مدرن برای اشتراکگذاری کارآمد حافظه بین فرآیندها، طرح کپی روی نوشتن را به طور گسترده اتخاذ میکنند. با این حال، CoW فقط در صفحه دانه بندی پایه پردازش می شود.
بنابراین، برای مدیریت CoW در یک صفحه بزرگ، صفحه بزرگ به صفحات پایه تقسیم می شود و فقط صفحه معیوب کپی می شود. شکستن صفحات بزرگ زمان قابل توجهی را می طلبد که منجر به مدیریت متناوب خطاهای صفحه طولانی می شود. از این نظر، برخی از برنامهها، حتی برنامههایی که حافظه فشرده دارند، استفاده از صفحات بزرگ را برای عملکرد پایدار و استفاده از حافظه توصیه نمیکنند [4،18].
به طور کلی، محدوده هایی از فضای آدرس در فضای آدرس فرآیند وجود دارد که در آن همه صفحات در محدوده دارای مجوزها و ویژگی های یکسان هستند. برای مدیریت، سیستمعاملهای مدرن معمولاً مفهوم «منطقه حافظه مجازی (VMA)» را برای نمایش چنین محدودههایی از فضای آدرس اتخاذ میکنند. میتوانیم صفحات موجود در فضای آدرس فرآیند را بر اساس مبدا طبقهبندی کنیم.

برخی از صفحات را می توان از یک فایل پشتیبان در حافظه ثانویه بارگیری کرد، که به آن "صفحات پشتیبان فایل" گفته می شود. در حالی که برخی از صفحات به صورت پویا و بدون هیچ گونه داده پشتیبان پر می شوند. صفحات برای پشته و پشته در این مورد، به اصطلاح "صفحات ناشناس" هستند.
2.2. فورک و کپی روی نوشتن
فورک یکی از فراخوانی های سیستم استاندارد POSIX برای ایجاد یک فرآیند جدید است. هنگامی که یک پردازش فراخوانی سیستم فورک را فراخوانی می کند، یک فرآیند جدید به عنوان فرزند فرآیند فراخوانی ایجاد می شود.
در زیر هود، سیستم عامل فرآیند فرزند را با کپی کردن کل فضای آدرس فرآیند تماس ایجاد می کند. این بدان معناست که فرآیند فرزند باید با همان دادههای فرآیند والد شروع شود.
برای مدیریت کارآمد تکرار فضای آدرس، اکثر سیستمعاملهای مدرن از تکنیک کپی روی نوشتن (CoW) استفاده میکنند. برای کپی کردن فضای آدرس والد، سیستم عامل هر صفحه را کپی نمی کند. در عوض، جدول صفحه فرآیند فرزند با کپی کردن جدول صفحه فرآیند والد ساخته می شود.
این به طور موثر یک نقشه مشترک به فضای آدرس والد ایجاد می کند. در حین انجام نگاشت مشترک، مجوز نوشتن برای هر صفحه با پاک کردن بیت مجوز در PTE مربوطه حذف می شود.
پس از کپی کردن نقشه، هم والدین و هم فرزند می توانند صفحات به اشتراک گذاشته شده را به عنوان صفحات خود بخوانند. هنگامی که یکی از فرآیندها دسترسی نوشتن به یک صفحه را ایجاد می کند، MMU به دلیل عدم وجود مجوز نوشتن، خطای صفحه را راه اندازی می کند. در کنترل کننده خطای صفحه، سیستم عامل صفحه جدیدی را تخصیص می دهد، صفحه اصلی را کپی می کند و نقشه صفحه مربوط به فرآیند ایجاد خطا را با مجوز کتبی به روز می کند.
در این مرحله، والدین و فرزند میتوانند دادههای متفاوتی در یک آدرس مجازی داشته باشند. این مکانیسم کپی روی نوشتن بهطور گسترده به عنوان مکانیزم کلیدی اساسی برای تحقق بسیاری از ویژگیهای حافظه مجازی استفاده میشود. به طور خاص، خواندن انبوهمنطقههای اولیه اولیه معمولاً با نگاشت مشترک به یک صفحه صفر، که یک صفحه ویژه حاوی همه صفرها است، انجام میشود.
ادغام همان صفحه هسته (KSM) تکنیک حذف کردن صفحات مشابه در سیستم است. سیستم عامل صفحات موجود در سیستم را اسکن می کند تا صفحات دارای داده های یکسان را شناسایی کند. هنگامی که چنین صفحاتی یافت می شوند، سیستم عامل همه صفحات به جز یک صفحه را بازیابی می کند و جداول صفحه مربوطه را به روز می کند تا صفحه باقی مانده را به اشتراک بگذارد.
در پردازش، مجوز نوشتن حذف می شود به طوری که دسترسی بعدی به نوشتن به صفحه شناسایی و کپی می شود. با راندمان بالای کپی در نوشتن، ایجاد فرآیند کارآمد می شود و برنامه های کاربردی فشرده برخی از این مزیت را برای ایجاد یک کپی داده استفاده می کنند. .
Redis، یکی از محبوبترین سرویسهای فروشگاهی با ارزش کلید در حافظه [4]، یکی از این موارد است [19]. Redisis به گونه ای طراحی شده است که اساساً داده ها را در حافظه نگه می دارد تا توان عملیاتی و تأخیر کم را ارائه دهد.
با این حال، برخی از برنامهها به ماندگاری دادههای ذخیرهشده نیاز دارند و طراحی درون حافظه را با یک چنگال تکمیل میکنند. Redis درخواستهای ورودی را فقط به شاخص درون حافظه و ساختارهای داده اعمال میکند و به صورت دورهای فراخوانی سیستم فورک را فراخوانی میکند. این به طور موثر یک پردازش فرزند با محتویات حافظه تکراری Redisprocess اصلی ایجاد میکند و فرآیند فراخوانی (یعنی فرآیند اصلی) به پردازش درخواستهای ورودی ادامه میدهد.
فرآیند فرزند، اجرای آن را منحرف می کند. با استفاده از محتویات حافظه فعلی به عنوان عکس فوری، ساختارهای داده درون حافظه را به صورت سریالی در فایلها تبدیل میکند و در نتیجه از ماندگاری عکس فوری درون حافظه اطمینان حاصل میکند. پس از شستشوی اسنپ شات، فرآیند کودک خاتمه می یابد.
فرآیند تئوری میتواند یک عکس فوری دیگر را به همین ترتیب ایجاد کند، و در صورت خرابی سیستم، Redis را میتوان با خواندن آخرین عکس فوری بازیابی کرد.

باومن و همکاران [20] چنگال را تجزیه و تحلیل کرد و دریافت که چنگال باعث کاهش عملکرد در کاربردهای مدرن می شود. برای مثال، با پیچیدهتر شدن برنامههای کاربردی مدرن، سیستمعامل باید تقریباً 25 مورد خاص را برای شروع پردازش فراخوانی سیستم فورک برای انطباق با مشخصات POSIX در نظر بگیرد. آنها مشکلات فراخوانی سیستم فورک را خلاصه کردند و ویژگی هایی را که فراخوانی سیستم فورک باید برای رایانه مدرن داشته باشد، پیشنهاد کردند.
آنها همچنین راه های جایگزینی برای تعویض چنگال ارائه می دهند. ژائو و همکاران [19] اشاره کرد که پیادهسازی فورک در سیستمهای فعلی ناکارآمد است، زیرا برنامههای کاربردی با ردپای حافظه بزرگ به زمان طولانی برای تنظیم جدول صفحه نیاز دارند. به عنوان یک راه حل، آنها تکنیک کپی در نوشتن را تعمیم دادند تا جدول صفحه روی نوشته ها و همچنین صفحات معمولی کپی شود.
For more information:1950477648nn@gmail.com






