Re: [PATCH 0/2] mm: swap: mTHP swap allocator base on swap cluster order

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

 



Chris Li <chrisl@xxxxxxxxxx> writes:

> On Thu, Jun 13, 2024 at 1:40 AM Huang, Ying <ying.huang@xxxxxxxxx> wrote:
>>
>> Chris Li <chrisl@xxxxxxxxxx> writes:
>>
>> > On Mon, Jun 10, 2024 at 7:38 PM Huang, Ying <ying.huang@xxxxxxxxx> wrote:
>> >>
>> >> Chris Li <chrisl@xxxxxxxxxx> writes:
>> >>
>> >> > On Wed, Jun 5, 2024 at 7:02 PM Huang, Ying <ying.huang@xxxxxxxxx> wrote:
>> >> >>
>> >> >> Chris Li <chrisl@xxxxxxxxxx> writes:
>> >> >>
>> >> >
>> >> >> > In the page allocation side, we have the hugetlbfs which reserve some
>> >> >> > memory for high order pages.
>> >> >> > We should have similar things to allow reserve some high order swap
>> >> >> > entries without getting polluted by low order one.
>> >> >>
>> >> >> TBH, I don't like the idea of high order swap entries reservation.
>> >> > May I know more if you don't like the idea? I understand this can be
>> >> > controversial, because previously we like to take the THP as the best
>> >> > effort approach. If there is some reason we can't make THP, we use the
>> >> > order 0 as fall back.
>> >> >
>> >> > For discussion purpose, I want break it down to smaller steps:
>> >> >
>> >> > First, can we agree that the following usage case is reasonable:
>> >> > The usage case is that, as Barry has shown, zsmalloc compresses bigger
>> >> > size than 4K and can have both better compress ratio and CPU
>> >> > performance gain.
>> >> > https://lore.kernel.org/linux-mm/20240327214816.31191-1-21cnbao@xxxxxxxxx/
>> >> >
>> >> > So the goal is to make THP/mTHP have some reasonable success rate
>> >> > running in the mix size swap allocation, after either low order or
>> >> > high order swap requests can overflow the swap file size. The allocate
>> >> > can still recover from that, after some swap entries got free.
>> >> >
>> >> > Please let me know if you think the above usage case and goal are not
>> >> > reasonable for the kernel.
>> >>
>> >> I think that it's reasonable to improve the success rate of high-order
>> >
>> > Glad to hear that.
>> >
>> >> swap entries allocation.  I just think that it's hard to use the
>> >> reservation based method.  For example, how much should be reserved?
>> >
>> > Understand, it is harder to use than a fully transparent method, but
>> > still better than no solution at all. The alternative right now is we
>> > can't do it.
>> >
>> > Regarding how much we should reserve. Similarly, how much should you
>> > choose your swap file size? If you choose N, why not N*120% or N*80%?
>> > That did not stop us from having a swapfile, right?
>> >
>> >> Why system OOM when there's still swap space available?  And so forth.
>> >
>> > Keep in mind that the reservation is an option. If you prefer the old
>> > behavior, you don't have to use the reservation. That shouldn't be a
>> > reason to stop others who want to use it. We don't have an alternative
>> > solution for the long run mix size allocation yet. If there is, I like
>> > to hear it.
>>
>> It's not enough to make it optional.  When you run into issue, you need
>> to debug it.  And you may debug an issue on a system that is configured
>> by someone else.
>
> That is in general true with all kernel development regardless of
> using options or not. If there is a bug in my patch, I will need to
> debug and fix it or the patch might be reverted.
>
> I don't see that as a reason to take the option path or not. The
> option just means the user taking this option will need to understand
> the trade off and accept the defined behavior of that option.

User configuration knobs are not forbidden for Linux kernel.  But we are
more careful about them because they will introduce ABI which we need to
maintain forever.  And they are hard to be used for users.  Optimizing
automatically is generally the better solution.  So, I suggest you to
think more about the automatically solution before diving into a new
option.

>>
>> >> So, I prefer the transparent methods.  Just like THP vs. hugetlbfs.
>> >
>> > Me too. I prefer transparent over reservation if it can achieve the
>> > same goal. Do we have a fully transparent method spec out? How to
>> > achieve fully transparent and also avoid fragmentation caused by mix
>> > order allocation/free?
>> >
>> > Keep in mind that we are still in the early stage of the mTHP swap
>> > development, I can have the reservation patch relatively easily. If
>> > you come up with a better transparent method patch which can achieve
>> > the same goal later, we can use it instead.
>>
>> Because we are still in the early stage, I think that we should try to
>> improve transparent solution firstly.  Personally, what I don't like is
>> that we don't work on the transparent solution because we have the
>> reservation solution.
>
> Do you have a road map or the design for the transparent solution you can share?
> I am interested to know what is the short term step(e.g. a month)  in
> this transparent solution you have in mind, so we can compare the
> different approaches. I can't reason much just by the name
> "transparent solution" itself. Need more technical details.
>
> Right now we have a clear usage case we want to support, the swap
> in/out mTHP with bigger zsmalloc buffers. We can start with the
> limited usage case first then move to more general ones.

TBH, This is what I don't like.  It appears that you refuse to think
about the transparent (or automatic) solution.

I haven't thought about them thoroughly, but at least we may think about

- promoting low order non-full cluster when we find a free high order
  swap entries.

- stealing a low order non-full cluster with low usage count for
  high-order allocation.

- freeing more swap entries when swap devices become fragmented.

>> >> >> that's really important for you, I think that it's better to design
>> >> >> something like hugetlbfs vs core mm, that is, be separated from the
>> >> >> normal swap subsystem as much as possible.
>> >> >
>> >> > I am giving hugetlbfs just to make the point using reservation, or
>> >> > isolation of the resource to prevent mixing fragmentation existing in
>> >> > core mm.
>> >> > I am not suggesting copying the hugetlbfs implementation to the swap
>> >> > system. Unlike hugetlbfs, the swap allocation is typically done from
>> >> > the kernel, it is transparent from the application. I don't think
>> >> > separate from the swap subsystem is a good way to go.
>> >> >
>> >> > This comes down to why you don't like the reservation. e.g. if we use
>> >> > two swapfile, one swapfile is purely allocate for high order, would
>> >> > that be better?
>> >>
>> >> Sorry, my words weren't accurate.  Personally, I just think that it's
>> >> better to make reservation related code not too intrusive.
>> >
>> > Yes. I will try to make it not too intrusive.
>> >
>> >> And, before reservation, we need to consider something else firstly.
>> >> Whether is it generally good to swap-in with swap-out order?  Should we
>> >
>> > When we have the reservation patch (or other means to sustain mix size
>> > swap allocation/free), we can test it out to get more data to reason
>> > about it.
>> > I consider the swap in size policy an orthogonal issue.
>>
>> No.  I don't think so.  If you swap-out in higher order, but swap-in in
>> lower order, you make the swap clusters fragmented.
>
> Sounds like that is the reason to apply swap-in the same order of the swap out.
> In any case, my original point still stands. We need to have the
> ability to allocate high order swap entries with reasonable success
> rate *before* we have the option to choose which size to swap in. If
> allocating a high order swap always fails, we will be forced to use
> the low order one, there is no option to choose from. We can't evalute
> "is it generally good to swap-in with swap-out order?" by actual runs.

I think we don't need to fight for that.  Just prove the value of your
patchset with reasonable use cases and normal workloads.  Data will
persuade people.

--
Best Regards,
Huang, Ying





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux