A hack in kern/src/pmap.c pmem_init() to limit max_paddr works better.

We can ignore the patch I posted, anyone who needs to control amount of
memory can rather do it with max_paddr.

On Mon, Feb 29, 2016 at 1:17 PM, Kanoj Sarcar <[email protected]> wrote:

> This patch is not working well on actual machines. While it worked fine in
> qemu, on real machines with multi-gigabytes of memory, attempting to boot
> it up with limited memory (while max_paddr is still quite high) is not
> working well; I assume it is because the arrays based on max_paddr eg
> "struct page" etc is consuming too much memory.
>
> I will try to limit max_paddr and see if that works better.
>
> Does akaros already take a mem= option that I can use instead?
>
> On Mon, Feb 29, 2016 at 12:43 PM, ron minnich <[email protected]> wrote:
>
>> Could we, instead, just have a mem= boot time command line parameter?
>>
>> ron
>>
>> On Mon, Feb 29, 2016 at 11:02 AM 'Kanoj Sarcar' via Akaros <
>> [email protected]> wrote:
>>
>>> Developer tool to limit RAM used (eg to restrict to only node0 memory
>>> etc).
>>>
>>> Signed-off-by: Kanoj Sarcar <[email protected]>
>>> ---
>>>  kern/arch/x86/page_alloc.c | 13 +++++++++++++
>>>  1 file changed, 13 insertions(+)
>>>
>>> diff --git a/kern/arch/x86/page_alloc.c b/kern/arch/x86/page_alloc.c
>>> index da3d8b0..ad0aaa4 100644
>>> --- a/kern/arch/x86/page_alloc.c
>>> +++ b/kern/arch/x86/page_alloc.c
>>> @@ -48,6 +48,10 @@ static bool pa64_is_in_kernel(uint64_t paddr)
>>>         return (EXTPHYSMEM <= paddr) && (paddr < PADDR(end));
>>>  }
>>>
>>> +#define        MAX_LIMIT_RAM   0xFFFFFFFFFFFFFFFFULL
>>> +static uint64_t max_usable_paddr = MAX_LIMIT_RAM;      /* cmdline
>>> option? */
>>> +#define        USABLE_RAM(_pa_)        ((_pa_) < max_usable_paddr)
>>> +
>>>  /* Helper.  For every page in the entry, this will determine whether or
>>> not the
>>>   * page is free, and handle accordingly.  All pages are marked as busy
>>> by
>>>   * default, and we're just determining which of them could be free. */
>>> @@ -89,6 +93,11 @@ static void parse_mboot_region(struct
>>> multiboot_mmap_entry *entry, void *data)
>>>                  * bootzone.  If it was in the bootzone, we already
>>> skipped it. */
>>>                 if (pa64_is_in_kernel(i))
>>>                         continue;
>>> +
>>> +               /* If beyond what we want to allocate, give up */
>>> +               if (!USABLE_RAM(i))
>>> +                       return;
>>> +
>>>                 track_free_page(pa64_to_page(i));
>>>         }
>>>  }
>>> @@ -98,6 +107,10 @@ static void check_range(uint64_t start, uint64_t
>>> end, int expect)
>>>         int ref;
>>>         if (PGOFF(start))
>>>                 printk("Warning: check_range given unaligned addr
>>> 0x%016llx\n", start);
>>> +
>>> +       if ((expect == 0) && (!USABLE_RAM(end)))
>>> +               end = max_usable_paddr;
>>> +
>>>         for (uint64_t i = start; i < end; i += PGSIZE)  {
>>>                 ref = kref_refcnt(&pa64_to_page(i)->pg_kref);
>>>                 if (ref != expect) {
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Akaros" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>
>
> --
> Thanks,
>
> Kanoj
>



-- 
Thanks,

Kanoj

-- 
You received this message because you are subscribed to the Google Groups 
"Akaros" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to