On Thu, Jun 15, 2023 at 5:27 PM David Hildenbrand <david@xxxxxxxxxx> wrote:
Interesting. When looking at possible ways to achieve that in a clean
way, my understanding was that the page might not always be accounted to
a memcg (e.g., simply some buffer?). Besides the swap->zram case I was
thinking about other fs->zram case, or just a straight read/write to the
zram device.
The easiest way to see where that goes wrong I think is
zram_bvec_write_partial(), where we simply allocate a temporary page.
Either I am missing something important, or this only works in some
special cases.
I came to the conclusion that the only reasonable way is to assign a
complete zram device to a single cgroup and have all memory accounted to
that cgroup. Does also not solve all use cases (especially the
swap->zram case that might be better offjust using zswap?) but at least
the memory gets accounted in a more predictable way.
Happy to learn more.
--
Cheers,
David / dhildenb
Hi david, thanks for your reply. This should be my mistake, I didn't
describe the
problem clearly.
The reason for the problem is not the temporary page allocated at the beginning
of zram_bvec_write_partial() and released at the end,but the compressed memory
allocated by zs_malloc() in zram_write_page().
So, it may not meet the need to assign a complete zram device to a
single cgroup.
we need to charge the compressed memory to the original page's memory cgroup,
which is not charged so far.