Nga Painga me nga Kino o HugePages

Nga Painga me nga Kino o HugePages

Te whakamaoritanga o te tuhinga kua whakaritea mo nga tauira akoranga "Kaiwhakahaere Linux".

I mua, i korero ahau me pehea te whakamatautau me te whakahohe i nga Hugpages i runga i te Linux.
Ka whai hua noa tenei tuhinga mena ka whai waahi koe ki te whakamahi Hugepages. Kua tutaki ahau ki te tini o nga tangata e whakapohehehia ana e te tumanako ka whakapai ake a Hugpageges i nga hua. Heoi ano, he kaupapa uaua te whakangao nui, ka taea te whakaheke i te mahi ki te he te whakamahi.

Wāhanga 1: Manatoko kei te whakahohea nga wharangi nunui ki Linux (taketake konei)

He raruraru:
Me tirotiro koe mena kua whakahohea nga HugePages ki to punaha.

otinga:
He tino ngawari:

cat /sys/kernel/mm/transparent_hugepage/enabled

Ka whiwhi koe i tetahi mea penei:

always [madvise] never

Ka kite koe i te rarangi o nga whiringa e waatea ana (tonu, madvise, kore rawa), a ko te whiringa kaha i tenei wa ka kohia ki roto i nga reu (ma te taunoa madvise).

madvise ko te tikanga tera transparent hugepages ka taea anake mo nga waahi mahara e tono marama ana i nga wharangi nui madvise(2).

tonu ko te tikanga tera transparent hugepages ka taea i nga wa katoa mo nga tukanga katoa. Ko te tikanga ka pai ake te mahi, engari mena he take whakamahi koe he maha nga tukanga e pau ana te iti o te mahara, katahi ka nui haere te taumaha o te mahara.

e kore ko te tikanga tera transparent hugepages e kore e whakauruhia ahakoa ka tonohia madvise. Ki te mohio atu, whakapaa mai tuhinga Nga kakano Linux.

Me pehea te huri i te uara taunoa

Kōwhiringa 1: Huri tika sysfs (i muri i te whakaara ano ka hoki te tawhā ki tona uara taunoa):

echo always >/sys/kernel/mm/transparent_hugepage/enabled
echo madvise >/sys/kernel/mm/transparent_hugepage/enabled
echo never >/sys/kernel/mm/transparent_hugepage/enabled

Kōwhiringa 2: Hurihia te taunoa o te punaha ma te whakahiato ano i te kakano me te whirihoranga kua whakarereketia (e taunaki ana tenei whiringa mena kei te whakamahi koe i te kakano ritenga):

  • Hei tautuhi i nga wa katoa ma te taunoa, whakamahia:
    CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
    # Comment out CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
  • Hei tautuhi i te madvise hei taunoa, whakamahia:
    CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
    # Comment out CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y

Wāhanga 2: Nga Painga me nga Painga o nga Wharangi Nui

Ka ngana taatau ki te whakamaarama maataki i nga painga, nga ngoikoretanga me nga raru pea o te whakamahi Hugpageges. I te mea ka uaua te maarama ki te hunga e pohehe ana ki te whakaaro ko Hugpageges he rongoa, ka tapaea e ahau te tika mo te ngawari. He mea tika kia maumahara ko te nuinga o nga kaupapa he tino uaua, na reira he tino ngawari.

Kia mahara kei te korero matou mo nga punaha 64-bit x86 e whakahaere ana i te Linux, a kei te whakaaro noa ahau kei te tautoko te punaha i nga wharangi nui marama (na te mea ehara i te mea he kino te kore e tuhia nga wharangi nui), penei i te nuinga o nga Linux hou. taiao.

Ka taapirihia e au etahi atu korero hangarau ki nga hononga i raro nei.

Manatuamaharamahara

Mēnā he kaihātaka C++ koe, e mōhio ana koe he wāhitau motuhake ngā taonga kei roto i te mahara (he uara tohu).

Heoi, kaore enei wahitau e whakaatu ana i nga wahitau tinana i roto i te mahara (nga wahitau RAM). Ka tohu ratou i nga wahitau i roto i te mahara mariko. He kōwae MMU motuhake te pūtukatuka (waea whakahaere mahara) hei awhina i te kernel ki te mapi i te mahara mariko ki tetahi waahi tinana.

He maha nga painga o tenei huarahi, engari ko nga mea tino nui ko:

  • Mahinga (mo nga take maha);
  • Ko te wehenga o te papatono, ara, karekau he papatono e taea te panui mai i te mahara o tetahi atu papatono.

He aha nga wharangi?

Kua wehea te mahara mariko ki nga wharangi. Ka tohu ia wharangi takitahi ki tetahi mahara tinana, ka taea te tohu ki tetahi waahi i roto i te RAM, ka tohu ranei ki tetahi wahitau kua tohua ki tetahi taputapu tinana, penei i te kaari ataata.

Ko te nuinga o nga wharangi e pa ana ki a koe ka tohu ki te RAM, ka whakawhitia ranei, ko te tikanga kei te rongoa i runga i to puku pakeke, SSD ranei. Ka whakahaerehia e te kernel te whakatakotoranga tinana o ia wharangi. Mena ka uru atu ki tetahi wharangi pohehe, ka whakamutua e te kernel te miro e ngana ana ki te uru atu ki te mahara, ka panuihia te wharangi mai i te puku pakeke/SSD ki roto i te RAM, ka haere tonu ki te mahi i te miro.

Ko tenei tukanga he awa marama, ko te tikanga kaore i te panui tika mai i te HDD/SSD. Ko te rahi o nga wharangi noa he 4096 paita. He 2 mekapaita te rahi o nga whaarangi.

Whakatairanga-whakawhitinga parepare (TLB)

Ina uru atu tetahi papatono ki tetahi wharangi mahara, me mohio te PTM ko tehea wharangi tinana hei panui raraunga mai (ara, he mapi wahitau mariko).

Ko te kernel he hanganga raraunga (te ripanga wharangi) kei roto nga korero katoa mo nga wharangi e whakamahia ana. Ma te whakamahi i tenei hanganga raraunga, ka taea e koe te mapi i tetahi wahitau mariko ki tetahi wahitau tinana.

Heoi, he tino uaua, he puhoi hoki te ripanga wharangi, no reira kaore e taea e taatau te tarai i te hanganga raraunga katoa i nga wa katoa ka uru atu te mahi ki te mahara.

Waimarie, he TLB kei ta maatau tukatuka e huna ana i te mapi i waenga i nga wahitau mariko me te tinana. Ko te tikanga ahakoa me poroporoaki te ripanga wharangi i te nganatanga uru tuatahi, ko nga urunga katoa o muri mai ki te wharangi ka taea te whakahaere i roto i te TLB, kia tere te mahi.

Na te mea kua whakatinanahia hei taputapu tinana (e tere ana i te tuatahi), he iti noa tona kaha. Na, ki te hiahia koe ki te uru atu ki etahi atu wharangi, kare e taea e te TLB te penapena mapi mo ratou katoa, na reira ka tere haere to hotaka.

Ka tae mai a Hugpages ki te whakaora

Na me aha tatou ki te karo i te waipuke TLB? (Ki ta matou whakaaro me rite tonu te nui o te mahara o te papatono).

Koinei te waahi ka uru mai a Hugpages. Engari i te 4096 paita me tono kia kotahi noa te urunga TLB, ka taea e tetahi urunga TLB te tohu ki te 2 mekapaita nui. Me whakaaro kei te TLB nga whakaurunga 512, i konei kaore he Hugpages ka taea e tatou te whakarite:

4096 b⋅512=2 MB

Na me pehea e whakataurite ai tatou ki a raatau:

2 MB⋅512=1 GB

Koinei te take he whakamataku a Hugpages. Ka taea e ratou te whakapai ake i te hua me te kore e kaha. Engari he tohu nui kei konei.

Hungapages spoofing

Ka aro turuki aunoa te kernel e hia nga wa e whakamahia ai ia wharangi mahara. Ki te kore e nui te mahara tinana (RAM), ka nukuhia e te kernel nga wharangi iti (he iti te whakamahia) ki te kopae pakeke hei whakawātea etahi RAM mo nga wharangi nui ake.
Ko te tikanga, ka pa ano ki nga Hugepage. Heoi, ka taea e te kernel te huri i nga wharangi katoa, kaua nga paita takitahi.

Me kii tatou he kaupapa penei:

char* mymemory = malloc(2*1024*1024); // Возьмем это за одну Hugepage!
// Заполним mymemory какими-либо данными
// Сделаем много других вещей,
// которые приведут к подмене страницы mymemory
// ...
// Запросим доступ только к первому байту
putchar(mymemory[0]); 

I tenei take, me whakakapi e te kernel (panui) tae atu ki te 2 megabytes o nga korero mai i te puku pakeke/SSD kia panui koe i te paita kotahi. Mo nga wharangi auau, 4096 noa nga paita me panui mai i te puku pakeke/SSD.

Na, ki te whakakorehia te whaarangi nui, he tere ake te panui mena me uru koe ki te wharangi katoa. Ko te tikanga mena kei te ngana koe ki te uru matapōkeretia ki nga wahanga o te mahara me te panui noa i nga kiropaita e rua, me whakamahi koe i nga wharangi auau, kaua e manukanuka ki tetahi atu mea.

I tetahi atu taha, ki te hiahia koe ki te uru atu ki tetahi waahanga nui o te mahara, ka pai ake nga whaarangi o to mahi. Heoi, me whakamatau koe i a koe ano (kaore i te rorohiko waitara) ka kite he aha te mahi tere.

Te tohatoha i roto i te mahara

Mena ka tuhi koe i te C, ka mohio koe ka taea e koe te tono kia iti noa (te nui ranei) nga rahinga mahara mai i te puranga ma te whakamahi malloc(). Me kii me 30 paita o te mahara:

char* mymemory = malloc(30);

Ki te kaihōtaka, te ahua kei te "tono" koe i te 30 paita o te mahara mai i te punaha whakahaere me te whakahoki i tetahi atatohu ki etahi mahara mariko. Engari mau malloc () he mahi C noa e waea mai ana i roto i te mahi brk me te sbrk ki te tono, ki te whakawātea pūmahara mai i te punaha whakahaere.

Heoi, ko te tono kia nui ake te mahara mo ia tohatanga karekau e whai hua; ko te mea pea kua wetekina etahi wahanga mahara (free()), a ka taea e tatou te whakamahi ano. malloc() ka whakatinana i nga algorithms tino uaua mo te whakamahi ano i te mahara kua waatea.

I te wa ano, ka puta nga mea katoa kaore koe e mohio, na he aha koe ka awangawanga ai? Engari na te wero free() ehara i te mea tera Me hoki tonu te mahara ki te punaha whakahaere.

He mea penei te wehewehe mahara. I roto i nga ahuatanga tino nui, he waahanga puranga he iti noa nga paita e whakamahia ana, ko nga mea katoa kei waenganui kua wetekina. (free()).

Kia mahara ko te wehewehe mahara he kaupapa tino uaua, a, ahakoa nga huringa iti ki te kaupapa ka whai paanga nui. I te nuinga o nga wa, kaore nga kaupapa e pakaru i te maharahara nui, engari me mohio koe mena he raru mo te wehenga i etahi waahi o te puranga, ka nui ake te kino o nga whaarangi.

Te whakamahi whiriwhiri i nga wharangi nunui

I muri i to panui i tenei tuhinga, kua whakatauhia e koe ko nga waahanga o to kaupapa ka whai hua mai i te whakamahi i nga wharangi nunui me te kore e taea. Na me whakahohea nga wharangi nunui?

Waimarie ka taea e koe te whakamahi madvise()kia taea ai te wharangi nui noa mo nga waahi mahara ka whai hua.

Tuatahi, tirohia kei te rere nga wharangi nui ki te aratau madvise() ma te whakamahi tohutohu i te timatanga o te tuhinga.

Na, whakamahia madvise()ki te korero tika ki te kernel kei hea te whakamahi i nga wharangi nunui.

#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)

Kia mahara ko tenei tikanga he tohutohu noa ki te kernel mo te whakahaere mahara. Ehara tenei i te mea ka whakamahi aunoa te kernel i nga wharangi nunui mo tetahi maharatanga.

Tirohia te tuhinga (manpage)madviseki te ako atu mo te whakahaere mahara me te madvise(), tenei kaupapa he anau ako tino pari. Na, ki te hiahia koe ki te tino pai, whakarite ki te panui me te whakamatautau mo etahi wiki i mua i to tumanako ki nga hua pai.

He aha te panui?

He patai? Tuhia ki nga korero!

Source: will.com

Tāpiri i te kōrero