وضعیت سرورها

وبــلاگ

وضعیت سرورها
  • آشنایی با NUMA

    مهدی عطائیان شنبه ۲۴ خرداد ۱۳۹۳ آموزش , لینوکس , مقالات

    Non-uniform Memory Access (به‌صورت مخفف NUMA) یک طراحی حافظه است که در این طرح هر processor (پردازنده) حافظه‌ی محلی مخصوص به خود را دارد و سرعت دسترسی پردازنده به حافظه محلی خود بالاتر از حافظه‌های غیرمحلی است.

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

    آشنایی با Non-uniform Memory Access

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

    در ادامه با این دستور آشنا می‌شویم و در انتها برنامه نویسی بهینه با استفاده از کتاب‌خانه numalib را فرا می‌گیریم.

    دستور numactl:

    برای بررسی وضعیت سخت‌افزار NUMA می‌توان از دستور numactl به‌صورت زیر استفاده کرد.

    خروجی دستور مشخصات پردازنده خواهد بود و می‌تواند به دو صورت باشد:

    ۱. در خروجی دستور تنها ۱ نود وجود داشته‌باشد، به این معنی است که معماری پردازنده ما نمی‌تواند از نوما پشتیبانی کند.

    ۲. در خروجی بیش از یک نود وجود داشته‌باشد، به این معنی است که پردازنده از numa پشتبیانی می‌کند.

    در خروجی بالا دو NODE داریم (که با شماره ۰ و ۱ شناخته می‌شوند) در node شماره ۰ پردازنده‌های ۰ و ۱ و ۲ و ۳ و ۸ و ۹ و ۱۰ و ۱۱ قرار دارد، RAM اختصاص یافته به نود صفر ۱۶۳۷۴ مگابایت است که از این رم ۱۰۹۳۵ مگا بایت آن آزاد است. اطلاعات نود ۱ نیز به همین شکل تفسیر می‌شود.

    در جدول node distances سرعت دسترسی هر نود به حافظه‌ها مشخص شده‌است. در مثال فوق دسترسی هر نود به حافظه اختصاصی خود با سرعت ۱۰ و حافظه‌های دیگر ۲۰ می‌باشد.

    برای مشاهده وضعیت NUMA می‌توان می‌توان از دستور numactl به‌صورت زیر استفاده کرد.

    خروجی دستور:

    بر اساس خروجی دستورات بالا می‌توان نتیجه گرفت که ۱۶ پردازنده وجود دارد که دو NODE را تشکیل می‌دهند، هر node هشت پردازنده و ۱۶ گیگابایت حافظه محلی دارد.

    نکته: وضعیت numa را با استفاده از اطلاعات موجود در مسیر /sys نیز می‌توان به‌صورت دست آورد.

    خروجی دستور:

     

    خروجی دستور:

    مشاهده اطلاعات حافظه به کمک دستور numastat:

    خروجی دستور:

    ساده‌ترین شکل اجرای دستور numactl به‌صورت زیر است.

    در این حالت برنامه mongod تنها از حافظه محلی پردازنده‌ی مقیم استفاده می‌کند، پارامتر localalloc و یا l برنامه را وادار می‌کند که تنها از حافظه محلی نودی که در آن در حال اجراست استفاده کند. ممکن است حافظه مورد نیاز برنامه از حافظه محلی نود بیشتر باشد، در این‌صورت نتیجه اجرای برنامه با خطا مواجه می‌شود. می‌توان از پارامتر preferred استفاده کرد تا در صورت کمبود RAM، برنامه از حافظه‌ی نودهای دیگر استفاده کند.

    با استفاده از پارامتر membind می‌توان برنامه را در حافظه یک نود اجرا کرد، همچین با پارامتر cpunodebind برنامه در پردازنده‌های نود تعریف شده اجرا می‌شود.

    با دستور بالا یک پروسس را می‌توان در یک نود و حافظه‌های آن اجرا کرد.

    نکته: با دستور زیر می‌توانیم اجرای صحیح پروسس‌ها بر اساس سیاست numa را بررسی کرد.

    هماهنطور که در مثال‌های بالا هم دیدیم سیاست‌های numa به چهارصورت می‌توانند اختصاص یابند:

    ۱. ‫Local: در این حالت برنامه تنها از حافظه محلی نودی که در آن احرا می‌شود استفاده می‌کند.  این حالت پیش فرض است.

    ۲. ‫Preferred:  برنامه از حافظه محلی نودی که در آن اجرا  می‌شود استفاده می‌کند در صورتی که  برنامه به حافظه بیشتری نیاز داشته باشد از حافظه محلی سایر نود‌ها استفاده می‌کند.

    ۳. ‫Interleave: حاافظه با الگوریتم round robin به نودها اختصاص می‌یابد.

    ۴. اجرای برنامه در یک سی‌پی‌یو خاص و استفاده از حافظه محلی یک نود خاص:

     کتابخانه libnuma:

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

    برنامه را با پارامتر -lnuma کامپایل و سپس اجرا می‌کنیم.

    0

    برچسب ها :

با عضویت در خبرنامه شما را از آخرین تجربیات مان و مطالب تخصصی آگاه خواهیم کرد.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *