From 22eabbedbcbe6246676270634e73a9964a833f87 Mon Sep 17 00:00:00 2001 From: Max Wash Date: Wed, 8 Feb 2023 21:29:20 +0000 Subject: [PATCH] vm: log per-zone free memory during init --- vm/zone.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/vm/zone.c b/vm/zone.c index 6794de9..2ff22e5 100644 --- a/vm/zone.c +++ b/vm/zone.c @@ -1,10 +1,12 @@ #include +#include #include #include #include #include #include #include +#include static vm_page_t *group_pages_into_block(vm_zone_t *z, phys_addr_t base, phys_addr_t limit, int order) { @@ -14,13 +16,10 @@ static vm_page_t *group_pages_into_block(vm_zone_t *z, phys_addr_t base, phys_ad if (!pg) { continue; } - /* p_flags is the only part of the page that has been - initialised at this point. */ pg->p_order = order; pg->p_node = z->z_info.zd_node; pg->p_zone = z->z_info.zd_id; - pg->p_reserved = 0; if (order != VM_PAGE_MIN_ORDER) { pg->p_flags |= VM_PAGE_HUGE; @@ -81,6 +80,21 @@ static void convert_region_to_blocks(vm_zone_t *zone, } } +static size_t zone_free_bytes(vm_zone_t *z) +{ + size_t free_bytes = 0; + for (vm_page_order_t i = VM_PAGE_MIN_ORDER; i <= VM_PAGE_MAX_ORDER; i++) { + size_t page_bytes = vm_page_order_to_bytes(i); + size_t nr_pages = 0; + queue_foreach (vm_page_t, pg, &z->z_free_pages[i], p_list) { + free_bytes += page_bytes; + nr_pages++; + } + } + + return free_bytes; +} + void vm_zone_init(vm_zone_t *z, const vm_zone_descriptor_t *zone_info) { memset(z, 0x0, sizeof *z); @@ -139,8 +153,13 @@ void vm_zone_init(vm_zone_t *z, const vm_zone_descriptor_t *zone_info) } } + size_t free_bytes = zone_free_bytes(z); spin_unlock_irqrestore(&z->z_lock, flags); - printk("vm: zone %s on node %u online.", z->z_info.zd_name, z->z_info.zd_node); + + char free_bytes_str[64]; + data_size_to_string(free_bytes, free_bytes_str, sizeof free_bytes_str); + + printk("vm: node %u/zone %s: %s of memory online.", z->z_info.zd_node, z->z_info.zd_name, free_bytes_str); } static int replenish_free_page_list(vm_zone_t *z, vm_page_order_t order)