On 03/03/2012 12:05 AM, Phillip Susi wrote:
On 02/27/2012 08:58 PM, John Moser wrote:

I believe that swap space is only actually freed when the memory it is backing is freed. In other words, if the process frees the memory, the swap is freed, but when the page is read back in from swap, it is left in swap so that the page can be discarded again in the future without having to write it back out again. This can lead to some wasted memory by having pages still in zswap that have also been moved back into regular ram.


This may be true. Also zswap seems to not bother compacting until it's being added to, so it bloats and then doesn't shrink much. For example you can put 500MB into zswap at 29% compression ratio and 30% total memory usage, free 200MB and have it stay at 29% compression ratio with the actual data 70MB smaller ... but around 40% total memory usage because you only saved 20MB of RAM, as fragmentation left a lot of empty space in the zswap in pages that also contain in-use compressed data. It doesn't background compact.

- Desktops may benefit by eschewing physical swap for RAM
* But this breaks suspend-to-disk; then again, so does everything:
+ Who has a 16GB swap partition? Many people have 4GB, 8GB, 16GB RAM
+ The moment RAM + SWAP - CACHE > TOTAL_SWAP, suspend to disk breaks

Cache can be discarded at hibernate time, so you only need RAM + SWAP. Also people generally don't go to hibernate while that much ram is in use, and almost never have much swap used. Also, I *think* I saw a patch somewhere recently to address this by avoiding the zswap device for hibernation and falling back to other swaps instead.


Well I mean I shut off my VMs and all. A quick glance and some math at top tells me right now I'm using 2.3GB ... and there's nothing I'd want to close if I decided to hibernate my computer for the night. Closing down programs sort of defeats the purpose. Maybe LibreOffice.
It looks like CleanCache/CompCache is a better solution since it avoids the step of emulating a block device.



zcache on cleancache is just for compressing page cache (file backed), not swap (anonymous). zcache on freeswap is the solution for compressing swap without a block device, also written by the zram guy, not sure how to configure it though. CleanCache and zcache are in 3.2 staging, freeswap is not. For what it's worth I'm running both zram swap and CleanCache zcache in tandem; one does not affect the other. I've tested this running Ubuntu 11.10 at 288MB of RAM, which is painful; it's crippling MUCH faster without zcache enabled.

http://i.imgur.com/aAeSE.png

All of the above is swap on zram, no disk backed device. With zcache enabled and two CPUs (kswapd uses 60%-70% CPU like this!) I can get this far with about 20-25MB of page cache, and then I can still raise and lower Firefox and open a new tab in gnome-terminal to run killall on Firefox (attempting to close Firefox was taking too long for dialog boxes to load and draw--it annoyed me).

I'm pretty sure zram will be superceded by zcache on freeswap. zcache is a tmem backend, freeswap and CleanCache are freemem frontends. Any backend can be used on any frontend, so when (if) the freeswap frontend goes into mainline zcache will load onto that. zcache is zram, it uses zram's xvmalloc when running on freeswap (uses a different allocator on page cache) and everything, it's even written by the same guy. zcache is just zram ported to tmem, which makes it both the same and separate--it is zram, but it's not zram. As tmem looks like the way the kernel is moving in the future, zram will probably go away--the appropriate compressed in-memory file system is tmpfs with zswap, as RAM used to back tmpfs can be swapped and thus zcache and zram will both act to compress tmpfs, so zram's usefulness as a block device in RAM that can house a compressed file system is limited.

Of course, that theory then raises the question: what about when you don't have swap? Does the kernel make its swapping decisions and then ask freeswap if it's got something to do with this memory when you don't actually have any swap space? (i.e. attempting to swap without swap)

Anyway in the end I feel the situation boils down to this: You get an Intel CPU these days and it comes with 6 cores. What do you do with 6 cores? You run some pretty extreme applications. What does your average desktop do with 6 cores with hyperthreading enabled running 12 way SMP? It uses 1-2 cores ... what do you do with the other 10? Run compression/decompression and compact fragmented compressed swap, what else? On something like i.e. the XO laptop where RAM is limited, it's simply a necessity*. On a desktop with a smaller RAM space and a slower CPU, it's a livable trade-off that does enhance performance some (it's a godsend on a dual core with just 512MB RAM trying to run Unity).



*I believe the use is different on a system like the XO. On the desktop you might want 2/3 of your RAM to be compressed and 1/3 working set when you have tons and tons of CPU--if you think you need 17G and you only have 8G. More correctly, you can take your system out that far with a visible but livable decrease in performance. But on a system like the XO you want to figure out what your typical working set is and make the zram swap space 3 times bigger, as data is on average 1/3 its original size when compressed... this will avoid excessive swapping from additional memory pressure above the typical working set.

--
Ubuntu-devel-discuss mailing list
Ubuntu-devel-discuss@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel-discuss

Reply via email to