آموزشآموزش‌های تکی

آموزش تکی، حدود ۳۰ دقیقه خواندن

رم (RAM) چیه

جواب کوتاه

رم، یا RAM (کوتاه‌شده‌ی Random Access Memory، یعنی «حافظه با دسترسی تصادفی»)، حافظه‌ی کاری کامپیوتره: هر چیزی که برنامه‌ها همین الان لازم دارن، اونجاست. خیلی سریعه، ولی موقته؛ برق که بره، هر چی توشه پاک می‌شه. برای همین کنارش یه حافظه‌ی ذخیره (هارد یا SSD) هست که چیزها رو برای همیشه نگه می‌داره.

اسم

وقتی گوشی می‌خرید، دو تا عدد گیگابایت روی جعبه‌ست: مثلا «۸ گیگ رم، ۲۵۶ گیگ حافظه». خیلی‌ها این دو تا رو با هم قاطی می‌کنن. این درس درباره‌ی اولیه‌ست: رم.

رم همون RAM هست، کوتاه‌شده‌ی Random Access Memory، یعنی «حافظه با دسترسی تصادفی». اسمش یه کم عجیبه؛ جلوتر می‌بینید چرا. فعلا کافیه بدونید رم حافظه‌ایه که کامپیوتر باهاش کار می‌کنه، نه حافظه‌ای که چیزها رو توش انبار می‌کنه.

وایت‌برد کلاس

مثلا فرض کنید یه معلم سر کلاس داره یه مسئله حل می‌کنه. هر چی همین الان لازمه رو روی وایت‌برد می‌نویسه: عددها، شکل‌ها، قدم‌ها. دفترهای قدیمی و کتاب‌ها توی قفسه‌ی ته کلاسن.

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

یه وایت‌برد بزرگ‌تر یعنی می‌شه چیزهای بیشتری رو هم‌زمان جلوی چشم داشت، و کمتر لازمه تا قفسه رفت. رم بیشتر هم دقیقا همینه: برنامه‌های بیشتری با هم باز می‌مونن و کامپیوتر کمتر سراغ دیسک کند می‌ره.

رم و حافظه‌ی ذخیره

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

پس اون «۲۵۶ گیگ حافظه»ی گوشی، جای عکس‌ها و برنامه‌هاست. «۸ گیگ رم»، اندازه‌ی وایت‌بردیه که گوشی هم‌زمان باهاش کار می‌کنه. اولی زیاد باشه، عکس بیشتری جا می‌شه. دومی زیاد باشه، برنامه‌های بیشتری با هم باز می‌مونن بی اینکه دوباره بارگذاری بشن.

برق که بره

مهم‌ترین چیز درباره‌ی رم اینه: «فرار»ه (volatile). یعنی تا برق هست، داده رو نگه می‌داره؛ برق که بره، همه‌ش پاک می‌شه.

برق وصله: همه‌چیز روی برد هست.
برق رفت: برد پاک شد. دفترها (دیسک) سر جاشونن.

برای همین وقتی توی یه برنامه چیزی می‌نویسید و برق می‌ره، اگه ذخیره نکرده باشید، از دست می‌ره؛ چون فقط توی رم بوده. «ذخیره کردن» یعنی بردن از رم به حافظه‌ی ذخیره. و برای همین سرورها برق پشتیبان دارن؛ یه قطعی کوتاه برق، هر چی توی رم بوده رو پاک می‌کنه، مثلا داده‌هایی که دیتابیس هنوز روی دیسک ننوشته.

چرا «تصادفی»؟

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

اسمش رو در برابر حافظه‌هایی گذاشتن که باید به ترتیب خونده می‌شدن؛ مثل نوار کاست که برای رسیدن به آهنگ دهم، باید نه تا آهنگ قبلی رو رد کنید. توی رم، «تصادفی» یعنی «هر جا که بخواید، بی صف».

سطلی که نشت می‌کنه

رم معمولی کامپیوترها اسمش DRAM هست، کوتاه‌شده‌ی Dynamic Random Access Memory، یعنی «رم پویا». هر بیتش یه سطل خیلی کوچیکه، به اسم خازن، با یه شیر جلوش، به اسم ترانزیستور. سطل پر یعنی ۱، خالی یعنی ۰.

مشکل اینه که این سطل‌ها آروم‌آروم نشت می‌کنن. پس رم هر چند ده میلی‌ثانیه یه بار همه‌ی سطل‌ها رو می‌خونه و دوباره پرشون می‌کنه؛ بهش می‌گن تازه‌سازی (refresh). «پویا» بودن اسمش هم از همینه: مدام باید سرپا نگهش داشت. و برای همین برق که بره، سطل‌ها خالی می‌شن و داده می‌ره.

دو جور رم

یه جور دیگه هم هست: SRAM، کوتاه‌شده‌ی Static Random Access Memory، یعنی «رم ایستا». هر بیتش به‌جای سطل، از چند تا ترانزیستور ساخته شده که تا برق هست، خودش رو نگه می‌داره و تازه‌سازی نمی‌خواد. خیلی سریع‌تره، ولی خیلی گرون‌تر و جاگیرتر.

برای همین SRAM رو فقط جاهای کوچیک و حیاتی می‌ذارن: کش داخل پردازنده. و DRAM رو برای حافظه‌ی اصلی، که گیگابایت‌ها جا می‌خواد. پس وقتی می‌گیم «رم کامپیوتر»، منظور DRAM هست.

چقدر سریع؟

خوندن یه چیز از رم حدود ده‌ها نانوثانیه طول می‌کشه؛ یعنی چند صد میلیونیم ثانیه. از یه SSD خوب، حدود ده‌ها میکروثانیه؛ یعنی هزار برابر بیشتر. از هارد چرخان، چند میلی‌ثانیه؛ یعنی صد هزار برابر بیشتر.

مثلا فرض کنید خوندن از رم مثل برداشتن یه برگه از روی میزتون باشه، یه ثانیه. با همین حساب، خوندن از SSD می‌شه چند ده دقیقه، و از هارد چرخان یکی دو روز. برای همین هر چی بیشتر چیزها توی رم باشن، کامپیوتر و سرور سریع‌ترن.

شونه و شیار

توی کامپیوتر رومیزی و سرور، رم یه تیکه‌ی باریک و درازه به اسم ماژول یا «شونه»، که توی یه شیار روی برد اصلی جا می‌ره. اسم رسمیش DIMM هست. لپ‌تاپ‌ها نسخه‌ی کوتاه‌ترش رو دارن، SO-DIMM. روی هر ماژول چند تا تراشه‌ی DRAM کنار هم نشستن.

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

نسل‌ها

رم امروزی اسم DDR داره، کوتاه‌شده‌ی Double Data Rate، یعنی «دو برابر داده در هر تیک»؛ چون هم توی بالا رفتن ساعت داده می‌فرسته هم توی پایین اومدنش. هر چند سال یه نسل تازه میاد که سریع‌تر و کم‌مصرف‌تره:

  1. DDRحدود ۲۰۰۰ میلادی
  2. DDR2حدود ۲۰۰۳
  3. DDR3حدود ۲۰۰۷
  4. DDR4حدود ۲۰۱۴
  5. DDR5حدود ۲۰۲۰

امروز بیشتر سیستم‌های تازه DDR5 دارن و خیلی از سیستم‌های چند سال پیش DDR4. نسل‌ها با هم جور نیستن؛ رم DDR4 توی شیار DDR5 جا نمی‌ره.

سرعت و تاخیر

روی رم دو تا عدد سرعت هست. اولی تعداد انتقال در ثانیه‌ست، مثلا «۵۶۰۰ MT/s»، یعنی ۵۶۰۰ میلیون انتقال در ثانیه. هر چی بیشتر، داده‌ی بیشتری در هر ثانیه جابه‌جا می‌شه؛ مثل پهنای جاده.

دومی تاخیره، که با CL نوشته می‌شه، مثلا CL40. یعنی بعد از خواستن، رم چند تیک صبر می‌کنه تا جواب بده. هر چی کمتر، بهتر. این دو تا با هم سرعت واقعی رو می‌سازن؛ یه رم با MT/s بیشتر و CL بیشتر، لزوما از یه رم با هر دو کمتر سریع‌تر نیست. برای بیشتر کارها، اول اندازه‌ی رم مهمه، بعد سرعتش.

پروفایل سرعت

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

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

کانال

پردازنده با رم از چند تا جاده‌ی جدا حرف می‌زنه، به اسم کانال. اگه دو تا ماژول رم توی شیارهای درست باشن، دو تا کانال با هم کار می‌کنن و داده دو برابر جابه‌جا می‌شه.

یک کانال: یه جاده.
دو کانال: دو تا جاده، با هم.

پس دو تا ۸ گیگ معمولا از یه ۱۶ گیگ سریع‌تره، چون دو تا کانال رو پر می‌کنه. پردازنده‌های سرور معمولا کانال‌های خیلی بیشتری دارن، مثلا هشت یا دوازده تا.

رم سرور

توی میلیاردها بیت، گاهی یه بیت خود به خود برمی‌گرده؛ مثلا از یه ذره‌ی پرانرژی که از فضا رسیده، یا یه ایراد کوچیک توی تراشه. روی کامپیوتر خونه، شاید یه برنامه یه بار هنگ کنه. روی سرور، ممکنه یه عدد غلط توی دیتابیس بره و کسی نفهمه.

برای همین رم سرور معمولا ECC داره، کوتاه‌شده‌ی Error-Correcting Code، یعنی «کد تصحیح خطا». کنار هر تیکه داده چند تا بیت اضافه نگه می‌داره که با اونا، اگه یه بیت خراب شد، می‌فهمه کدومه و درستش می‌کنه. رم سرورها اغلب «رجیستر»دار هم هست؛ یه تراشه‌ی کمکی که اجازه می‌ده ماژول‌های خیلی بیشتری به پردازنده وصل بشن.

رم گوشی

رم گوشی و خیلی از لپ‌تاپ‌های باریک یه نسخه‌ی کم‌مصرفه به اسم LPDDR، کوتاه‌شده‌ی Low-Power DDR. معمولا مستقیم روی برد یا حتی کنار خود پردازنده لحیم شده، و نمی‌شه بعدا عوضش کرد یا بیشترش کرد. پس موقع خریدن گوشی یا لپ‌تاپ باریک، رم رو همون اول درست انتخاب کنید.

یه حساب کوچیک

بیاید یه بار با عدد ببینیم رم چقدر داده جابه‌جا می‌کنه. هر کانال رم ۶۴ بیت پهنا داره، یعنی ۸ بایت. اگه رم DDR5 با ۵۶۰۰ MT/s باشه، یعنی هر ثانیه ۵۶۰۰ میلیون بار، هر بار ۸ بایت. ضرب کنیم، می‌شه حدود ۴۵ گیگابایت در ثانیه، فقط از یه کانال.

با دو تا کانال، حدود ۹۰ گیگابایت در ثانیه. مقایسه کنید با یه SSD خیلی سریع که شاید ۷ گیگابایت در ثانیه بخونه. یعنی رم، حتی از بهترین دیسک‌ها، بیش از ده برابر داده‌ی بیشتری در هر ثانیه جابه‌جا می‌کنه، و تاخیرش هم هزار بار کمتره.

هر برنامه، رم خودش

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

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

خواب و خواب زمستونی

لپ‌تاپ رو که می‌بندید و می‌ره توی حالت «خواب» (sleep)، چرا وقتی باز می‌کنید همه‌چیز همون‌جاست که بود؟ چون توی خواب، بیشتر کامپیوتر خاموش می‌شه ولی رم یه ذره برق می‌گیره تا سطل‌هاش رو پر نگه داره. برای همین خواب هم یه کم باتری می‌خوره، و اگه باتری کامل تموم بشه، کار ذخیره‌نشده از دست می‌ره.

یه حالت دیگه هم هست، «خواب زمستونی» (hibernate): کامپیوتر کل چیزی که توی رمه رو روی دیسک می‌نویسه، بعد کاملا خاموش می‌شه. دفعه‌ی بعد، اون نسخه رو از دیسک برمی‌گردونه توی رم. برق نمی‌خوره، ولی روشن شدنش یه کم بیشتر طول می‌کشه. یعنی همون فرق رم و دیسک، این بار توی کار هر روزتون.

وقتی رم پر می‌شه

اگه برنامه‌ها بیشتر از رم موجود جا بخوان چی می‌شه؟ سیستم‌عامل یه کار می‌کنه: یه تیکه از چیزهایی که الان کمتر لازمن رو از رم می‌بره روی دیسک، تا جا باز بشه. به این جای روی دیسک می‌گن سوآپ (swap). وقتی دوباره لازم شد، برمی‌گرده.

مثل معلمی که وایت‌بردش پر شده و یه قسمت رو توی دفترچه یادداشت می‌کنه تا پاکش کنه. کار ادامه پیدا می‌کنه، ولی هر بار رفت‌وبرگشت به دفترچه، خیلی کندتره. اگه این رفت‌وبرگشت زیاد بشه، کل سیستم کند می‌شه. و اگه سوآپ هم پر بشه، لینوکس یه برنامه رو می‌بنده تا بقیه زنده بمونن؛ روی سرور، این برنامه گاهی دیتابیسه، و سایت می‌خوابه.

رمی که خالی نیست

یه چیز که خیلی‌ها رو می‌ترسونه: روی سرور لینوکس می‌بینید رم تقریبا پره، در حالی که برنامه‌ها خیلی کمش رو گرفتن. نگران نباشید. لینوکس هر جای خالی رم رو برای نگه داشتن فایل‌هایی که اخیرا از دیسک خونده استفاده می‌کنه، تا دفعه‌ی بعد سریع‌تر باشه؛ بهش می‌گن کش صفحه (page cache).

این کش هر وقت برنامه‌ای رم لازم داشت، فورا کنار می‌ره. پس عددی که مهمه «free» (خالی) نیست، «available» (در دسترس)ه: رمی که اگه لازم بشه، می‌شه داد. رم خالی واقعا یعنی رم هدررفته.

رم روی سرور سایت

روی سرور یه سایت وردپرسی، چند تا برنامه با هم رم رو تقسیم می‌کنن:

سیستم‌عاملPHP و وردپرسدیتابیسردیس (کش)کش فایل‌ها
یه نمونه از تقسیم ۴ گیگابایت رم روی سرور یه سایت وردپرسی؛ هر سایت عددهای خودش رو داره.

سیستم‌عامل یه تیکه‌ی کوچیک می‌خواد. PHP و وردپرس، برای هر درخواستی که هم‌زمان اجرا می‌شه، یه «کارگر» دارن که هر کدوم معمولا چند ده مگابایت رم می‌گیره. دیتابیس یه بخش بزرگ رو برای نگه داشتن داده‌های پرکاربرد توی رم برمی‌داره، تا هر بار سراغ دیسک نره. ردیس، اگه باشه، کش سوال‌های تکراری رو نگه می‌داره. و هر چی می‌مونه، لینوکس برای کش فایل‌ها استفاده می‌کنه.

سایت چقدر رم می‌خواد؟

یه حساب ساده: اگه هر کارگر PHP حدود ۶۰ مگابایت رم بگیره، و بخواید ۲۰ تا درخواست هم‌زمان رو جواب بدید، فقط PHP حدود ۱٫۲ گیگابایت می‌خواد. دیتابیس یکی دو گیگ، سیستم‌عامل و ردیس هم چند صد مگ. پس برای یه سایت وردپرسی معمولی، ۴ گیگابایت شروع راحتیه.

فروشگاه ووکامرس پربازدید، یا سایتی که چند تا سایت دیگه هم روی همون سرور داره، ۸ گیگ یا بیشتر لازم داره. عدد دقیق رو باید از روی خود سایت و بازدیدش دید؛ این حساب فقط یه شروعه.

دیدن رم

روی ویندوز، مدیر وظایف می‌گه چقدر رم دارید و چقدرش مصرف شده. روی سرور لینوکس:

  1. free -h رم و سوآپ رو نشون می‌ده؛ ستون available مهم‌ترینه.
  2. htop نوار رم رو نشون می‌ده و می‌گه کدوم برنامه چقدر می‌گیره.
  3. اگه سوآپ مدام پر و خالی می‌شه، یعنی رم کمه.

رم بیشتر

روی کامپیوتر رومیزی، رم اضافه کردن یکی از ارزون‌ترین راه‌های سریع‌تر کردنه، به شرط اینکه نسل درست باشه، شیار خالی داشته باشید، و ترجیحا ماژول‌ها جفت باشن تا کانال‌ها پر بشن. روی سرور مجازی، رم بیشتر معمولا یه کلیک توی پنل شرکته و یه بار خاموش و روشن کردن سرور.

ولی رم بیشتر همه‌چیز رو درست نمی‌کنه. اگه یه برنامه بد نوشته شده و هر چی رم بهش بدید بیشتر می‌خواد، اول اون رو درست کنید.

رم توی سرور مجازی

وقتی سرور مجازی با «۴ گیگ رم» می‌خرید، معمولا همون ۴ گیگ واقعا برای شما کنار گذاشته شده. ولی بعضی جاها یه روش دیگه هم هست: به همه‌ی سرورهای مجازی روی یه دستگاه، روی هم بیشتر از رم واقعی دستگاه رم می‌دن، به امید اینکه همه با هم ازش استفاده نکنن. مثل هواپیمایی که بیشتر از صندلی‌هاش بلیت می‌فروشه.

اگه همه با هم بیان، یکی بی‌جا می‌مونه؛ یعنی سرور شما وسط کار رم کم میاره، یا کند می‌شه. برای همین وقتی سرور مجازی می‌خرید، بپرسید رم «تضمین‌شده»‌ست یا نه. روی سرور خودتون هم با free -h ببینید رمی که بهتون گفتن، واقعا هست.

چرا مرورگر این‌قدر رم می‌خوره

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

ولی هر برنامه‌ی جدا، یه تیکه رم جدا می‌خواد. پس بیست تا تب، یعنی بیست تا برنامه‌ی کوچیک. سایت‌های سنگین هم که کلی کد و عکس دارن، هر کدوم سهم بیشتری می‌گیرن. این یکی از دلیل‌هاییه که سایت سبک فقط برای سرعت نیست؛ روی گوشی‌هایی که رم کمی دارن، سایت سنگین ممکنه باعث بشه بقیه‌ی برنامه‌ها بسته بشن.

رم خراب

رم هم می‌تونه خراب بشه، و نشونه‌هاش گیج‌کننده‌ست: کامپیوتر بی دلیل هنگ می‌کنه یا خودش خاموش و روشن می‌شه، برنامه‌ها گاهی بسته می‌شن، فایلی که کپی کردید خراب از آب درمیاد. چون مشکل گاهی‌گاهیه، آدم اول به همه‌چیز شک می‌کنه جز رم.

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

نشت حافظه

هر برنامه وقتی کاری داره، یه تیکه از رم رو برمی‌داره، و وقتی کارش تموم شد، باید پسش بده. اگه یه برنامه یادش بره پس بده، با هر بار کار، کمی بیشتر رم می‌گیره و هیچ‌وقت ول نمی‌کنه. بهش می‌گن نشت حافظه (memory leak).

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

رم و رمزها

هر رمزی که تایپ می‌کنید، هر کلید رمزنگاری که سرور برای HTTPS استفاده می‌کنه، یه مدت توی رم هست؛ چون پردازنده باید باهاش کار کنه. برای همین سیستم‌عامل‌ها جدا کردن رم برنامه‌ها رو جدی می‌گیرن، و برنامه‌های امنیتی بعد از کار، اون تیکه از رم رو عمدا پاک می‌کنن.

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

رم کارت گرافیک

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

برای همین وقتی درباره‌ی اجرای مدل‌های هوش مصنوعی روی یه کامپیوتر حرف می‌زنن، عدد مهم معمولا VRAM‌ئه، نه رم اصلی.

رم چسبیده به تراشه

یه نوع رم دیگه هم هست که اسمش زیاد شنیده می‌شه؛ HBM، کوتاه‌شده‌ی High Bandwidth Memory، یعنی «حافظه‌ی پهنای باند بالا». اینجا تراشه‌های رم روی هم چیده می‌شن و درست کنار پردازنده یا پردازنده‌ی گرافیکی، روی یه تیکه‌ی مشترک، نشونده می‌شن. چون فاصله خیلی کوتاهه و هزاران سیم موازی دارن، پهنای باندشون چند برابر رم معمولیه.

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

کمی تاریخ

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

سال ۱۹۷۰ اولین تراشه‌ی DRAM تجاری اومد، با ۱ کیلوبیت جا؛ یعنی هزار و بیست‌وچهار تا سطل. امروز یه ماژول رم معمولی ده‌ها گیگابایت داره، یعنی صدها میلیارد سطل، روی یه تیکه به اندازه‌ی یه خط‌کش.

تمرین

  1. ببینید گوشی یا لپ‌تاپ شما چقدر رم داره و چقدر حافظه‌ی ذخیره؛ این دو تا رو با هم قاطی نکنید.
  2. چند تا برنامه‌ی سنگین باز کنید و ببینید مصرف رم چطور بالا می‌ره.
  3. اگه سرور دارید، free -h رو بزنید و available رو با کل رم مقایسه کنید.

اشتباه‌های رایج

  • «رم همون حافظه‌ی گوشیه.» نه؛ رم حافظه‌ی کاریه، «حافظه» جای عکس و برنامه‌ست.
  • «رم سرور پره، پس کمه.» لینوکس رم خالی رو برای کش فایل‌ها استفاده می‌کنه؛ به available نگاه کنید.
  • «سوآپ یعنی رم بیشتر.» سوآپ یه کمک کند روی دیسکه؛ اگه زیاد استفاده بشه، سیستم کند می‌شه.
  • «یه ۱۶ گیگ همون دو تا ۸ گیگه.» دو تا ماژول دو تا کانال رو پر می‌کنن و معمولا سریع‌ترن.
  • «هر رمی به هر سیستمی می‌خوره.» نسل‌ها با هم جور نیستن و رم خیلی از لپ‌تاپ‌های باریک لحیم شده‌ست.

جمع‌بندی. آنچه از این درس با خودتان می‌برید.

  • رم حافظه‌ی کاریه: سریع و موقت؛ دیسک حافظه‌ی ذخیره‌ست: کندتر و همیشگی.
  • رم معمولی (DRAM) هر بیت رو توی یه خازن کوچیک نگه می‌داره که نشت می‌کنه و مدام باید دوباره پر بشه.
  • سرعت رم رو با نسل (مثل DDR5)، MT/s و تاخیر (CL) می‌گن؛ دو کانال از یه کانال سریع‌تره.
  • رم سرور معمولا ECC داره، یعنی خطای بیت رو خودش درست می‌کنه.
  • اگه رم کم بیاد، سیستم از دیسک کمک می‌گیره (سوآپ) و همه‌چیز کند می‌شه.

خودتون رو بسنجید

۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو می‌بینید: چند تا درست، چند تا نادرست.

خودتون رو بسنجید

۱۵ پرسش

  • هر بار پرسش‌ها و ترتیب گزینه‌ها عوض می‌شه.
  • تا آخر نمی‌گیم کدوم جواب درست بوده؛ می‌تونید برگردید و جوابتون رو عوض کنید.
  • آخرش کارنامه می‌گیرید: چند تا درست، چند تا نادرست.
  • اگه وسطش بستید، دوباره که باز کنید از همون‌جا ادامه می‌دید.

فصل‌های این درس