زمانیکه در خصوص حافظه یا RAM سرورها صحبت می کنیم دو مفهوم اصلی و مهم به نامهای parity و NUMA را بایستی به خوبی درک کنیم . خوب ابتدا آموزش خود را با مفهوم NUMA شروع می کنیم . NUMA مخفف شده کلمه Non Uniform Memory Access است ، شاید به نظر مفهوم این کلمه کمی سخت باشد اما پایه و اساس منطق کاری آن نسبتا ساده است .
اگر در رشته کامپیوتر تحصیل کرده اید حتما به خاطر دارید که در تمامی کتابهای درسی ما اعم از دانشگاهی و غیره ، همیشه از حافظه یا همان RAM به عنوان سریعترین جزء کامپیوتر نام برده می شود . اما توجه کنید که بیشتر این بحث ها در خصوص کامپیوترهای معمولی یا PC ها صدق می کند و این مفهوم در خصوص supercomputer ها صادق نیست ، در حال حاضر این مفهوم دیگر برای اکثر سرورهای شبکه نیز صادق نیست . امروزه CPU یا همان پردازنده کمی سریعتر از حافظه فعالیت می کند . بنابراین سریعترین عضو یک سخت افزار در سرور ، CPU آن سرور است .
تفاوت سرعت بین CPU و سرعت RAM زمانی بیشتر مطرح می شود که مشکل کارایی سرور به میان می آید . بیشتر کاربرد و کارکرد CPU انجام عملیات و دستورات بر روی داده ها می باشد ، دقت کنید که داده ها بر روی RAM قرار دارند ، این یعنی اینکه هر چقدر سرعت CPU شما بیشتر از RAM شما باشد در نهایت بایستی با سرعتی کار کند که RAM شما می تواند اطلاعات یا داده ها را در اختیارش قرار دهد .
این دقیقا همان مثالی است که در خصوص کارت های شبکه نیز بکار برده می شود ، اگر در دو سمت شبکه ، دو کارت شبکه با سرعت های 10 مگابیت بر ثانیه و 100 مگابیت بر ثانیه داشته باشیم در نهایت ایندو با چه سرعتی ارتباط برقرار خواهند کرد ؟ پاسخ قطعا سرعت 10 مگابیت بر ثانیه می باشد . توجه کنید که این درست است که داده ها و اطلاعات ما می تواند بر روی هارد دیسک یا هر دستگاه ذخیره سازی اطلاعات دیگر ذخیره شده باشد اما برای اینکه بتواند اجرا شود بایستی ابتدا وارد RAM شده و سپس اجرا شود.
بعد از مدتی تولید کنندگان کامپیوتر متوجه این موضوع شدند که هر چقدر هم که سرعت CPU های خود را بالا و بالاتر ببرند در حقیقت بیشتر زمان و قدرت CPU صرف انتظار کشیدن برای دریافت اطلاعات و داده ها از RAM می شود و به این شکل سرعت CPU در سرعت سیستم بی تاثیر می شود . این مشکل برای سرورهایی که فقط یک CPU داشتند بسیار مشکل ساز بود.
اما سرورهای امروزی دارای چندین هسته CPU یا CPU Core هستند و این مشکل برای این سرورها بیشتر محسوس بود . همچنین در بسیاری از سرورهای امروزی شما شاهد این هستید که ضمن اینکه سرور دارای چندین CPU فیزیکی است ، هر کدام از این CPU ها به خودی خود دارای چندین هسته هستند ، هر CPU فیزیکی می تواند دست کم از چهار تا چند ده عدد هسته داشته باشد . من سرورهایی با 64 هسته را نیز مشاهده کرده ام که در مراکز داده بانک های بزرگ مورد استفاده قرار می گیرند ، هر کدام از این هسته ها به عنوان یک Logical CPU مورد استفاده قرار می گیرند.
خوب وجود چندین CPU و هسته های آن به نظر بسیار مفید می آید و طبیعتا بایستی سرعت سیستم را افزایش دهند ، اما نکته در اینجاست که دسترسی به محل RAM صرفا می تواند از طریق یک CPU در لحظه انجام شود. این یعنی اینکه ضمن اینکه CPU ها بایستی منتظر دریافت داده ها از RAM بمانند ، بایستی منتظر بمانند تا کار یکی از CPU ها با RAM تمام شود تا آنها بتوانند از RAM سیستم استفاده کنند .
این یعنی یک صف انتظار طولانی که باعث کندی هر چه بیشتر سیستم می شود . یکی از راهکارهای اصلی که تولید کنندگان سرور در دنیا برای رفع مشکل ذکر شده بکار بردند معرفی تکنیک یا بهتر بگوییم فناوری حافظه NUMA بود. حافظه NUMA بصورت اختصاصی به قسمت های مجزایی به نام NUMA Node تقسیم می شود . در این حالت برای هر یک از CPU ها یک NUMA Node اختصاصی مجزا ارائه خواهد شد.
در بیشتر موارد NUMA Node ها بر اساس هر CPU فیزیکی تخصیص داده می شوند و نه بر اساس هر هسته CPU ، معمولا یک ارتباط یک به یک بین سوکت CPU فیزیکی و یک NUMA Node برقرار می شود و در این مورد معمولا توجهی به تعداد هسته های موجود در CPU مورد نظر نمی شود . البته این بدین معنا نیست که استثنائی هم وجود ندارد ، سرورهایی وجود دارند که برای CPU هایی که دارای تعداد هسته های بابایی هستند ( مثلا 12 هسته ای ) دو عدد NUMA Node اختصاصی می دهند. اختصاص NUMA Node ها به صورت مجزا به هر یک از CPU های موجود بر روی سرور به دو روش کارایی سرور و CPU را بالا می برند.
در روش اول استفاده از NUMA Node های اختصاصی باعث می شود که CPU ها برای دسترسی پیدا کردن به RAM با همدیگر رقابت نکنند. چندین CPU بصورت همزمان می توانند از RAM استفاده کنند به دلیل اینکه هر CPU یک NUMA Node اختصاصی برای برقراری ارتباط با RAM در اختیار دارد . روش دیگری که به وسیله آن NUMA Node کارایی سیستم را افزایش می دهد محدود کردن مقدار RAM ای است که هر CPU می تواند از آن استفاده کند.
زمانیکه یک CPU با استفاده از NUMA Node به RAM سرور دسترسی پیدا می کند از مقدار حافظه ای تعیین شده و محدوده معینی از آن استفاده می کند و این باعث می شود که CPU تمامی RAM را بصورت یکجا اشغال نکند ، در سیستم های عادی به این شکل عمل می شود که هر CPU در لحظه کل RAM را به خود اختصاص می دهد . این محدود کردن میزان دسترسی همزمان و همچنین معین به قسمت از RAM باعث مدیریت بهتر و کارایی بهتر حاقظه سیستم خواهد شد.
البته توجه کنید که آنچه ما در این مقاله توضیح دادیم در واقع یک مفهوم و یک ایده در خصوص NUMA بود و در محیط های واقعی کاملا به این شکل انجام نمی شود . در محیط واقعی CPU ها فقط از NUMA Node ها استفاده نمی کنند ، برای درک بهتر این موضوع توجه کنید که ممکن است که یک CPU در محیط کار واقعی به بیشتر از مقدار حاقظه ای که توسط یک NUMA Node به او اختصاص داده است .
احتیاج داشته باشد و در اینجاست که CPU بایستی از چندین NUMA Node استفاده کند . برخی از نرم افزارهای کاربردی نیز وجود دارند که CPU را مجبور می کنند که از چندین NUMA Node استفاده کند. البته برای CPU این کار چندان سختی نیست که از یک NUMA Node غیر محلی یا Non-Local استفاده کند اما قاعدتا استفاده از NUMA Node های غیر محلی در مقابل NUMA Node های محلی سرعت کمتری دارند.
در ابتدای همین مقاله به این موضوع اشاره کردیم که در خصوص حافظه دو مفهوم اساسی و بسیار مهم به نام های NUMA و Parity وجود دارد که در خصوص NUMA توضیحاتی دادیم . خوب در ادامه بایستی در خصوص Parity یا توازن صحبت کنیم ، در ساده ترین تعریف ممکن برای Parity می توان گفت که Parity مکانیزمی برای تشخیص خطاهای حافظه است .توجه کنید که اگر خطاهای حافظه تشخیص داده نشوند و مرتبا تکرار شوند می توانند باعث بروز خطاهایی مثل از دست رفتن اطلاعات یا تخریب اطلاعات و یا حتی تخریب سیستم و حافظه شما شوند.
مکانیزم Parity حافظه سالهاست که مورد استفاده قرار می گیرد اما با اشکال و روش هایی که در طی سالها در حال تغییر بوده است . چندین نوع شکل مختلف از Parity ها وجود دارند که در بیشتر سرورها مورد استفاده قرار می گیرند ، مرسوم ترین و در واقع رایجترین نوع Parity که امروزه در سرور ها مورد استفاده قرار میگیرد به نام Error Correction Code یا ECC شناخته می شود . خوب همانطور که خودتان هم می دانید داده ها در حافظه بصورت کدهای دودویی یا باینری نگهداری می شوند . هر کدام از بین ها در مبنای دودویی می توانند عدد یک یا صفر را در خود جای دهند .
ساختار ECC برای تشخیص خطاهای بیتی مورد استفاده قرار میگیرد و می تواند خطاهای موجود در یک Bit خاص را تشخیص دهد. به زبان ساده تر اگر قرار باشد که بیتی که بر روی حافظه قرار میگیرد یک باشد و در حال حاضر بصورت صفر ذخیره شده است ، مکانیزم تشخیص خطای ECC بایستی این موضوع را تشخیص داده و اعلام خطا کند . در برخی اوقات ECC نقش ترمیم کننده یا تصحیح کننده را نیز بر عهده می گیرد البته این تنها در مواردی است که خطای رخ داده تنها در یکی از Bit ها باشد و نه بیشتر.
البته همین تشخیص و تصحیح خطا در یک Bit از حافظه هم می تواند بسیار مفید باشد اما تکنولوژی هایی در حال حاضر وجود دارند که بسیار دقیقتر و پیشرفته تر در این زمینه کار می کنند . یکی از این تکنولوژی های که برگرفته ای از همان تکنولوژی ECC است به نام Single Device Data Correction یا SDDC سناخته می شود . SDDC می تواند بیش از یک خطا را در حافظه تشخیص داده و آن را درست کند . SDDC مشابه RAID Level 5 عمل می کند .
داده هایی که بر روی حافظه قرار میگیرند بصورت پراکنده بر روی چندین Chip نوشته می شوند ، بر روی هر یک از Chip ها یک مقدار داده بیشتر در خصوص سایر داده های موجود بر روی دیگر Chip ها قرار میگیرد . این بدین معناست که اگر مشکلی برای یکی از Chip ها به وجود بیاید ، داده های از طریق سایر Chip ها قابل بازیابی هستند و خطای رخ داده قابل ترمیم خواهد بود ، دقیقا کاری که در RAID Level 5 انجام می شود.
بعضی از سرورها پای خود را فراتر از اینها نیز گذاشته اند و برای حافظه های سرور ، حافظه های یدکی یا کمکی قرار داده اند . در این موارد علاوه بر حافظه اصلی نصب شده بر روی سرور ، یک سری سوکت اضافه برای نصب حافظه های بیشتر وجود دارد ، با نصب کردن حافظه های یدکی در سوکت های مربوطه و انجام تنظیمات ، به محض اینکه حافظه اصلی دچار اختلال یا مشکلی شود ، سرور بصورت خودکار حافظه یدکی را به عنوان حافظه اصلی به CPU معرفی کرده و به فعالیت خود ادامه می دهد.
یک نکته بسیار مهم که تا حدودی هم در همین پاراگراف به آن اشاره کردیم این است که همینکه شما حافظه هایی که از تکنولوژی ECC بهرمند هستند را سرجای خود در سوکت ها قرار دهید همیشه به این معنی نیست که دیگر از خطاها در امان خواهید بود و ECC به درستی کار می کند . در این خصوص دو نکته را فراموش نکنید ، اول اینکه سرور شما نیز بایستی از تکنولوژی ECC پشتیبانی کند
و به دلیل اینکه این فناوری گرانقیمت است ممکن است سرور شما دارای چنین قابلیتی نباشد ، بنابراین اگر بر روی این سرور RAM های ECC را نصب کنید قظعا تفاوت خاصی را مشاهده نخواهید کرد . از طرفی دیگر اگر سرور شما هم از این فناوری پشتیبانی می کند ، دقت کنید که بعد از نصب اینگونه RAM ها بر روی سرور حتما بایستی تنظیمات مربوط به ECC در BIOS سرور شما انجام شود تا به درستی کار کند.
در این مقاله در خصوص دو مفهوم اصلی که در حافظه های سرور نقش اصلی را ایفا می کنند صحبت کردیم و نقاط ضعف و قوت سرورها در صورت وجود و عدم وجود این فناوری ها را مورد بررسی قرار دادیم .توجه کنید که شما به عنوان کسی که به عنوان مدیر شبکه قرار است در یک مرکز داده کار کند بایستی تا حدودی مفاهیم اینگونه مسائل را به خوبی یاد بگیرید تا در صورت لزوم بتوانید به درستی از مزایای این تکنولوژی ها استفاده کنید . در مقاله بعدی در خصوص دستگاه ها و سیستم های ذخیره سازی اطلاعات یا همان Storage ها صحبت خواهیم کرد.
بنیانگذار انجمن تخصصی فناوری اطلاعات ایران ، هکر کلاه خاکستری ، کارشناس امنیت اطلاعات و ارتباطات
محمد نصیری هستم ، بنیانگذار انجمن تخصصی فناوری اطلاعات ایران و مجموعه توسینسو ، هکر قانونمند و کارشناس امنیت سایبری ، سابقه همکاری با بیش از 80 سازمان دولتی ، خصوصی ، نظامی و انتظامی در قالب مشاور ، مدرس و مدیر و ناظر پروژه ، مدرس دوره های تخصص شبکه ، امنیت ، هک و نفوذ ، در حال حاضر در ایران دیگه رسما فعالیتی غیر از مشاوره انجام نمیدم ، عاشق آموزش و تدریس هستم و به همین دلیل دوره های آموزشی که ضبط می کنم در دنیا بی نظیر هستند.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود