„Linux“ branduolys

„Linux“ branduolio atminties valdymas pakeičia vietą

„Linux“ branduolio atminties valdymas pakeičia vietą

Pirma dalis. Keisti erdvę

Norint tinkamai dirbti, kompiuteris priklauso nuo to, ar jame yra pakankamai atminties. Paprasčiausiai sakydamas, kad niekada negali būti pakankamai. Kuo daugiau fizinės atminties įdiegta, tuo ji brangesnė. Dažniausiai rezultatas yra sumanus kompromisas tarp sąnaudų ir greičio norint pasiekti atminties ląsteles.

Norėdami pasiekti šį kompromisą, UNIX / Linux sistemos sujungia dviejų tipų atmintį - fizinę atmintį (RAM) ir vietos keitimą. Iš viso tai vadinama virtualia skaičiavimo sistemos atmintimi. Fizinė atmintis yra gana brangi, bet greita ir prieinama per nanosekundes. Priešingai, apsikeitimo atmintis yra gana pigi, tačiau lėta ir prieinama per milisekundes.

Yra kelios priežastys, kodėl keitimo atmintis yra naudinga. Pirma, kartais atskiriems procesams reikia daugiau atminties, nei sistema fiziškai turi, ir jie gali suteikti daugiau procesų, kurie to reikalauja. Todėl visi duomenys, kurie saugomi fizinėje atmintyje, nebegali būti ten saugomi. Dabar pradeda veikti mainų vieta, o atminties puslapių pasirinkimas perkeliamas į apsikeitimo vietą, kad būtų atlaisvinta fizinė atmintis.

Antra, ne visi duomenys reikalingi atmintyje vienu metu. Štai kodėl rečiau naudojami atminties puslapiai pastatomi ant vietos, kad būtų kuo daugiau laisvos fizinės atminties. Šis metodas pavadintas mažiausiai neseniai naudojamu puslapio pakeitimo algoritmu (LRU) [1].

Apsikeitimo tipai

Keičiama erdvė egzistuoja dviem variantais. 1 versija yra atskiras disko skaidinys, kuris yra vadinamasis apsikeitimo skaidinys. Tame skaidinyje nėra failų, bet atminties informacija (sąvartynai). Tiesiog 2 versija yra diske esantis failas, esantis standžiojo disko failų sistemoje. 1 versija yra labai paplitusi UNIX / Linux sistemose, BSD ir OS X, o 2 versija yra sistemose, kuriose veikia „Microsoft Windows“. 2 versiją taip pat galima įjungti UNIX / Linux sistemose (žr. Toliau).

Norėdami pamatyti, kuri mainų vieta yra aktyvi jūsų UNIX / Linux sistemoje, terminale vykdykite šią komandą:

$ / sbin / swapon -s
Failo pavadinimo tipo dydis Naudotas prioritetas
/ dev / dm-3 skaidinys 16150524 316484 -1
$

Kaip alternatyvą galite siųsti užklausą į proc failų sistemą ir paleisti komandą cat / proc / swaps

Ši „Linux“ sistema turi apytiksliai 15 GB dydžio skaidinį, kuriame šiuo metu naudojama daugiau kaip 300 mln. Stulpelyje „Prioritetas“ rodoma, kurią apsikeitimo vietą naudoti pirmiausia. Numatytoji vertė yra -1. Kuo didesnė prioriteto vertė, tuo anksčiau atsižvelgiama į šią apsikeitimo vietą. Parinktis -s yra trumpa santraukos versija. Ši parinktis nebenaudojama, todėl rekomenduojama naudoti parinktį -show taip:

$ / sbin / swapon --show = PAVADINIMAS, TIPAS, DYDIS, NAUDOTI, PRIO
VARDO TIPO DYDIS NAUDOJAMAS PRIO
/ dev / dm-3 skaidinys 15,4G 307,1M -1
$

Parinktis -show priima stulpelių antraštes žyminčių verčių sąrašą. Norėdami pasiekti konkrečią išvesties tvarką, pasirinkite norimas stulpelių antraštes ir jų seką.

Keisti dydį

Paprastai apsikeitimo vietos dydis yra dvigubai didesnis nei sistema turi fizinę atmintį. Turėkite tai omenyje atliekant bendros paskirties sąranką ir stalinius kompiuterius. Jei naudojate UNIX / Linux serverius, kuriuose yra daug daugiau fizinės atminties, galite sumažinti keitimo vietos dydį iki 50% RAM. Nešiojamieji kompiuteriai, kurie gali užmigdyti, turi būti šiek tiek didesni nei fizinė atmintis.

Montavimas

Jei norite pakeisti apsikeitimo skaidinį, rekomenduojama apsvarstyti vietos keitimo galimybes nuo pat pradinio disko padalijimo į atskirus skaidinius pradžios arba palikti pakankamai nepanaudotos vietos diske, kad galėtumėte vėliau jį naudoti. Paprastai per naudojamų diskų konfigūravimą sąrankos programa klausia apie apsikeitimo vietos dydį. Pavyzdžiui, „Debian GNU / Linux“ tai atrodo taip:

Kaip minėta aukščiau, kol kietajame diske yra vietos naujoms skaidiniams, galite sukurti ir įtraukti keitimo skaidinius naudodami tokias komandas kaip fdisk ir swapon.

Arba vėliau sukeisti erdvę taip pat galima įgalinti kaip apsikeitimo failą. „Linux“ palaiko šį būdą, kad galėtumėte jį sukurti, paruošti ir montuoti panašiai kaip ir apsikeitimo skaidinį. Šio būdo pranašumas yra tas, kad norint papildomos vietos sukeisti nereikia disko perskirstyti.

Pavyzdžiui, mes sukuriame failą pavadinimu / swapfile, kurio dydis yra 512M, ir įgaliname tai kaip papildomą keitimo vietą. Pirma, naudodami komandą dd, mes sukuriame tuščią failą. Antra, „mkswap“ naudoja šį failą, kad pakeistų jį į apsikeitimo stilių. Galite pastebėti, kad failo turinys traktuojamas kaip skaidinys ir priskiriamas atitinkamas UUID. Trečia, mes tai įgaliname naudodami „swapon“. Galiausiai komandoje „swapon -show“ rodomi du apsikeitimo įrašai - skaidinys ir naujai sukurtas failas.

# dd, jei = / dev / nulis = / apsikeitimo failo bs = 1024 skaičius = 524288
524288 + 0 duomenų rinkinių
524288 + 0 duomenų rinkinių
536870912 baitai (537 MB) nukopijuoti, 0,887744 s, 605 MB / s
# mkswap / swapfile
Nustatoma 1 „swapspace“ versija, kurios dydis = 524284 KiB
be etiketės, UUID = e47ab7fe-5efc-4175-b287-d0e83bc10f2e
# swapon / swapfile
# swapon --show = PAVADINIMAS, TIPAS, DYDIS, NAUDOTI, PRIO
PAVADINIMO TIPO DYDIS NAUDOJAMAS PRIO
/ dev / dm-3 skaidinys 15,4G 288,9M -1
/ swapfile failas 512M 0B -2
#

Norėdami naudoti šį apsikeitimo failą įkrovos metu, pridėkite šią eilutę prie failo kaip administratorius / etc / fstab:

/ swapfile none swap sw 0 0

Neleisti apsikeitimo vietos

Mažiausiai, bet ne paskutinė, yra viena komanda vėl išjungti apsikeitimo failą. Vadinama komanda apsikeitimas. Tam reikalingas vienas parametras, nurodantis, kad apsikeitimo įrenginys turi būti išjungtas. Ši komanda išjungia anksčiau suaktyvintą apsikeitimo failą:

# swapoff / swapfile

Taip pat, apsikeitimas gali dirbti su failų sistemos UUID. Gaminti apsikeitimas elkitės tokiu būdu naudokitės galimybe -U po to nurodoma atitinkamos failų sistemos UUID. Jei reikia išjungti visas apsikeitimo vietas vienu metu -a (ilgas variantas -visi) yra gana patogu. Visa komanda yra apsikeitimo -a.

Keisti apsikeitimo ekosistemą

Pradedant „Linux“ branduolio leidimais 2.6 buvo įvesta nauja vertė. Tai saugoma kintamajame / proc / sys / vm / swappinessir kontroliuoja santykinį svorį, skiriamą vykdymo laiko atminties keitimui, o ne atminties puslapių numetimui iš sistemos puslapių talpyklos [2]. Numatytoji vertė yra 60 (laisvos atminties procentai prieš suaktyvinant apsikeitimą). Kuo mažesnė vertė, tuo mažiau naudojama sukeisti, ir daugiau atminties puslapių laikoma fizinėje atmintyje.

Norėdami nustatyti vertę, laikinai nustatykite reikšmę / proc failų sistemoje taip:

# echo 10> / proc / sys / vm / swappiness

Kaip alternatyvą galite naudoti sysctl komandą taip:

# sysctl -w vm.apsikeitimas = 10

Norėdami nustatyti vertę visam laikui, pridėkite šią eilutę prie failo / etc / sysctl.konf .:

vm.apsikeitimas = 10

Ar apsikeitimas vis dar atnaujinamas?

Galite paklausti, kodėl mes užsiimame ta tema. Šiuolaikiniai kompiuteriai turi pakankamai fizinės atminties - tad kodėl mums tai turi rūpėti? Yra keletas priežasčių, kodėl ši technologija verta daugiau nei mintis.

Atminkite, kad kurį laiką laikotės savo mašinos, tačiau kartais galite atnaujinti joje naudojamą programinę įrangą. Šiuo metu tiek techninė, tiek programinė įranga tinka viena kitai. Ateityje tai gali pasikeisti, ir jums reikia daugiau atminties, nei turite dabar. Nebent atnaujinsite ar nepirkite naujos aparatūros, „Swap“ skaidinys gali sutaupyti šiek tiek pinigų.

Galbūt girdėjote apie funkciją, vadinamą laikino sustabdymo diske arba užmigdymo režimu [3]. Jūsų mašina eis miegoti. Prieš tai atlikdamas, jis turi kažkur išsaugoti dabartinę būseną. Dabar keičiama erdvė pradeda veikti ir veikia kaip talpykla šiems duomenims saugoti. Kai tik mašina atsibunda kitą kartą, kai visi duomenys nuskaitomi iš „Swap“ vietos, įkeliami į atmintį, ir jūs galite tęsti darbą ten, kur anksčiau sustojote.

Jei sistema turi tik vieną nuolatinį saugojimo įrenginį, ji turės skaityti ir rašyti failus keisdama tą patį įrenginį. Pamatysite didžiulį patobulėjimą, jei turite antrą įrenginį ir galėsite atskirti keitimo įrenginį nuo prieštaringų failų prieigų.

Apsikeitimo byla turi perduoti duomenis per failų sistemą. Tai prideda netiesioginį sluoksnį, kad atrodytų, jog branduolyje yra gretima loginio adreso erdvė, su kuria galima dirbti. Tai prideda papildomų atminties pridėtinių ir procesorių ciklų. Geriausių rezultatų pasieksite naudodami neapdorotą apsikeitimo skaidinį.

Išvada

Net ir šiandien žinios apie apsikeitimą yra būtinos. Ši tema yra žinių, reikalingų norint išlaikyti „Linux Professional Institute“ 1 lygio pažymėjimą (LPIC 1), dalis. Daugumoje egzaminų yra vienas ar du klausimai šia tema.

Vietos keitimas padeda jūsų „Linux“ sistemai (branduoliui) greitai sutvarkyti atmintį, jei jos reikia. Norint būti atviram su jumis, nereikia pakeisti vietos, jei jūsų sistemoje yra daug RAM. Ekstremalių situacijų atveju tai padeda jūsų sistemai išlikti. Štai kodėl niekada nepaliksiu tradicinės sąrankos kelio be „Swap space“.

„Swap“ ir „SSD“ derinys aptariamas prieštaringai, nes diskų skaičius SSD yra gana ribotas. Tiek „Swap“, tiek laikini failai sukurti taip, kad būtų galima rašyti daug duomenų. Kita vertus, šiuolaikiniuose SSD diskuose yra daugiau nei pakankamai papildomos vietos (7 proc.), Kad būtų galima susidoroti su sektoriaus gedimais. Būkite saugus: jei įmanoma, turėkite atskirą „Swap“ įprastame kietajame diske - nenaudokite nei RAMDISK, nei SSD, bent jau sukeisti [4]. Jūsų „Linux“ sistema jums padėkos už šį sprendimą.

Kad išvengtumėte keitimo vietos SSD, vietoj to galite naudoti ZRAM [5,6]. Tai „Virtual Swap“, suspaustas RAM, dar vadinamas „zSwap“. Ši technologija įgalina atmintyje suspausto bloko įrenginį. Kai tik nebeliks atminties, atminties puslapiai bus perkelti į šį blokinį įrenginį. Dėl to sumažėja apsikeitimo galimybė ir taip pat prailgėja kietojo disko tarnavimo laikas.

Nuorodos ir nuorodos

„Linux“ atminties valdymo serija

Padėkos

Autorius norėtų padėkoti Mandy Neumeyer ir Gerold Rupprecht už palaikymą rengiant šį straipsnį.

Atvirojo kodo komercinių žaidimų variklių uostai
Nemokami atvirojo kodo ir įvairių platformų žaidimų varikliai gali būti naudojami žaidžiant senus ir kai kuriuos gana naujus žaidimų pavadinimus. Šiam...
Geriausi „Linux“ komandinės eilutės žaidimai
Komandų eilutė yra ne tik jūsų didžiausias sąjungininkas naudojant „Linux“, bet ir pramogų šaltinis, nes ją galite naudoti norėdami žaisti daug įdomių...
Geriausios „Linux“ skirtos „Gamepad“ žemėlapių sudarymo programos
Jei jums patinka žaisti žaidimus „Linux“ su žaidimų pultu, o ne įprasta klaviatūra ir pelės įvesties sistema, yra keletas jums naudingų programų. Daug...