this post was submitted on 19 Jun 2024
91 points (100.0% liked)

chat

8122 readers
224 users here now

Chat is a text only community for casual conversation, please keep shitposting to the absolute minimum. This is intended to be a separate space from c/chapotraphouse or the daily megathread. Chat does this by being a long-form community where topics will remain from day to day unlike the megathread, and it is distinct from c/chapotraphouse in that we ask you to engage in this community in a genuine way. Please keep shitposting, bits, and irony to a minimum.

As with all communities posts need to abide by the code of conduct, additionally moderators will remove any posts or comments deemed to be inappropriate.

Thank you and happy chatting!

founded 3 years ago
MODERATORS
 

CS degree is kinda useless, right? I haven't slept the whole night applying and thinking about this...

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 2 points 2 months ago* (last edited 2 months ago) (1 children)

Yes, more or less, they are closely related:

In regular swap, when you're low on memory the kernel chooses some memory pages (low priority processes and least recently used) and writes them on disk on a file or partition. When the process that owns those pages need them back, the kernel goes fetch them one at a time. Since memory pages are 4KiB the speed on this depends on the 4k random access speed of your disk.

You can have more than one swap, and the order they are used depends on their priority, or on the order they were enabled in if you didn't specify any priority.

zram is a kind of swap space that, instead of writing to disk, compresses the pages and writes them back in RAM. You set an uncompressed size for it and if the pages don't compress well (usually encrypted on already-compressed data) then it will occupy the same amount of RAM. Since you can't tell in advance what the compressed size will be and there's no mechanism to stop it from filling up, you must be conservative on the size of zram. When the zram gets full all new pages will go to the next swap in priority order. This causes a problem where there's old data you don't care about taking RAM space in zram that cannot be reclaimed, and then your workload is going to regular swap which is slow.

zswap is a layer on top of swap, the technical name is "frontswap". For it to work you need to already have a swap configured. Before memory pages are written down on the swap file, they are compressed, and if the compression ratio is good enough the pages go to RAM instead of to the swap file. You set a compressed size for the zswap (by default, 20% of your total RAM) and when this limit gets full the least recently used pages are written to disk. The compression is so fast that you barely notice a hiccup while it's happening, it feels like you magically have 50% more RAM than before.

Answering your question, zswap is configured by kernel parameters, and now that you mention it it might work to put the parameters on the kernel cmdline instead of editing sysfs, this means configuring the boot loader and adding zswap.enabled=1 zswap.compressor=lz4 zswap.zpool=z3fold to the kernel cmdline.

[–] [email protected] 1 points 2 months ago (1 children)

I was troubled why zswap.enabled=1, zswap.max_pool_percent=50 and vm.swappiness=100 worked, but not zswap.compressor=lz4 and zswap.zpool=z3fold. Turns out that the kernel available in the substitute server has it disabled. I guess I'll use lzo and zsmalloc for now.

[–] [email protected] 2 points 2 months ago

Huh, when I set it up zsmalloc wasn't finished and never deallocated. But it seems that today it's the right choice! Thanks.