On 08/11/2017 03:58 AM, Michal Hocko wrote:
[I am sorry I didn't get to your previous versions]


Thank you for reviewing this work. I will address your comments, and send-out a new patches.


In this work we do the following:
- Never read access struct page until it was initialized

How is this enforced? What about pfn walkers? E.g. page_ext
initialization code (page owner in particular)

This is hard to enforce 100%. But, because we have a patch in this series that sets all memory that was allocated by memblock_virt_alloc_try_nid_raw() to ones with debug options enabled, and because Linux has a good set of asserts in place that check struct pages to be sane, especially the ones that are enabled with this config: CONFIG_DEBUG_VM_PGFLAGS. I was able to find many places in linux which accessed struct pages before __init_single_page() is performed, and fix them. Most of these places happen only when deferred struct page initialization code is enabled.


- Never set any fields in struct pages before they are initialized
- Zero struct page at the beginning of struct page initialization

Please give us a more highlevel description of how your reimplementation
works and how is the patchset organized. I will go through those patches
but it is always good to give an overview in the cover letter to make
the review easier.

Ok, will add more explanation to the cover letter.

Single threaded struct page init: 7.6s/T improvement
Deferred struct page init: 10.2s/T improvement

What are before and after numbers and how have you measured them.

When I send out this series the next time I will include before vs. after on the machine I tested, including links to dmesg output.

I used my early boot timestamps for x86 and sparc to measure the data. Early boot timestamps for sparc is already part of mainline, the x86 patches are out for review: https://lkml.org/lkml/2017/8/10/946 (should have changed subject line there :) ).

Reply via email to