Tulaga lelei ma le le lelei o HugePages

Tulaga lelei ma le le lelei o HugePages

Faaliliuga o le tusiga ua saunia mo tamaiti aoga "Linux Pule".

I le taimi muamua, sa ou talanoa e uiga i le auala e faʻataʻitaʻi ai ma mafai ai Hugepages i Linux.
O lenei tusiga o le a aoga pe afai e iai sau nofoaga e faʻaaoga ai Hugepages. Ua ou feiloai i le tele o tagata o loʻo faʻasesēina e le faʻamoemoe o Hugepages o le a faʻaleleia atili le gaosiga. Ae ui i lea, o le largepaging o se mataupu lavelave ma e mafai ona faʻaleagaina le faʻatinoga pe a faʻaaoga sese.

Vaega 1: Faʻamaonia o loʻo faʻaogaina itulau tetele i luga o Linux (uluai iinei)

Faafitauli:
E tatau ona e siaki pe mafai HugePages i lau masini.

vaifofo:
E matua faigofie lava:

cat /sys/kernel/mm/transparent_hugepage/enabled

O le ae mauaina se mea e pei o lenei:

always [madvise] never

O le a e vaʻai i se lisi o avanoa avanoa (i taimi uma, madvise, leai), ma o le filifiliga o loʻo galue nei o le a faʻapipiʻiina i puipui (e ala i le faaletonu madvise).

madvise o lona uiga transparent hugepages fa'aagaaga mo na'o vaega e manatua o lo'o mana'omia manino itulau tetele e fa'aoga madvise(2).

pea lava o lona uiga transparent hugepages e mafai i taimi uma mo faiga uma. O lenei mea e masani ona faʻaleleia ai le faʻatinoga, ae afai e iai sau faʻaoga faʻaoga e tele faʻagasologa o loʻo faʻaaogaina ai se vaega itiiti o le manatua, ona mafai lea ona faʻateleina le mamafa o le mafaufau.

aua lava nei o lona uiga transparent hugepages o le a le aofia ai tusa lava pe talosagaina e faʻaaoga ai le madvise. Mo nisi fa'amatalaga, fa'afeso'ota'i fa'amaumauga Linux kernels.

Fa'afefea ona sui le tau fa'aletonu

1 filifiliga: Suia tuusao sysfs (a maeʻa ona toe faʻafouina le parakalafa o le a toe foʻi i lona tau faʻaletonu):

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

2 filifiliga: Suia le faʻaogaina o le polokalama e ala i le toe faʻapipiʻiina o le fatu ma se faʻasologa faʻaleleia (o lenei filifiliga e naʻo le fautuaina pe afai o loʻo e faʻaaogaina se fatu masani):

  • Ina ia seti i taimi uma e ala i le faaletonu, faʻaaoga:
    CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
    # Comment out CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
  • Ina ia seti le madvise e le mafai, faʻaaoga:
    CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
    # Comment out CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y

Vaega 2: Tulaga lelei ma le le lelei o HugePages

O le a matou taumafai e faʻamatala faʻamalamalamaina lelei, faʻaletonu ma faʻalavelave faʻafuaseʻi o le faʻaaogaina o Hugepage. Talu ai o se tala faʻatekonolosi faʻalavelave ma faʻataʻitaʻiga e foliga mai e faigata ona malamalama i tagata o loʻo faʻaseseina i le mafaufau o Hugepages o se faʻamaʻi, o le a ou ositaulagaina le saʻo mo le faigofie. E taua le manatua o le tele o mataupu e matua faigata lava ma o lea e matua faigofie ai.

Faamolemole ia matau o loʻo matou talanoa e uiga i le 64-bit x86 system o loʻo faʻaogaina Linux, ma o loʻo ou manatu o loʻo lagolagoina e le polokalama le tele o itulau (talu ai e le o se faʻaletonu le tele o itulau e le faʻasalalau), e pei o le tulaga i le toetoe o soʻo se Linux faʻaonapo nei. siosiomaga.

O le a ou faʻapipiʻiina nisi faʻamatalaga faʻapitoa i fesoʻotaʻiga i lalo.

Manatu Va'ai

Afai o oe o se tagata fai polokalame C++, e te iloa o mea e manatua e iai ni tuatusi fa'apitoa (taua fa'asino).

Ae ui i lea, o nei tuatusi e le o atagia mai ai tuatusi faʻapitoa i le mafaufau (tuatusi RAM). Latou te fai ma sui o tuatusi i le virtual memory. O lo'o i ai i le processor se MMU fa'apitoa (memory management unit) e fesoasoani i le fatu e fa'afanua ai le mafaufau fa'apitoa i se nofoaga fa'aletino.

O lenei faiga e tele naua mea lelei, ae o mea sili ona taua o:

  • Fa'atinoga (mo mafuaaga eseese);
  • Polokalama vavae ese, o lona uiga, e leai se polokalama e mafai ona faitau mai le manatua o se isi polokalama.

O a itulau?

Ua vaevaeina le mafaufau fa'apitoa i itulau. O itulau taʻitasi taʻitasi e faʻasino atu i se manatuaga faʻapitoa faʻapitoa, e mafai ona faasino i se vaega i le RAM, pe mafai foi ona faʻasino i se tuatusi e tuʻuina atu i se masini faʻapitoa, e pei o se kata vitio.

O le tele o itulau e te feagai ma faʻailoga i le RAM pe fesuiaʻi, o lona uiga o loʻo teuina i luga o lau kesi malo poʻo SSD. O le fatu e pulea le faʻatulagaina faaletino o itulau taʻitasi. Afai e maua se itulau pepelo, e taofi e le fatu le filo o loʻo taumafai e faʻaoga le manatua, faitau le itulau mai le hard drive / SSD i le RAM, ona faʻaauau ai lea o le faʻaogaina o le filo.

O lenei faagasologa e manino le tafe, o lona uiga e le faitau saʻo mai le HDD/SSD. Ole tele ole itulau masani ole 4096 bytes. O le tele o itulau tetele e 2 megabytes.

Fa'aliliuga feso'ota'i pa'u (TLB)

A o'o atu se polokalame i se itulau e manatua, e tatau ona iloa e le PPU po'o fea le itulau fa'aletino e faitau mai ai fa'amaumauga (o lona uiga, ia iai se fa'afanua fa'afanua fa'asinomaga).

O le fatu o loʻo i ai se faʻasologa o faʻamaumauga (itulau itulau) o loʻo i ai faʻamatalaga uma e uiga i itulau o loʻo faʻaaogaina. I le fa'aogaina o lenei fa'amaumauga o fa'amaumauga, e mafai ona e fa'afanua se tuatusi faakomepiuta i se tuatusi fa'aletino.

Ae ui i lea, o le laulau itulau e fai si lavelave ma telegese, o lea e le mafai ai ona tatou suʻesuʻeina le fausaga atoa o faʻamaumauga i taimi uma e maua ai e se faagasologa le manatua.

O le mea e lelei ai, o loʻo i ai i le matou processor se TLB e faʻapipiʻi ai le faʻafanua i le va o tuatusi faʻapitoa ma faʻapitoa. O lona uiga e ui lava e manaʻomia le faʻavasegaina o le laulau itulau i le taumafaiga muamua avanoa, o avanoa uma mulimuli ane i le itulau e mafai ona taulimaina i le TLB, e mafai ai ona faʻagaoioia vave.

Talu ai o loʻo faʻatinoina o se masini faʻapitoa (lea e vave ai i le mea muamua), e faʻatapulaʻaina lona gafatia. Afai la e te mana'o e maua nisi itulau, o le a le mafai e le TLB ona teuina fa'afanua mo i latou uma, ma mafua ai ona fa'agesegese lau polokalame.

Hugpageges e sau e laveai

O le a la se mea e mafai ona tatou faia e aloese ai mai le lolovaia o le TLB? (Matou te manatu o loʻo manaʻomia pea e le polokalama le aofaʻi tutusa o le manatua).

O le mea lea e sau ai Hugpageges. Nai lo le 4096 bytes e mana'omia na'o le tasi le TLB ulufale, tasi le TLB e mafai nei ona fa'asino ile 2 megabytes matua'i. Fa'apea o le TLB e 512 fa'amaumauga, i'inei e aunoa ma Hugepage e mafai ona fa'atusaina:

4096 b⋅512=2 MB

E faapefea la ona tatou faatusatusa ia i latou:

2 MB⋅512=1 GB

O le mea lea e mataʻutia ai Hugepages. E mafai ona latou faʻaleleia le gaosiga e aunoa ma le tele o taumafaiga. Ae o loʻo i ai faʻamatalaga taua iinei.

Hugepages spoofing

E otometi lava ona mata'ituina e le fatu pe fa'afia ona fa'aogaina itulau manatua ta'itasi. Afai e le lava le mafaufau faaletino (RAM), o le kernel o le a faʻagasolo le taua (e le masani ona faʻaaogaina) itulau i le hard disk e faʻasaʻoloto ai nisi RAM mo itulau sili atu ona taua.
I le mataupu faavae, e tutusa lava le faatatau i Hugepages. Ae ui i lea, e mafai e le fatu ona fesuiai itulau atoa, ae le o pata taʻitasi.

Fa'apea o lo'o i ai sau polokalame fa'apenei:

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

I lenei tulaga, o le fatu e manaʻomia ona sui (faitau) e oʻo atu i le 2 megabytes o faʻamatalaga mai le hard drive / SSD mo oe e faitau tasi le paita. A'o itulau masani, na'o le 4096 bytes e mana'omia ona faitau mai le hard drive/SSD.

O le mea lea, afai e faʻamalo le itulau tele, e naʻo le vave ona faitau pe a manaʻomia le mauaina o le itulau atoa. O lona uiga afai o lo'o e taumafai e fa'aoga fa'afuase'i vaega eseese o le manatua ma o lo'o na'o le faitauina o nai kilobytes, e tatau ona e fa'aoga itulau masani ae aua le popole i se isi lava mea.

I le isi itu, afai e te manaʻomia le mauaina o se vaega tele o manatuaga faʻasolosolo, o itulau tetele o le a faʻaleleia lau faʻatinoga. Ae ui i lea, e tatau ona e suʻeina oe lava (e le o se polokalama faʻapitoa) ma vaʻai po o le a le mea e sili atu ona galue.

Fa'asoa ile manatua

Afai e te tusia le C, e te iloa e mafai ona e talosagaina ni nai mea laiti (pe toetoe lava a tele) o manatuaga mai le faʻaputuga e faʻaaoga ai. malloc(). Fa'apea e te mana'omia le 30 paita ole manatua:

char* mymemory = malloc(30);

I se tagata fai polokalame, atonu e foliga mai o loʻo e "talosagaina" 30 bytes o le manatua mai le faiga faʻaogaina ma toe faʻafoʻi se faʻailoga i se mea e manatua ai. Ae o le mea moni lava malloc () ua na'o se galuega C e vala'au mai totonu ole galuega brk ma sbrk e talosagaina pe fa'asa'oloto manatua mai le faiga fa'aoga.

Ae ui i lea, o le talosagaina o le tele ma le tele o manatua mo vaega taitasi e le aoga; e foliga mai o se vaega manatua ua uma ona fa'asa'olotoina (free()), ma e mafai ona tatou toe faaaogaina. malloc() fa'atinoina algorithms faigata tele mo le toe fa'aaogaina o manatuaga saoloto.

I le taimi lava e tasi, o mea uma e tupu e aunoa ma se iloa mo oe, aisea la e te popole ai? Ae ona o le luitau free() e le o lona uiga manatua e tatau ona toe fa'afo'i vave i le faiga fa'aoga.

E i ai se mea e pei o le fragmentation manatua. I tulaga ogaoga, o loʻo i ai vaega faʻaputuga e na o ni nai paita e faʻaaogaina ae o mea uma i le va ua faʻasaʻoloto. (free()).

Faamolemole ia matau o le vaevaega o manatua o se mataupu faigata tele, ma e oo lava i suiga laiti i se polokalame e mafai ona i ai se aafiaga taua. I le tele o tulaga, o polokalama o le a le mafua ai le tele o le manatua, ae e tatau ona e nofouta afai o loʻo i ai se faʻafitauli i le vaevaega i nisi vaega o le faaputuga, o itulau tetele e mafai ona faʻaleagaina ai le tulaga.

Fa'aoga filifilia o itulau tetele

A maeʻa ona faitau le tusiga, ua e fuafuaina poʻo fea vaega o lau polokalama e mafai ona manuia mai le faʻaaogaina o itulau tetele ma e le mafai. E tatau la ona fa'agaoioia itulau tetele?

E laki e mafai ona e faʻaaogaina madvise()e fa'ataga ai na'o vaega e manatua ai mea e aoga.

Muamua, siaki o loʻo tamomoe itulau tetele i le madvise() faʻaoga faatonuga i le amataga o le tusiga.

Ona, faʻaaoga madvise()e ta'u tonu i le fatu le mea e fa'aoga ai itulau tetele.

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

Manatua o lenei metotia o se fautuaga i le fatu ile auala e pulea ai le manatua. E le o lona uiga o le fatu o le a otometi lava ona faʻaogaina itulau tetele mo se manatuaga.

Va'ai i fa'amaumauga (manpage) madvisee aoao atili e uiga i le puleaina o manatua ma madvise(), o lenei autu o loʻo i ai se faʻailoga maualuga o le aʻoaʻoga. O lea la, afai e te faʻamoemoe e te matua lelei i ai, sauni e faitau ma suʻe mo ni nai vaiaso ae e te leʻi faʻamoemoeina ni taunuuga lelei.

O le a le mea e faitau?

E iai sau fesili? Tusi i faʻamatalaga!

puna: www.habr.com

Faaopoopo i ai se faamatalaga