proc_buddyinfo -
اطلاعات
تکهتکه
شدن حافظه و
الگوریتم
بادی
- /proc/buddyinfo
- این پرونده
حاوی
اطلاعاتی
است که برای
عیبیابی و
بررسی
مشکلات
تکهتکه
شدن حافظه
به کار
میرود. هر
سطر با
شناسه گره (Node)
و نام ناحیه
(Zone) شروع
میشود که
در کنار
یکدیگر یک
محدوده از
حافظه را
مشخص
میکنند.
سپس تعداد
تکههای (Chunks)
در دسترس از
مرتبههای
(Orders) مختلفی که
این نواحی
به آنها
تقسیم
شدهاند،
درج میشود.
اندازه هر
مرتبه بر
حسب بایت با
فرمول زیر
محاسبه
میشود:
-
(2^order) * PAGE_SIZE
- الگوریتم
تخصیصدهنده
بادی
دودویی (Binary buddy allocator)
درون هسته،
برای پاسخ
به
درخواستهای
تخصیص و
مقابله با
تکهتکه
شدن حافظه،
یک تکه را
به دو تکه
با مرتبه
کوچکتر (در
نتیجه با
نصف اندازه)
تقسیم
میکند یا
دو تکه
متوالی را
در یک تکه
بزرگتر با
مرتبه
بالاتر (در
نتیجه با
اندازه دو
برابر)
ادغام
مینماید.
شماره
مرتبه با
شماره ستون
مطابقت
دارد،
زمانی که
شمارش از
صفر آغاز
شود.
- برای مثال
در یک سیستم
x86-64:
Node 0, zone DMA 1 1 1 0 2 1 1 0 1 1 3
Node 0, zone DMA32 65 47 4 81 52 28 13 10 5 1 404
Node 0, zone Normal 216 55 189 101 84 38 37 27 5 3 587
- در این
مثال، یک
گره شامل سه
ناحیه وجود
دارد و ۱۱
اندازه
مختلف برای
تکهها
تعریف شده
است. اگر
اندازه
صفحه ۴
کیلوبایت
باشد،
آنگاه
نخستین
ناحیه به
نام DMA (در x86
نخستین ۱۶
مگابایت
حافظه)
دارای ۱ تکه
۴
کیلوبایتی
(مرتبه ۰) در
دسترس و ۳
تکه ۴
مگابایتی
(مرتبه ۱۰)
در دسترس
است.
- اگر حافظه
به شدت
تکهتکه
شده باشد،
شمارندههای
مربوط به
تکههای با
مرتبه
بالاتر صفر
خواهند بود
و تخصیص
بخشهای
بزرگ و
پیوسته با
شکست مواجه
خواهد شد.
- اطلاعات
بیشتر
درباره این
نواحی را
میتوان در
/proc/zoneinfo یافت.