On 21 Mar 2022, at 18:32, Roman Gushchin wrote: > On Mon, Mar 21, 2022 at 10:21:27AM -0400, Zi Yan wrote: >> From: Zi Yan <ziy@xxxxxxxxxx> >> >> To minimize the number of pages after a huge page truncation, we do not >> need to split it all the way down to order-0. The huge page has at most >> three parts, the part before offset, the part to be truncated, the part >> remaining at the end. Find the greatest common power of two multiplier of >> the non-zero values of them as the new order, so we can split the huge >> page to this order and keep the remaining pages as large and as few as >> possible. > > Would you mind please to describe the algorithm in more details? Sure. During truncation, there can be three parts in a huge page: 1. the _offset_ from the beginning of the huge page, 2. the _length_ of the to-be-truncated part, 3. the _remaining_ part after the to-be-truncated part. the size of the split huge page need to be the greatest common divisor of the non-zero ones of three after being rounded down to power of two. OK, I actually find there is a gcd function. I think the algorithm can simplified to new_order = ilog2(gcd(gcd(offset, length), remaining)) - PAGE_SHIFT; I will update the code, the commit message, and the comment in the next version. Thank you for the comment. -- Best Regards, Yan, Zi
Attachment:
signature.asc
Description: OpenPGP digital signature