On Mon 10-09-18 16:43:41, Alexander Duyck wrote: > From: Alexander Duyck <alexander.h.duyck@xxxxxxxxx> > > On systems with a large amount of memory it can take a significant amount > of time to initialize all of the page structs with the PAGE_POISON_PATTERN > value. I have seen it take over 2 minutes to initialize a system with > over 12GB of RAM. > > In order to work around the issue I had to disable CONFIG_DEBUG_VM and then > the boot time returned to something much more reasonable as the > arch_add_memory call completed in milliseconds versus seconds. However in > doing that I had to disable all of the other VM debugging on the system. > > In order to work around a kernel that might have CONFIG_DEBUG_VM enabled on > a system that has a large amount of memory I have added a new kernel > parameter named "page_init_poison" that can be set to "off" in order to > disable it. I am still not convinced that this all is worth the additional code. It is much better than a new config option for sure. If we really want this though then I suggest that the parameter handler should note the disabled state (when CONFIG_DEBUG_VM is on) to the kernel log. I would also make it explicit who might want to do that in the parameter description. > + page_init_poison= [KNL] Boot-time parameter changing the > + state of poisoning of page structures during early > + boot. Used to verify page metadata is not accessed > + prior to initialization. Available with > + CONFIG_DEBUG_VM=y. > + off: turn off poisoning > + on: turn on poisoning (default) > + what about the following wording or something along those lines Boot-time parameter to control struct page poisoning which is a debugging feature to catch unitialized struct page access. This option is available only for CONFIG_DEBUG_VM=y and it affects boot time (especially on large systems). If there are no poisoning bugs reported on the particular system and workload it should be safe to disable it to speed up the boot time. -- Michal Hocko SUSE Labs