Re: [External] Re: [PATCH v7 06/15] mm/hugetlb: Disable freeing vmemmap if struct page size is not power of two

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 09.12.20 16:13, Muchun Song wrote:
> On Wed, Dec 9, 2020 at 6:10 PM David Hildenbrand <david@xxxxxxxxxx> wrote:
>>
>> On 09.12.20 11:06, David Hildenbrand wrote:
>>> On 09.12.20 11:03, Muchun Song wrote:
>>>> On Wed, Dec 9, 2020 at 5:57 PM David Hildenbrand <david@xxxxxxxxxx> wrote:
>>>>>
>>>>> On 30.11.20 16:18, Muchun Song wrote:
>>>>>> We only can free the tail vmemmap pages of HugeTLB to the buddy allocator
>>>>>> when the size of struct page is a power of two.
>>>>>>
>>>>>> Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx>
>>>>>> ---
>>>>>>  mm/hugetlb_vmemmap.c | 5 +++++
>>>>>>  1 file changed, 5 insertions(+)
>>>>>>
>>>>>> diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c
>>>>>> index 51152e258f39..ad8fc61ea273 100644
>>>>>> --- a/mm/hugetlb_vmemmap.c
>>>>>> +++ b/mm/hugetlb_vmemmap.c
>>>>>> @@ -111,6 +111,11 @@ void __init hugetlb_vmemmap_init(struct hstate *h)
>>>>>>       unsigned int nr_pages = pages_per_huge_page(h);
>>>>>>       unsigned int vmemmap_pages;
>>>>>>
>>>>>> +     if (!is_power_of_2(sizeof(struct page))) {
>>>>>> +             pr_info("disable freeing vmemmap pages for %s\n", h->name);
>>>>>
>>>>> I'd just drop that pr_info(). Users are able to observe that it's
>>>>> working (below), so they are able to identify that it's not working as well.
>>>>
>>>> The below is just a pr_debug. Do you suggest converting it to pr_info?
>>>
>>> Good question. I wonder if users really have to know in most cases.
>>> Maybe pr_debug() is good enough in environments where we want to debug
>>> why stuff is not working as expected.
>>>
>>
>> Oh, another thought, can we glue availability of
>> HUGETLB_PAGE_FREE_VMEMMAP (or a new define based on the config and the
>> size of a stuct page) to the size of struct page somehow?
>>
>> I mean, it's known at compile time that this will never work.
> 
> I want to define a macro which indicates the size of the
> struct page. There is place (kernel/bounds.c) where can
> do similar things. When I added the following code in
> that file.
> 
>         DEFINE(STRUCT_PAGE_SIZE, sizeof(struct page));
> 
> Then the compiler will output a message like:
> 

Hm, from what I understand you cannot use sizeof() in #if etc. So it
might not be possible after all. At least the compiler should optimize
code like

if (!is_power_of_2(sizeof(struct page))) {
	// either this
} else {
	// or that
}

that can never be reached

-- 
Thanks,

David / dhildenb




[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux