گوگل نسخه جدیدی از سیستم اختصاصی حافظه TCMalloc را منتشر کرده است


Google نسخه جدیدی از سیستم اختصاصی حافظه TCMalloc را معرفی کرده است که در بسیاری از پروژه های داخلی گوگل استفاده می شود. کد TCMalloc به زبان C ++ نوشته شده و تحت مجوز Apache توزیع می شود. این نیاز به کامپایلری با پشتیبانی از C ++ 17 برای زبان C ++ و C11 برای زبان C (gcc 9.2+ یا clang 9.0+) دارد. از سیستم عامل ها فقط لینوکس (x86 ، PPC) پشتیبانی می شود.

قابل توجه است که از سال 2005 نسخه دیگری از tcmalloc وجود دارد ، که به عنوان بخشی از بسته gperftools (ابزارهای عملکرد Google) تهیه شده است. این دو پروژه متفاوت است که ریشه های مشترکی دارند. TCMalloc جدید در واقع تلاشی برای باز کردن کد تحولات داخلی Google مرتبط است ، اما هدف آن تهیه ABI پایدار و پشتیبانی از طیف گسترده ای از سیستم عامل ها نیست. تعمیر و نگهداری tcmalloc قدیمی از gperftools ادامه خواهد یافت ، اما ویژگی های جدید مانند اتصال به حافظه پنهان به CPU ، برنامه ریزی نشده است که به آن منتقل شود.

TCMalloc شامل اجرای اپراتور C-function malloc () و عملگر C ++ "جدید" است که برای دستیابی به کارایی بالا و کاربرد در برنامه های چند رشته بهینه شده است. TCMalloc همچنین قابلیت های درون نگری و پروفایل را فراهم می کند که به برنامه امکان می دهد اطلاعات دقیقی درباره استفاده از حافظه در پشته دریافت کند. کد از بهینه سازی های مبتنی بر ویژگی های مدرن زبان C ++ مانند موارد استفاده می کند
عبارت را با مشخص کردن اندازه از C ++ 14 و اختصاص حافظه با تراز از C ++ 17 حذف کنید.

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

ویژگی های اصلی TCMalloc:

  • به سرعت حافظه را با استفاده از ذخیره سازی اختصاص دهید. بیشتر عملیات تخصیص حافظه نیازی به قفل ندارند ، که مقیاس پذیری خوبی را برای برنامه های چند رشته ای با همزمانی بالا فراهم می کند.
  • استفاده انعطاف پذیر از حافظه ، استفاده مجدد از مناطق حافظه آزاد شده برای اشیاء در اندازه های مختلف یا بازگشت حافظه به سیستم عامل.
  • سربار کم برای هر جسم با اختصاص صفحات اشیاء با همان اندازه و ارائه کارآمد اشیاء کوچک. صفحات منطقی را در اندازه های 4KiB ، 8KiB ، 32KiB و 256KiB پشتیبانی می کند. به عنوان مثال ، هنگام درخواست بلوک های 512 بایت حافظه ، یک صفحه کامل 4KiB برای اشیاء 512 بایت اختصاص داده می شود ، که در آن 8 اشیاء می توانند در جای خود قرار بگیرند.
  • تنظیم دقیق از طریق تعیین اندازه حافظه پنهان و پارامترهای شدت بازگشت حافظه در سیستم عامل امکان پذیر است.
  • ارائه اطلاعات دقیق برای تجزیه و تحلیل استفاده از حافظه توسط یک برنامه.

OpenNET


نظر شما