
သင်တန်းသားများအတွက် ပြင်ဆင်ထားသော ဆောင်းပါးကို ဘာသာပြန်ခြင်း။ .
Hugepages ကို ဘယ်လိုစစ်ဆေးပြီး အသုံးပြုခွင့်ပေးရမလဲဆိုတာကို အရင်က ကျွန်တော်ပြောခဲ့ဖူးပါတယ် Linux.
သင့်တွင် Hugepages ကို အမှန်တကယ်အသုံးပြုရန် နေရာရှိမှသာ ဤဆောင်းပါးသည် အသုံးဝင်မည်ဖြစ်သည်။ Hugepages သည် ကုန်ထုတ်စွမ်းအားကို အံ့မခန်းတိုးတက်စေမည့် အလားအလာကြောင့် လှည့်စားခံရသော လူများစွာကို ကျွန်ုပ်တွေ့ဖူးပါသည်။ သို့သော် ဧရာမစာမျက်နှာသည် ရှုပ်ထွေးသောအကြောင်းအရာဖြစ်ပြီး မှားယွင်းစွာအသုံးပြုပါက စွမ်းဆောင်ရည်ကို ကျဆင်းစေနိုင်သည်။
အပိုင်း ၁: hugepages ကိုဖွင့်ထားကြောင်း စစ်ဆေးပါ Linux (မူရင်း )
ပြဿနာ:
သင့်စနစ်တွင် HugePages ကို ဖွင့်ထားခြင်း ရှိမရှိ စစ်ဆေးရန် လိုအပ်သည်။
ဖြေရှင်းချက်:
တော်တော်ရိုးရှင်းပါတယ်-
cat /sys/kernel/mm/transparent_hugepage/enabledသင်ဤကဲ့သို့သောတစ်ခုခုကိုရလိမ့်မည်-
always [madvise] neverရနိုင်သောရွေးချယ်စရာများစာရင်းကို သင်တွေ့လိမ့်မည် (အမြဲတမ်း၊ madvise၊ ဘယ်တော့မှ) နှင့် လက်ရှိအသုံးပြုနေသည့် ရွေးချယ်မှုအား ကွင်းစဥ်များတွင် ထည့်သွင်းထားမည် (ပုံမှန်အားဖြင့် madvise).
madvise ဆိုလိုသည်မှာ၊ transparent hugepages ဧရာမစာမျက်နှာများကို အသုံးပြု၍ အတိအလင်း တောင်းဆိုသည့် မန်မိုရီဧရိယာများအတွက်သာ ဖွင့်ထားသည်။ .
အမြဲ ဆိုလိုသည်မှာ၊ transparent hugepages လုပ်ငန်းစဉ်အားလုံးအတွက် အမြဲဖွင့်ထားသည်။ ၎င်းသည် ပုံမှန်အားဖြင့် စွမ်းဆောင်ရည်ကို ပိုမိုကောင်းမွန်စေသော်လည်း သင့်တွင် လုပ်ငန်းစဉ်များစွာသည် မမ်မိုရီပမာဏ အနည်းငယ်စားသုံးသည့် အသုံးပြုမှုကိစ္စတစ်ခုရှိပါက၊ အလုံးစုံမှတ်ဉာဏ်ဝန်အား သိသိသာသာတိုးလာနိုင်သည်။
ဘယ်တော့မှ ဆိုလိုသည်မှာ၊ transparent hugepages madvise ကို အသုံးပြု၍ တောင်းဆိုသည့်တိုင် မပါဝင်ပါ။ ပိုမိုသိရှိရန်၊ ဆက်သွယ်ပါ။ အဓိက Linux.
ပုံသေတန်ဖိုးကို ဘယ်လိုပြောင်းမလဲ။
option ကို 1: တိုက်ရိုက်ပြောင်းလဲပါ။ sysfs (ပြန်လည်စတင်ပြီးနောက် ပါရာမီတာသည် ၎င်း၏မူလတန်ဖိုးသို့ ပြန်သွားလိမ့်မည်)။
echo always >/sys/kernel/mm/transparent_hugepage/enabled
echo madvise >/sys/kernel/mm/transparent_hugepage/enabled
echo never >/sys/kernel/mm/transparent_hugepage/enabledoption ကို 2− ပြုပြင်ထားသော ဖွဲ့စည်းမှုပုံစံဖြင့် kernel ကို ပြန်လည်ပေါင်းစည်းခြင်းဖြင့် စနစ်ပုံသေကို ပြောင်းလဲပါ (သင်စိတ်ကြိုက် kernel ကိုအသုံးပြုနေမှသာ ဤရွေးချယ်မှုကို အကြံပြုပါသည်)။
- အမြဲတမ်း ပုံသေသတ်မှတ်ရန်၊ အသုံးပြုပါ-
CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y # Comment out CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y - madvise ကို မူရင်းအဖြစ် သတ်မှတ်ရန်၊ အသုံးပြုပါ-
CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y # Comment out CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
အပိုင်း 2- HugePages ၏ အားသာချက်များနှင့် အားနည်းချက်များ
Hugepages ကိုအသုံးပြုခြင်း၏ အားသာချက်၊ အားနည်းချက်များနှင့် ဖြစ်နိုင်ချေရှိသော ချို့ယွင်းချက်များကို ရွေးချယ်ရှင်းပြရန် ကျွန်ုပ်တို့ ကြိုးစားပါမည်။ Hugepages သည် panacea ဖြစ်သည်ဟု အတွေးဝင်နေသူများအတွက် နည်းပညာအရ ရှုပ်ထွေးပြီး pedantic ဆောင်းပါးသည် နားလည်ရန် ခက်ခဲနိုင်သည့်အတွက်ကြောင့်၊ ရိုးရှင်းမှုအတွက် တိကျမှုကို ကျွန်ုပ်စွန့်လွှတ်ပါမည်။ အကြောင်းအရာများစွာသည် အမှန်တကယ်ရှုပ်ထွေးပြီး အလွန်ရိုးရှင်းကြောင်း မှတ်သားထားသင့်ပါသည်။
ကျွန်ုပ်တို့ပြောနေတာက 64-bit x86 စနစ်တွေအကြောင်းပါ။ Linuxပြီးတော့ ခေတ်သစ်ပတ်ဝန်းကျင်တိုင်းလိုလိုမှာလိုပဲ စနစ်က transparent hugepages ကို ပံ့ပိုးပေးတယ်လို့ ကျွန်တော် ရိုးရိုးလေး ယူဆထားပါတယ် (ဘာလို့လဲဆိုတော့ hugepages တွေကို အစားထိုးလို့မရတာက အားနည်းချက်တစ်ခု မဟုတ်လို့ပါ)။ Linux.
ကျွန်ုပ်သည် အောက်ဖော်ပြပါ လင့်ခ်များတွင် နည်းပညာဆိုင်ရာ အသေးစိတ်ဖော်ပြချက်ကို ပူးတွဲတင်ပြပါမည်။
Virtual Memory
အကယ်၍ သင်သည် C++ ပရိုဂရမ်မာတစ်ဦးဖြစ်ပါက၊ မှတ်ဉာဏ်အတွင်းရှိ အရာဝတ္ထုများတွင် သီးခြားလိပ်စာများ (ညွှန်ပြတန်ဖိုးများ) ရှိသည်ကို သင်သိသည်။
သို့သော်၊ ဤလိပ်စာများသည် မှတ်ဉာဏ်အတွင်းရှိ ရုပ်ပိုင်းဆိုင်ရာလိပ်စာများ (RAM လိပ်စာများ) ကို ရောင်ပြန်ဟပ်ရန် မလိုအပ်ပါ။ ၎င်းတို့သည် virtual memory ရှိလိပ်စာများကိုကိုယ်စားပြုသည်။ ပရိုဆက်ဆာတွင် kernel သည် virtual memory ကို ရုပ်ပိုင်းဆိုင်ရာတည်နေရာသို့ ကူညီပေးသည့် အထူး MMU (memory management unit) module တစ်ခုရှိသည်။
ဤနည်းလမ်းသည် အားသာချက်များစွာရှိသော်လည်း အရေးကြီးဆုံးမှာ-
- စွမ်းဆောင်ရည် (အမျိုးမျိုးသောအကြောင်းပြချက်များအတွက်);
- ပရိုဂရမ်အထီးကျန်ခြင်းဆိုသည်မှာ အခြားပရိုဂရမ်တစ်ခု၏မှတ်ဉာဏ်မှ မည်သည့်ပရိုဂရမ်မှ မဖတ်နိုင်ပါ။
စာမျက်နှာတွေက ဘာတွေလဲ။
Virtual memory ကို စာမျက်နှာများအဖြစ် ပိုင်းခြားထားသည်။ စာမျက်နှာတစ်ခုစီတိုင်းသည် သီးခြားရုပ်ပိုင်းဆိုင်ရာမှတ်ဉာဏ်တစ်ခုသို့ ညွှန်ပြနိုင်ပြီး၊ ၎င်းသည် RAM အတွင်းရှိ ဧရိယာတစ်ခုကို ညွှန်ပြနိုင်သည်၊ သို့မဟုတ် ဗီဒီယိုကတ်ကဲ့သို့သော ရုပ်ပိုင်းဆိုင်ရာစက်ပစ္စည်းတစ်ခုအတွက် သတ်မှတ်ထားသောလိပ်စာကို ညွှန်ပြနိုင်သည်။
RAM ကို ညွှန်ပေးသော စာမျက်နှာ အများစု သည် သင့် hard drive (သို့) SSD တွင် သိမ်းဆည်းထား သည်ဟု ဆိုလိုသည်။ kernel သည် စာမျက်နှာတစ်ခုစီ၏ ရုပ်ပိုင်းဆိုင်ရာ အပြင်အဆင်ကို စီမံခန့်ခွဲသည်။ အယောင်ဆောင်ထားသော စာမျက်နှာကို ဝင်ကြည့်ပါက၊ kernel သည် memory ကိုဝင်ရောက်ရန်ကြိုးစားနေသော thread ကိုရပ်တန့်ပြီး၊ စာမျက်နှာကို hard drive/SSD မှ RAM သို့ဖတ်ကာ၊ ထို့နောက် thread ကို ဆက်လက်လုပ်ဆောင်သည်။
ဤလုပ်ငန်းစဉ်သည် ဖောက်ထွင်းမြင်ရသောကြောင့် HDD/SSD မှ တိုက်ရိုက်ဖတ်ရန် မလိုအပ်ပါ။ ပုံမှန်စာမျက်နှာများ၏ အရွယ်အစားမှာ 4096 bytes ဖြစ်သည်။ ကြီးမားသောစာမျက်နှာအရွယ်အစားမှာ 2 megabytes ဖြစ်သည်။
ဘာသာပြန်-ဆက်စပ်ကြားခံ (TLB)
ပရိုဂရမ်တစ်ခုသည် မန်မိုရီစာမျက်နှာတစ်ခုကို ဝင်ရောက်သည့်အခါ၊ CPU မှ အချက်အလက်ကိုဖတ်ရန် မည်သည့်ရုပ်ပိုင်းဆိုင်ရာစာမျက်နှာကို သိရမည် (ဆိုလိုသည်မှာ၊ အတုမဲ့လိပ်စာမြေပုံတစ်ခုပါရှိသည်)။
kernel တွင် အသုံးပြုနေသည့် စာမျက်နှာများနှင့်ပတ်သက်သည့် အချက်အလက်အားလုံးပါဝင်သည့် ဒေတာဖွဲ့စည်းပုံ (စာမျက်နှာဇယား) ရှိသည်။ ဤဒေတာဖွဲ့စည်းပုံကို အသုံးပြု၍ သင်သည် virtual လိပ်စာတစ်ခုအား ရုပ်ပိုင်းဆိုင်ရာလိပ်စာတစ်ခုသို့ မြေပုံဆွဲနိုင်ပါသည်။
သို့သော်၊ စာမျက်နှာဇယားသည် အလွန်ရှုပ်ထွေးပြီး နှေးသောကြောင့် လုပ်ငန်းစဉ်တစ်ခုသည် memory ကိုဝင်ရောက်သည့်အခါတိုင်း ဒေတာဖွဲ့စည်းပုံတစ်ခုလုံးကို ခွဲခြမ်းစိတ်ဖြာ၍မရပါ။
ကံကောင်းထောက်မစွာ၊ ကျွန်ုပ်တို့၏ပရိုဆက်ဆာတွင် virtual နှင့် ရုပ်ပိုင်းဆိုင်ရာလိပ်စာများကြားတွင် မြေပုံထုတ်ခြင်းကို သိမ်းဆည်းထားသည့် TLB တစ်ခုရှိသည်။ ဆိုလိုသည်မှာ ကျွန်ုပ်တို့သည် ပထမဆုံးဝင်ရောက်ရန်ကြိုးပမ်းမှုတွင် စာမျက်နှာဇယားကို ခွဲခြမ်းစိတ်ဖြာရန် လိုအပ်သော်လည်း၊ စာမျက်နှာသို့ နောက်ဆက်တွဲဝင်ရောက်မှုများအားလုံးကို TLB တွင် ကိုင်တွယ်နိုင်ပြီး လျင်မြန်စွာလုပ်ဆောင်နိုင်စေမည်ဖြစ်သည်။
၎င်းကို ရုပ်ပိုင်းဆိုင်ရာ ကိရိယာတစ်ခုအဖြစ် အကောင်အထည်ဖော်ထားသောကြောင့် (၎င်းကို ပထမနေရာတွင် လျင်မြန်စေသည်)၊ ၎င်း၏စွမ်းရည်မှာ အကန့်အသတ်ရှိသည်။ ထို့ကြောင့် သင်သည် နောက်ထပ်စာမျက်နှာများကို ဝင်ရောက်ကြည့်ရှုလိုပါက၊ TLB သည် ၎င်းတို့အားလုံးအတွက် မြေပုံဆွဲခြင်းကို သိမ်းဆည်းထားနိုင်မည်မဟုတ်သောကြောင့် သင်၏ပရိုဂရမ်ကို များစွာနှေးကွေးသွားစေပါသည်။
ဧရာမစာမျက်နှာများသည် ကယ်တင်ခြင်းသို့ ရောက်ပါသည်။
ဒီတော့ TLB လျှံကျမှုကို ရှောင်ရှားဖို့ ကျွန်ုပ်တို့ ဘာလုပ်နိုင်မလဲ။ (ပရိုဂရမ်သည် တူညီသော မှတ်ဉာဏ်ပမာဏ လိုအပ်နေသေးသည်ဟု ကျွန်ုပ်တို့ ယူဆသည်)။
ဤသည်မှာ Hugepages ဝင်လာသည်။ TLB ထည့်သွင်းမှုတစ်ခုသာ လိုအပ်သည့် 4096 bytes အစား TLB တစ်ခုသည် ယခုအခါ အလွန်ကြီးမားသော 2 megabytes ကို ညွှန်ပြနိုင်ပြီဖြစ်သည်။ TLB တွင် ထည့်သွင်းမှု 512 ခုရှိသည်ဟု ယူဆကြပါစို့၊ ဤနေရာတွင် Hugepages မပါဘဲ ကျွန်ုပ်တို့သည် ကိုက်ညီနိုင်သည်-
4096 b⋅512=2 MBသို့ဆိုလျှင် ၎င်းတို့နှင့် ကျွန်ုပ်တို့ မည်သို့ နှိုင်းယှဉ်နိုင်မည်နည်း။
2 MB⋅512=1 GBအဲဒါကြောင့် Hugepages က အရမ်းမိုက်တယ်။ အားစိုက်ထုတ်စရာမလိုဘဲ ကုန်ထုတ်စွမ်းအားကို မြှင့်တင်နိုင်ပါတယ်။ ဒါပေမယ့် ဒီနေရာမှာ သိသာထင်ရှားတဲ့ သတိပေးချက်တွေရှိတယ်။
ဧရာမစာမျက်နှာများ အတုအယောင်
ကာနယ်သည် မန်မိုရီစာမျက်နှာတစ်ခုစီကို မည်မျှအသုံးပြုသည်ကို အလိုအလျောက် စောင့်ကြည့်သည်။ ရုပ်ပိုင်းဆိုင်ရာမှတ်ဉာဏ် (RAM) အလုံအလောက်မရှိပါက၊ kernel သည် ပိုအရေးကြီးသောစာမျက်နှာများအတွက် RAM အချို့ကို ရှင်းထုတ်ရန်အတွက် ဟာ့ဒ်ဒစ်တွင် အရေးကြီးသော လျော့နည်းသော (မကြာခဏ အသုံးနည်းသော) စာမျက်နှာများကို ရွှေ့ပါမည်။
မူအရ၊ Hugepages နှင့် အလားတူသည်။ သို့သော်၊ kernel သည် စာမျက်နှာတစ်ခုလုံးကိုသာ လဲလှယ်နိုင်ပြီး တစ်ဦးချင်း bytes မဟုတ်ပါ။
ကျွန်ုပ်တို့တွင် ဤကဲ့သို့သော အစီအစဉ်တစ်ခုရှိသည် ဆိုကြပါစို့။
char* mymemory = malloc(2*1024*1024); // Возьмем это за одну Hugepage!
// Заполним mymemory какими-либо данными
// Сделаем много других вещей,
// которые приведут к подмене страницы mymemory
// ...
// Запросим доступ только к первому байту
putchar(mymemory[0]); ဤကိစ္စတွင်၊ kernel သည် သင်တစ်ဘိုက်ကိုဖတ်ရန်အတွက် hard drive/SSD မှ အချက်အလက် 2 megabytes လောက်အထိ (ဖတ်ရန်) လိုအပ်မည်ဖြစ်သည်။ ပုံမှန်စာမျက်နှာများအတွက် 4096 bytes ကိုသာ hard drive/SSD မှ ဖတ်ရန် လိုအပ်သည်။
ထို့ကြောင့် ဧရာမစာမျက်နှာကို လွှမ်းမိုးထားလျှင် စာမျက်နှာတစ်ခုလုံးကို ဝင်ရောက်ကြည့်ရှုရန် လိုအပ်ပါက ဖတ်ရန် ပိုမြန်ပါသည်။ ဆိုလိုသည်မှာ သင်သည် မမ်မိုရီ၏ မတူညီသော အစိတ်အပိုင်းများကို ကျပန်းဝင်ရောက်ရန် ကြိုးစားနေပြီး ကီလိုဘိုက်အနည်းငယ်သာ ဖတ်နေပါက၊ သင်သည် ပုံမှန်စာမျက်နှာများကို အသုံးပြုပြီး အခြားမည်သည့်အရာကိုမျှ စိတ်မပူပါနှင့်။
အခြားတစ်ဖက်တွင်၊ သင်သည် memory ၏ကြီးမားသောအစိတ်အပိုင်းကို ဆက်တိုက်ဝင်ရောက်ရန် လိုအပ်ပါက၊ ဧရာမစာမျက်နှာများသည် သင်၏စွမ်းဆောင်ရည်ကို တိုးတက်စေမည်ဖြစ်သည်။ သို့သော်၊ သင်သည် ၎င်းကို ကိုယ်တိုင်စမ်းသပ်ရန် လိုအပ်သည် ( abstract software ဖြင့် မဟုတ်ဘဲ) နှင့် မည်သည့်အရာက ပိုမြန်သည်ကို ကြည့်ရန် လိုအပ်သည်။
မှတ်ဉာဏ်တွင် ခွဲဝေခြင်း။
သင် C ရေးပါက၊ သင်သည် သေးငယ်သော (သို့မဟုတ် နိုင်ထက်စီးနင်းနီးပါး) memory ပမာဏကို အစုအဝေးမှ နိုင်ထက်စီးနင်း တောင်းဆိုနိုင်သည်ကို သင်သိပါသည်။ malloc(). 30 bytes memory လိုတယ်ဆိုပါစို့။
char* mymemory = malloc(30);ပရိုဂရမ်မာတစ်ဦးအတွက် သင်သည် လည်ပတ်မှုစနစ်မှ မမ်မိုရီ 30 bytes ကို "တောင်းဆိုနေသည်" နှင့် pointer တစ်ခုကို virtual memory အချို့သို့ ပြန်ပေးနေကြောင်း ပေါ်လာနိုင်သည်။ ဒါပေမယ့် တကယ်တော့ malloc () function သည် function အတွင်းမှခေါ်ဆိုသော C function တစ်ခုဖြစ်သည်။ Operating System မှ Memory လွတ်ရန် တောင်းဆိုရန်
သို့ရာတွင်၊ ခွဲဝေမှုတစ်ခုစီအတွက် မှတ်ဉာဏ်ပိုများလာရန် တောင်းဆိုခြင်းသည် ထိရောက်မှုမရှိပါ။ အချို့သော memory segment သည် လွတ်မြောက်ပြီးဖြစ်ဖွယ်ရှိသည်။ (free())ပြီးတော့ အဲဒါကို ပြန်သုံးလို့ရတယ်။ malloc() လွတ်လပ်သောမှတ်ဉာဏ်ကို ပြန်လည်အသုံးပြုရန်အတွက် အလွန်ရှုပ်ထွေးသော အယ်လဂိုရီသမ်များကို အကောင်အထည်ဖော်သည်။
တစ်ချိန်တည်းမှာပင် အရာအားလုံးသည် သင့်အတွက် သတိမပြုမိဘဲ ဖြစ်နေသည်၊ ထို့ကြောင့် သင့်အတွက် အဘယ်ကြောင့် စိတ်ပူရမည်နည်း။ ဒါပေမဲ့ အခက်အခဲရှိလို့ free() ဆိုလိုတာမဟုတ်ပါဘူး။ .
Memory Fragmentation ဆိုတာမျိုးရှိတယ်။ လွန်ကဲသော အခြေအနေများတွင်၊ ဘိုက်အနည်းငယ်သာ အသုံးပြုသည့် အစုအဝေးများ ရှိပြီး ကြားရှိအရာအားလုံး လွတ်မြောက်သွားချိန်တွင်၊ (free()).
မှတ်ဉာဏ်အပိုင်းပိုင်းခွဲခြင်းသည် မယုံနိုင်လောက်အောင် ရှုပ်ထွေးသောအကြောင်းအရာတစ်ခုဖြစ်ပြီး ပရိုဂရမ်တစ်ခုသို့ အသေးစားပြောင်းလဲမှုများပင် သိသိသာသာအကျိုးသက်ရောက်မှုရှိနိုင်သည်ကို သတိပြုပါ။ ကိစ္စအများစုတွင်၊ ပရိုဂရမ်များသည် သိသာထင်ရှားသော မှတ်ဉာဏ်အပိုင်းအစများကို မဖြစ်ပေါ်စေသော်လည်း အမှိုက်ပုံ၏အချို့နေရာများတွင် အကွဲကွဲအပြားပြားပြဿနာရှိလျှင် ကြီးမားသောစာမျက်နှာများသည် အခြေအနေကို ပိုဆိုးစေနိုင်ကြောင်း သတိပြုသင့်သည်။
ဧရာမစာမျက်နှာများကို ရွေးချယ်အသုံးပြုခြင်း။
ဤဆောင်းပါးကိုဖတ်ပြီးနောက်၊ သင့်ပရိုဂရမ်၏ မည်သည့်အစိတ်အပိုင်းများကို စာမျက်နှာအကြီးကြီးသုံးခြင်းမှ အကျိုးကျေးဇူးရရှိနိုင်ပြီး မည်သည့်အရာက မလုပ်နိုင်သည်ကို သင်ဆုံးဖြတ်ပြီးဖြစ်သည်။ ထို့ကြောင့် ဧရာမစာမျက်နှာများကို လုံးဝဖွင့်ထားသင့်ပါသလား။
ကံကောင်းစွာသင်အသုံးပြုနိုင်ပါသည်။ madvise()၎င်းသည် အသုံးဝင်မည့် ထို memory ဧရိယာများအတွက်သာ ဧရာမစာမျက်နှာကို ဖွင့်ရန်။
ပထမဦးစွာ၊ ဧရာမစာမျက်နှာများကို madvise() မုဒ်ကိုအသုံးပြု၍ လုပ်ဆောင်နေကြောင်း စစ်ဆေးပါ။ ဆောင်းပါးအစမှာ။
ထို့နောက်အသုံးပြုပါ။ madvise()ဧရာမစာမျက်နှာများကို မည်သည့်နေရာတွင် အသုံးပြုရမည်ကို kernel အား အတိအကျပြောပြရန်။
#include <sys/mman.h>
// Аллоцируйте большое количество памяти, которую будете использовать
size_t size = 256*1024*1024;
char* mymemory = malloc(size);
// Просто включите hugepages…
madvise(mymemory, size, MADV_HUGEPAGE);
// … и задайте следующее
madvise(mymemory, size, MADV_HUGEPAGE | MADV_SEQUENTIAL)ဤနည်းလမ်းသည် မှတ်ဉာဏ်ကို စီမံခန့်ခွဲနည်းအတွက် kernel အတွက် ရိုးရိုးရှင်းရှင်း အကြံဉာဏ်ဖြစ်ကြောင်း သတိပြုပါ။ ၎င်းသည် kernel သည် ပေးထားသော memory အတွက် ဧရာမစာမျက်နှာများကို အလိုအလျောက် အသုံးပြုမည်ဟု မဆိုလိုပါ။
စာရွက်စာတမ်းများကိုကိုးကားပါ။ Memory Management နှင့် ပတ်သက်၍ ပိုမိုလေ့လာရန် madvise()ဤအကြောင်းအရာသည် မယုံနိုင်လောက်အောင် နက်နဲသော သင်ယူမှုမျဉ်း ရှိသည်။ ဒါကြောင့် သင်တကယ်ကောင်းကောင်းတတ်ဖို့ ရည်ရွယ်ထားတယ်ဆိုရင် အပြုသဘောဆောင်တဲ့ ရလဒ်တွေကို မမျှော်လင့်ခင် ရက်သတ္တပတ်အနည်းငယ်လောက် ဖတ်ပြီး စမ်းသပ်ဖို့ ပြင်ဆင်ပါ။
ဘာဖတ်ရမလဲ။
မေးစရာရှိလား။ မှတ်ချက်များတွင်ရေးပါ။
source: www.habr.com
