์ค์/zRAM
๊ฐ์
์ค์์ ๋ฌผ๋ฆฌ์ RAM ์ฉ๋์ด ๋ถ์กฑํ ๋, ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง๋ฅผ ๋์คํฌ์ ์์๋ก ์ ์ฅํ์ฌ ์์คํ ์ด ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง ๊ฒ์ฒ๋ผ ๋์ํ๊ฒ ํ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฒ์ ๋๋ค. ์ ํต์ ์ธ ์ค์์ ๋์คํฌ I/O๋ฅผ ๋๋ฐํ์ฌ ์ง์ฐ์๊ฐ๊ณผ SSD ๋ง๋ชจ๋ฅผ ์ ๋ฐํ์ง๋ง, zRAM์ RAM ๋ด์ ์์ถ ๋ธ๋ก ๋๋ฐ์ด์ค๋ฅผ ๋ง๋ค์ด ๋์คํฌ I/O ์์ด ์ค์์ ์ฒ๋ฆฌํ์ฌ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํฌ๊ฒ ์ํํฉ๋๋ค.
zRAM์ Linux 3.14๋ถํฐ ๋ฉ์ธ๋ผ์ธ์ ํฌํจ๋์ด ๋ชจ๋ฐ์ผ, ์๋ฒ ๋๋, ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ, Android์ RAM Plus, Samsung์ Extended RAM ๊ฐ์ ์ด๋ฆ์ผ๋ก ์์ฉํ๋์ด ์์ต๋๋ค. ๋ณธ ๋ฌธ์์์๋ ์ค์์ ๋์ ์๋ฆฌ, zRAM์ ๋ด๋ถ ๊ตฌ์กฐ์ ์ค์ ๋ฐฉ๋ฒ, zswap๊ณผ์ ์ฐจ์ด, ๊ทธ๋ฆฌ๊ณ ์ด์ ๊ด์ ์์์ ์ ํ ๊ธฐ์ค์ ๋ถ์ํฉ๋๋ค.
๊ทธ๋ฆผ 1. ์ค์์์ zRAM๊น์ง์ ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต๊ณผ ๋ฐ์ดํฐ ํ๋ฆ
ํต์ฌ ๊ฐ๋
์ค์์ ๋์ ์๋ฆฌ
์ค์์ ํ์ด์ง ๊ตํ(page swapping)์ ํตํด ๋ฌผ๋ฆฌ์ RAM์ ์ด๊ณผํ๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ๊ณตํฉ๋๋ค. ์ปค๋์ ์ฌ์ฉ ๋น๋๊ฐ ๋ฎ์ ํ์ด์ง๋ฅผ ๊ฐ์งํ๊ณ , ์ด๋ฅผ swap ๋๋ฐ์ด์ค์ ๊ธฐ๋กํ์ฌ ํด๋น RAM ์์ญ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ฌํ ๋นํฉ๋๋ค.
- PTE(Page Table Entry): ๊ฐ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์์ ํ์ด์ง์ ๋ฌผ๋ฆฌ์ ์์น์ ์ํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- Swap entry: PTE์์ ์ค์ ์์ญ์ผ๋ก ๊ต์ฒด๋ ํ์ด์ง๋ฅผ ๋ํ๋ด๋ ํน๋ณํ ํ์์ ๋๋ค.
- Swap cache: ์ค์ I/O ์ค๋ณต์ ์ค์ด๊ธฐ ์ํ ์ปค๋ ๋ด ์บ์ ๊ณ์ธต์ ๋๋ค.
zRAM ๊ตฌ์กฐ
zRAM์ RAM ๋ด์์ ์์ถ ๋ธ๋ก ๋๋ฐ์ด์ค๋ฅผ ๋์ ์ผ๋ก ์์ฑํฉ๋๋ค. ์ด ๋๋ฐ์ด์ค๋ /dev/zram<id>๋ก ๋
ธ์ถ๋๋ฉฐ, ์ผ๋ฐ ๋ธ๋ก ๋๋ฐ์ด์ค์ฒ๋ผ mkswap, swapon์ผ๋ก ํ์ฑํํ ์ ์์ต๋๋ค.
- ์์ถ ํ: RAM์ ํ ๋น๋ ์์ถ ๋ฐ์ดํฐ ์ ์ฅ ์์ญ์ผ๋ก, on-demand๋ก ํ ๋น๋๊ณ ํด์ ๋ฉ๋๋ค.
- ๋ฉํ๋ฐ์ดํฐ: ๊ฐ ํ์ด์ง์ ์์ถ๋ ํฌ๊ธฐ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ํ ์ด๋ธ์ ๋๋ค.
- blk-mq ํตํฉ: Linux ๋ธ๋ก ๋ ์ด์ด์ ๋ฉํฐํ์ ํตํฉ๋์ด ๋์ ๋ณ๋ ฌ์ฑ์ ์ ๊ณตํฉ๋๋ค.
- ์ด์ ํต๊ณ ๋
ธ๋:
/sys/block/zram0/mm_stat,io_stat,bd_stat๋ก ์์ถ๋ฅ , ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, writeback๋์ ๊ด์ธกํ ์ ์์ต๋๋ค.
zswap๊ณผ์ ์ฐจ์ด
zswap๊ณผ zRAM์ ๋ชจ๋ RAM ๊ธฐ๋ฐ ์์ถ swap์ ์ง์ํ์ง๋ง, ์ํคํ ์ฒ์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ๋ค๋ฆ ๋๋ค.
| ํญ๋ชฉ | zRAM | zswap |
|---|---|---|
| ํํ | ๋ ๋ฆฝ ๋ธ๋ก ๋๋ฐ์ด์ค | ์ปค๋ ๋ด ์บ์ ๊ณ์ธต |
| ๋ฐฑ์ ์คํ ๋ฆฌ์ง | ์ ํ์ (writeback) | ํ์ (๋ฐฑ์ swap ์ฅ์น) |
| ํฌ๋ช ์ฑ | ์๋ ์ค์ ํ์ | ์๋ ๋์ |
| ์ ํฉ ํ๊ฒฝ | ๋ชจ๋ฐ์ผ/์๋ฒ ๋๋, swap ๋์ฒด | ๋ฐ์คํฌํฑ/์๋ฒ, swap I/O ๊ฐ์ |
๋น๊ต/๋ถ์
์ค์ ๊ธฐ์ ๋น๊ต
| ๊ธฐ์ | ์์ถ ์ฌ๋ถ | ๋์คํฌ I/O | CPU ์ค๋ฒํค๋ | ์ง์ฐ์๊ฐ | ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ |
|---|---|---|---|---|---|
| ๋์คํฌ ์ค์ | ์๋์ค | ํ์ | ๋ฎ์ | 1~10ms | ์์ |
| zRAM | ์ | ์์ (๊ธฐ๋ณธ) | ์ค๊ฐ | 10~50ฮผs | 2~5๋ฐฐ |
| zswap | ์ | ์ฐ๊ธฐ๋ง | ์ค๊ฐ | 10~100ฮผs | 2~4๋ฐฐ |
| ํ๋์จ์ด ์์ถ | ์ | ์์ | ๊ฑฐ์ ์์ | ~1ns | 2~4๋ฐฐ |
์์ถ ์๊ณ ๋ฆฌ์ฆ ๋น๊ต
| ์๊ณ ๋ฆฌ์ฆ | ์์ถ๋ฅ | ์๋ | ํน์ง |
|---|---|---|---|
| LZO-RLE | ์ค๊ฐ | ๋น ๋ฆ | ๋ฐฐํฌํ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์์ฃผ ์ ํ๋๋ฉฐ ์์ ์ |
| LZ4 | ๋ฎ์ | ๋งค์ฐ ๋น ๋ฆ | ๋ฎ์ ์ง์ฐ์๊ฐ ์๊ตฌ ์ |
| ZSTD | ๋์ | ๋ณดํต | ์ต์ ์ ์์ถ๋ฅ /์๋ ๊ท ํ |
| LZO | ์ค๊ฐ | ๋น ๋ฆ | ๋ ๊ฑฐ์ ํธํ |
| 842 | ๋ฎ์ | ๋งค์ฐ ๋น ๋ฆ | ํ๋์จ์ด ๊ฐ์ ์ง์ ์ |
๋์ ์๋ฆฌ
zRAM ๋ฐ์ดํฐ ํ๋ฆ
์ฐ๊ธฐ ๊ฒฝ๋ก:
ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ โ ์ปค๋ swap โ zRAM ์์ถ โ ์์ถ๋ RAM ํ
์ฝ๊ธฐ ๊ฒฝ๋ก:
์์ถ๋ RAM ํ โ zRAM ํด์ โ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ๋ณต์
Writeback ๊ฒฝ๋ก:
์์ถ๋ RAM ํ โ ๋ฐฑ์
์คํ ๋ฆฌ์ง (๋น์์ถ์ฑ/์์ด๋ค ํ์ด์ง)
zRAM ์ค์ ๋จ๊ณ
- ๋ชจ๋ ๋ก๋:
modprobe zram num_devices=N์ผ๋ก zRAM ๋๋ฐ์ด์ค๋ฅผ ์์ฑํฉ๋๋ค. - ์์ถ ์๊ณ ๋ฆฌ์ฆ ์ ํ:
/sys/block/zram0/comp_algorithm์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ค์ ํฉ๋๋ค. - ๋์คํฌ ํฌ๊ธฐ ์ค์ :
/sys/block/zram0/disksize์ ๋์คํฌ ํฌ๊ธฐ๋ฅผ ์ง์ ํฉ๋๋ค. RAM ํฌ๊ธฐ์ 2๋ฐฐ๋ฅผ ๋๊ธฐ์ง ์๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. - ๋ฉ๋ชจ๋ฆฌ ์ ํ:
/sys/block/zram0/mem_limit์ผ๋ก ์์ถ ๋ฐ์ดํฐ์ ์ฌ์ฉํ ์ต๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ํํฉ๋๋ค. - ํ์ฑํ:
mkswap /dev/zram0 && swapon /dev/zram0์ผ๋ก ์ค์์ผ๋ก ํ์ฑํํฉ๋๋ค.
์ด์ ์ค์๋ mm_stat์ orig_data_size, compr_data_size, mem_used_total์ ํจ๊ป ๋ณด๋ฉด์ ์ค์ ์ ๊ฐ๋ฅ ๊ณผ ๋ฉํ๋ฐ์ดํฐ ์ค๋ฒํค๋๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. bd_stat๋ writeback์ด ์ค์ ๋ก ์ผ๋ง๋ ๋ฐ์ํ๋์ง ๋ณด์ฌ ์ฃผ๋ฏ๋ก, SSD ๋ง๋ชจ ๊ด๋ฆฌ๊ฐ ํ์ํ ํ๊ฒฝ์์ ์ ์ฉํฉ๋๋ค.
writeback ๋์
CONFIG_ZRAM_WRITEBACK์ด ํ์ฑํ๋๋ฉด, zRAM์ ๋น์์ถ์ฑ(huge) ํ์ด์ง๋ ์์ด๋ค(idle) ํ์ด์ง๋ฅผ ๋ฐฑ์
์คํ ๋ฆฌ์ง์ ๊ธฐ๋กํ ์ ์์ต๋๋ค. ์ด๋ backing_dev๋ ์ผ๋ฐ์ ์ผ๋ก disksize๋ฅผ ์ค์ ํ๊ธฐ ์ ์ ์ค๋นํด์ผ ํฉ๋๋ค.
hugewriteback: ์์ถํ ์ ์๋ ํ์ด์ง๋ฅผ ๋ฐฑ์ ์คํ ๋ฆฌ์ง์ ๊ธฐ๋กํฉ๋๋ค.idlewriteback: ์ ๊ทผ์ด ์๋ ์ฝ๋ ํ์ด์ง๋ฅผ ๋ฐฑ์ ์คํ ๋ฆฌ์ง์ ๊ธฐ๋กํฉ๋๋ค.writeback_limit: ์ผ์ผ writeback๋์ ์ ํํ์ฌ SSD ๋ง๋ชจ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
recompression ๋์
CONFIG_ZRAM_MULTI_COMP๋ ์ฌ๋ฌ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ํฉ๋๋ค. ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ 1๊ฐ์ ๋ณด์กฐ ์๊ณ ๋ฆฌ์ฆ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋๊ณ , ๋ฉ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์์ถ ํจ์จ์ด ๋ฎ์ ํ์ด์ง๋ฅผ ๋ ๋์ ์์ถ๋ฅ ์ ๋ณด์กฐ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ค์ ์์ถํ ์ ์์ต๋๋ค.
1์ฐจ ์์ถ (๋น ๋ฆ): LZ4๋ก ์๋
โ ์คํจ ์ 2์ฐจ ์์ถ (๋์ ์์ถ๋ฅ ): ZSTD๋ก ์ฌ์์ถ
โ ์ฝ๋ ํ์ด์ง: ๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฌ์์ถํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ
์ฅ๋จ์
์ฅ์
- ๋์คํฌ I/O ์์ ์ ๊ฑฐ๋ก SSD ์๋ช ์ฐ์ฅ ๋ฐ ์์คํ ์ฑ๋ฅ ํฅ์
- ๋ชจ๋ฐ์ผ/์๋ฒ ๋๋ ํ๊ฒฝ์์ RAM ์ฉ๋ ๊ฐ์ ํ์ฅ (์ต๋ 2~5๋ฐฐ)
- ๋์คํฌ ์ค์ ๋๋น ์๋ฐฑ ๋ฐฐ ๋น ๋ฅธ ์ง์ฐ์๊ฐ (ฮผs vs ms)
- ์ปค๋ ๋ชจ๋ ํํ๋ก ์ ์ฐํ ์ค์ ๊ณผ ๊ด๋ฆฌ ๊ฐ๋ฅ
- writeback/recompression์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํจ์จ ์ต์ ํ ๊ฐ๋ฅ
๋จ์
- CPU ์ฐ์ฐ ์์์ ์๋ชจํ์ฌ ์์ถ/ํด์ ์ค๋ฒํค๋ ๋ฐ์
- ๋น์์ถ์ฑ ๋ฐ์ดํฐ(์ด๋ฏธ์ง, ์ํธํ ๋ฐ์ดํฐ)์์๋ ํจ๊ณผ ๊ธ๊ฐ
- ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ์ ์ค๋ฒํค๋๊ฐ ์ปค์ง ์ ์์
- ๊ธฐ๋ณธ ์ค์ ๋ง์ผ๋ก๋ ์ต์ ์ด ์๋ ์ ์์ด ํ๋ ํ์
- zswap ๋๋น ์ค์ ๋ณต์ก๋๊ฐ ๋์
๊ด๋ จ ๊ธฐ์
์ฐธ๊ณ ๋ฌธํ
- Linux Kernel Documentation, "zram: Compressed RAM-based block devices", https://docs.kernel.org/admin-guide/blockdev/zram.html
- Linux Kernel Documentation, "zswap โ Compressed swap cache", https://docs.kernel.org/admin-guide/mm/zswap.html
- Nitin Gupta, "Compcache: in-memory compressed swapping", LWN.net, 2009
- Jonathan Corbet, "Modernizing swapping: virtual swap spaces", LWN.net, 2026
- Chris Down, "Debunking zswap and zram myths", chrisdown.name, 2026
- Fedora Project, "Swap on zRAM default", Fedora 33+, 2020
๊ด๋ จ ๋ฌธ์
- linux_0020_hardware_compression.html - ํ๋์จ์ด ๋ฉ๋ชจ๋ฆฌ ์์ถ
- linux_0025_software_compression.html - ์ํํธ์จ์ด ๋ฉ๋ชจ๋ฆฌ ์์ถ
- linux_0015_linux_memory_optimization.html - Linux ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
- system_0050_pim_architecture_overview.html - PIM/NMP ์ํคํ ์ฒ ๊ฐ์
ํต์ฌ ์ ๋ฆฌ
- zRAM์ RAM ๋ด์ ์์ถ ๋ธ๋ก ๋๋ฐ์ด์ค๋ฅผ ์์ฑํ์ฌ ๋์คํฌ I/O ์์ด ์ค์์ ์ฒ๋ฆฌํ๋ Linux ์ปค๋ ๋ชจ๋์ ๋๋ค.
- LZO-RLE, LZ4, ZSTD ๊ฐ์ ์์ถ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ฐ์๊ฐ๊ณผ ์์ถ๋ฅ ์ ๊ท ํ์ ์ด ๋ฌ๋ผ ์ํฌ๋ก๋์ ๋ง์ถฐ ์ ํํด์ผ ํฉ๋๋ค.
- writeback์ ๋น์์ถ์ฑ/์์ด๋ค ํ์ด์ง๋ฅผ ๋ฐฑ์ ์คํ ๋ฆฌ์ง์ ๊ธฐ๋กํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ๋์ด๋ฉฐ, writeback_limit์ผ๋ก SSD ๋ง๋ชจ๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- recompression์ ์ฝ๋ ํ์ด์ง๋ฅผ ๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฌ์์ถํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ถ๊ฐ๋ก ์ ์ฝํฉ๋๋ค.
- ๋ชจ๋ฐ์ผ/์๋ฒ ๋๋ ํ๊ฒฝ์์๋ zRAM์ด ๋์คํฌ ์ค์์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ํฌ๊ฒ ์ํํ๋ฉฐ, ์๋ฒ ํ๊ฒฝ์์๋ zswap๊ณผ ํจ๊ป ์ฐ๋ ์ ์ฑ ๋ ์ ํจํฉ๋๋ค.