x86, perf, pmu: make reserve_ds_buffers() allocate memory dynamically
Hi guys,
Some kdump folks noticed that on large machines (say 80 cpu threads), the kernel reserved a good chunk of memory in the kdump kernel with the call to reserve_ds_buffers(). About 64k per cpu.
Normally the kdump kernel boots with maxcpus=1 to limit the amount of processing and memory usage it needs. However, with reserve_ds_buffers() it seems to allocate a giant chunk of memory due to its use of for_each_possible_cpu().
I was wondering if it was possible to move some of that allocation to the cpu_prepare/cpu_starting routines and allocate during a cpu hotplug event. I am not sure if some of this allocation is on a per cpu basis (which includes multiple cores) or if there is some sort of other restriction that required the code to be statically allocated at boot time.
Thanks,
Don
Quoted 11 lines · Don Zickus
Hi guys,
Some kdump folks noticed that on large machines (say 80 cpu threads), the kernel reserved a good chunk of memory in the kdump kernel with the call to
reserve_ds_buffers(). About 64k per cpu.Normally the kdump kernel boots with maxcpus=1 to limit the amount of processing and memory usage it needs. However, with
reserve_ds_buffers()it seems to allocate a giant chunk of memory due to its use offor_each_possible_cpu().
Quoted 5 lines
I was wondering if it was possible to move some of that allocation to the cpu_prepare/cpu_starting routines and allocate during a cpu hotplug event. I am not sure if some of this allocation is on a per cpu basis (which includes multiple cores) or if there is some sort of other restriction that required the code to be statically allocated at boot time.
The only complication I can remember is that the BTS buffers are an order 4 allocation, so the later you allocate them the less likely they are to be available.
Other than that there isn't anything magical about any of it.