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.
