Re: Carrier migration, madvice and poor performance

Lukas Larsson <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <CAP3zBqNfHEDygRxAqf73rxESQMANRFqdR-madG888y8wFL-shg@mail.gmail.com>
Hello,

On Tue, Aug 25, 2020 at 9:26 AM Pablo Polvorin <[email protected]>
wrote:

> Hi,
> we recently migrated our systems from OTP21 to OTP22.   On one of them,
> performance noticeable degraded when switched to OTP22 (20% drop).
> After some investigation, we found the apparent cause was the madvice()
> call when returning the carriers to the carrier pool, that lead to lots of
> minor page faults, ultimately killing our performance.  We run in a
> virtualised cloud, not sure how much that affects the minor page fault
> overhead.
>

Do you know if you have access to MADV_FREE or use MADV_DONTNEED?


> So we spend some time tweaking the allocator' settings (that haven't been
> touched in many years, with the system itself evolved a lot since that
> time) and got
> to a good improvement. But for carrier migration ultimately the thing that
> worked best for us was just disable it entirely.  Is this a terrible idea?
> our load is a fairly stable flow of homogenous requests, that lead to
> several short-lived (milliseconds) processes being spawned. Have plenty of
> memory, so  I'm not too worried about a badly utilised carrier being stuck
> within a scheduler.
>
> Got a few questions regarding this:
>
> * Wonder, it's something common out there to disable carrier migration?
> Feels a bit strange that nobody hit the same problem when updating to
> OTP22, I’m
> assuming there are lots of not-so-great allocator settings out there, like
> was our case.  (disabling it was our last try actually, we tried the
> settings suggested by
> erts_alloc_config, and then make the +M<S>acul  and +M<S>acfml settings
> significantly stricter as well, and while that helps, still had too many
> page faults).
>
>
Carrier migration can help a lot to deal with memory fragmentation issues.
It is however not free as you have noticed. I know that other people have
disabled it with some success, but as far as I remember that was to work
around bugs in the migration logic, not because of the performance overhead.


> * What's the tradeoff on having large multiblock carriers,  other than the
> memory overhead when they aren't fully used?.
>
> * Do it make sense to make a config flag to allow carrier migration but
> disable the madvice() on free blocks?
>

Given your experiences with it, I think that would make sense. We did not
notice any degradation when testing madvise ourselves, but it is not
possible to test all scenarios in all environments.

Lukas
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.