zram is a driver in linux kernel. It compress the content in memory to reduce the pages used by application.
1 2 3 4 5 6 7 8 |
modprobe zram num_devices=1 # Now you have a /dev/zram0 echo 8G > /sys/block/zram0/disksize # Must set size before using it mkfs.ext4 -I 128 -m 0 /dev/zram0 # /dev/zram0 is only a block device therefore we need to create a simple filesystem on it mount /dev/zram0 /mnt/ # Now you can put some files into /mnt/ and you will find that they will occupied less space. |
But that’s not the only way we could use zram. Furthermore, we could use zram with tcmalloc to reduce user application’s cost of memory.
1 |
LD_PRELOAD="/usr/lib/libtcmalloc.so" TCMALLOC_MEMFS_MALLOC_PATH=/mnt/ redis-server |
Now we make redis-server to use memory in zram. If we use “lsof” to check the redis-server, it will show:
1 2 |
redis-ser 16648 XXX DEL REG 253,0 11 /mnt/.DlM24E redis-ser 16648 XXX 3u REG 253,0 1052672 11 /mnt/.DlM24E (deleted) |
That’s the file created by tcmalloc library, and it has already be compressed.