[so2] Mapare low-mem in spatiul kernel (bonus: the cake is a lie)

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Wed May 6 00:42:56 EEST 2015


Octavian Purdila <tavi.purdila at gmail.com> writes:
> 2015-05-05 23:11 GMT+03:00 Razvan Deaconescu via so2 <so2 at cursuri.cs.pub.ro>:
>> Octavian Purdila <tavi.purdila at gmail.com> writes:
>>> 2015-05-03 12:57 GMT+03:00 Razvan Deaconescu via so2 <so2 at cursuri.cs.pub.ro>:
>>>> Salutare.
>>>>
>>>> Întrucât am văzut că nu am explicat cum trebuie partea de low-mem și
>>>> maparea acesteia, am făcut un modul de kernel de test[1]. Modulul
>>>> parcurge spațiul virtual al nucleului în care este mapată zona low-mem
>>>> (adică zona din spațiul virtual cuprinsă între PAGE_OFFSET și
>>>> high_memory).
>>>>
>>>> Acolo puteți vedea că zona este mapată, deci tabelele de pagini sunt
>>>> completate. Motivul mapării directe a low-mem este pentru cazul în care
>>>> nucleul solicită explicit translatări virtual-fizic sau viceversa. Orice
>>>> acces implicit al nucleului la spațiul său de adresă va trece prin TLB,
>>>> MMU, tabele de pagini; acele accese nu sunt influențate de maparea
>>>> directă a low-mem. Maparea directă este utilă pentru translatarea
>>>> explicită solicitată în anumite ocazii de kernel; pentru acea
>>>> translatare se fac operații aritmetice, nemaifiind nevoie de parcurgerea
>>>> tabelei de pagini.
>>>>
>>>> Partea interesantă (de unde și "the cake is a lie") este că, din test,
>>>> rezultă că partea de low-mem nu ocupă 896MB ci, de fapt, 128MB. Avem:
>>>> * PAGE_OFFSET: 0xc0000000
>>>> * high_memory: 0xc7fe0000
>>>>
>>>> Output-ul unei rulări este aici[2].
>>>>
>>>> Diferența: 0x07fe0000, adică puțin sub 128MB. Asta se întâmplă pe
>>>> nucleul din mașina virtuală, kernel 3.13. Nu știam că s-a schimbat
>>>> această valoare, dar aparent așa este.
>>>>
>>>> Dacă fac ceva greșit sau dacă am zis ceva greșit, săriți.
>>>>
>>>> Tavi, tu ce știi de asta?
>>>
>>> Cred ca masina virtuala este configurata cu 128MB, de unde si
>>> rezultatul obinut :)
>>
>> Da, are sens să fie așa. O să mă mai uit prin codul sursă să văd ce
>> config determină asta.
>
> Incearca kvm -m 1024 pentru a porni masina virtuala cu 1G.

Da, de acolo era. Pornea implicit cu mai puțină memorie și nu avea,
practic, suport de highmem. Mersi de explicație. All is OK.

Răzvan


More information about the so2 mailing list