On 3/10/20 12:46 PM, Rik van Riel wrote: > On Tue, 2020-03-10 at 20:36 +0100, Michal Hocko wrote: >> On Tue 10-03-20 12:19:06, Roman Gushchin wrote: >> [...] >>>> I found this out by testing code and specifying >>>> hugetlb_cma=2M. Messages >>>> in log were: >>>> kernel: hugetlb_cma: reserve 2097152, 1048576 per node >>>> kernel: hugetlb_cma: successfully reserved 1048576 on node 0 >>>> kernel: hugetlb_cma: successfully reserved 1048576 on node 1 >>>> But, it really reserved 1GB per node. >>> >>> Good point! In the passed size is too small to cover a single huge >>> page, >>> we should probably print a warning and bail out. >> >> Or maybe you just want to make the interface the unit size rather >> than >> overall size oriented. E.g. I want 10G pages per each numa node. > > How would that work for architectures that have multiple > possible hugetlbfs gigantic page sizes, where the admin > can allocate different numbers of differently sized pages > after bootup? For hugetlb page reservations at boot today, pairs specifying size and quantity are put on the command line. For example, hugepagesz=2M hugepages=512 hugepagesz=1G hugepages=64 We could do something similiar for CMA. hugepagesz=512M hugepages_cma=256 hugepagesz=1G hugepages_cma=64 That would make things much more complicated (implies separate CMA reservations per size) and may be overkill for the first implementation. Perhaps we limit CMA reservations to one gigantic huge page size. The architectures would need to define the default and there could be a command line option to override. Something like, default_cmapagesz= analogous to today's default_hugepagesz=. Then hugepages_cma= is only associated with that default gigantic huge page size. The more I think about it, the more I like limiting CMA reservations to only one gigantic huge page size (per arch). -- Mike Kravetz