Re: [RFC][Patch v11 1/2] mm: page_hinting: core infrastructure

From: Dave Hansen
Date: Wed Jul 10 2019 - 16:45:25 EST


On 7/10/19 12:51 PM, Nitesh Narayan Lal wrote:
> +struct zone_free_area {
> + unsigned long *bitmap;
> + unsigned long base_pfn;
> + unsigned long end_pfn;
> + atomic_t free_pages;
> + unsigned long nbits;
> +} free_area[MAX_NR_ZONES];

Why do we need an extra data structure. What's wrong with putting
per-zone data in ... 'struct zone'? The cover letter claims that it
doesn't touch core-mm infrastructure, but if it depends on mechanisms
like this, I think that's a very bad thing.

To be honest, I'm not sure this series is worth reviewing at this point.
It's horribly lightly commented and full of kernel antipatterns lik

void func()
{
if () {
... indent entire logic
... of function
}
}

It has big "TODO"s. It's virtually comment-free. I'm shocked it's at
the 11th version and still looking like this.

> +
> + for (zone_idx = 0; zone_idx < MAX_NR_ZONES; zone_idx++) {
> + unsigned long pages = free_area[zone_idx].end_pfn -
> + free_area[zone_idx].base_pfn;
> + bitmap_size = (pages >> PAGE_HINTING_MIN_ORDER) + 1;
> + if (!bitmap_size)
> + continue;
> + free_area[zone_idx].bitmap = bitmap_zalloc(bitmap_size,
> + GFP_KERNEL);

This doesn't support sparse zones. We can have zones with massive
spanned page sizes, but very few present pages. On those zones, this
will exhaust memory for no good reason.

Comparing this to Alex's patch set, it's of much lower quality and at a
much earlier stage of development. The two sets are not really even
comparable right now. This certainly doesn't sell me on (or even really
enumerate the deltas in) this approach vs. Alex's.