ZNS OpenChannelSSD Analysis
ZNS ยท Open-Channel SSD ์์ธ ๋ถ์
Host-Managed Flash ยท Zone Write Pointer ยท Zone Append ยท FTL Offload ยท Log-Structured Software
๊ฐ์
์ ํต SSD๋ NAND์ ๋ณต์ก์ฑ์ ๋ธ๋ก ์ธํฐํ์ด์ค ๋ค์ ์จ๊ธฐ์ง๋ง, ๊ทธ ๋๊ฐ๋ก GC์ write amplification, tail latency๊ฐ ํธ์คํธ ์ ์ฅ์์ ๋ถํฌ๋ช ํด์ง๋๋ค. ๋ณธ ๋ฌธ์๋ ์ด๋ฅผ ์ํํ๊ธฐ ์ํ Open-Channel SSD์ ZNS(Zoned Namespace)์ ์ค๊ณ ์ฒ ํ, ์ธํฐํ์ด์ค, ์ํํธ์จ์ด ์คํ ๋ณํ๋ฅผ ๋น๊ตํฉ๋๋ค.
Open-Channel SSD๋ ๋ฌผ๋ฆฌ ์ฃผ์์ ๋ฐฐ์น ์ฑ ์์ ํธ์คํธ ์ชฝ์ผ๋ก ํฌ๊ฒ ์ฎ๊ธฐ๊ณ , ZNS๋ NVMe ํ์ค ์์์ zone๊ณผ write pointer๋ง ๋ ธ์ถํด ํธ์คํธ๊ฐ append์ reclaim ์ ์ฑ ์ ๋ ์ ๋ง์ถ ์ ์๊ฒ ํฉ๋๋ค. ๋ ๋ฐฉ์ ๋ชจ๋ ๋ฐ์ดํฐ ์๋ช ๊ณผ ๊ฐฑ์ ํจํด์ ๊ฐ์ฅ ์ ์๋ ์ฃผ์ฒด๊ฐ ํธ์คํธ๋ผ๋ ์ ์ ์ ์ ๋ก, ์ ์ฅ์ฅ์น ๋ด๋ถ์ ์จ์ ์ ๋ฆฌ ๋น์ฉ์ ์ค์ด๋ ค๋ ์ ๊ทผ์ ๋๋ค.
1. ์ ๊ธฐ์กด Block SSD ๋ชจ๋ธ์ด ํ๊ณ์ ๋ถ๋ชํ๋๊ฐ
๊ธฐ์กด SSD๋ LBA ๊ธฐ๋ฐ ๋ธ๋ก ์ฅ์น๋ก ๋ณด์ด๋ฏ๋ก ์์ฉ๊ณผ ํ์ผ์์คํ ์ ๋จ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ด๋ถ FTL์ด ์ธ์ GC๋ฅผ ์ํํ๊ณ ์ด๋ค ๋ธ๋ก์ ์ด๋์ํค๋์ง๋ ๋ณด์ด์ง ์๊ธฐ ๋๋ฌธ์, ๋์ผํ ์ฐ๊ธฐ ํจํด๋ ์์ ์ ๋ฐ๋ผ ์ง์ฐ๊ณผ WAF๊ฐ ํฌ๊ฒ ํ๋ค๋ฆด ์ ์์ต๋๋ค.
ํนํ ๋ก๊ทธ๊ตฌ์กฐ DB๋ ์ธ๊ทธ๋จผํธ ๊ธฐ๋ฐ ์ ์ฅ์์ฒ๋ผ ์์ ์ํํธ์จ์ด๊ฐ ์ด๋ฏธ '๋ฌด์์ด ์ค๋ ์ด๊ณ ๋ฌด์์ด ๊ณง ๋ฒ๋ ค์ง์ง'๋ฅผ ์๊ณ ์์ด๋, ์ด๋ฅผ SSD์ ์ง์ ์ ๋ฌํ ๋ฐฉ๋ฒ์ด ์ ํ์ ์ ๋๋ค.
๊ทธ๋ฆผ 1. ๊ธฐ์กด Block SSD ๋ชจ๋ธ โ FTL์ ๋ณต์ก์ฑ์ด ๋๋ฐ์ด์ค ๋ด๋ถ์ ์จ๊ฒจ์ง
2. Open-Channel SSD
Open-Channel SSD๋ PPA(Physical Page Address)๋ฅผ ๋ ์ง์ ์ ์ผ๋ก ๋ ธ์ถํด, ํธ์คํธ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ณ์ธต์ด ๋ฐฐ์น์ cleaning ์ ์ฑ ์ ํต์ ํ๋๋ก ํฉ๋๋ค. ์ฆ ์ฅ์น ๋ด๋ถ์ FTL ์ผ๋ถ ์ฑ ์์ ์์ ์ํํธ์จ์ด๋ก ์ฌ๋ ค๋ณด๋ด๋ ๋ฐฉ์์ ๋๋ค.
์ด ์ ๊ทผ์ ๋งค์ฐ ์ ์ฐํ์ง๋ง ์์ฉ ๋๋ ์คํ ๋ฆฌ์ง ์์ง์ด ๋ฌผ๋ฆฌ ๋ฐฐ์น ์ ์ฑ ์ ์ดํดํด์ผ ํ๋ฏ๋ก ๋ณต์ก๋๊ฐ ํฌ๊ฒ ๋์ด๋ฉ๋๋ค. ๊ทธ๋์ ์ฐ๊ตฌ์ ํน์ ์์คํ ์์๋ ๋งค๋ ฅ์ ์ด์ง๋ง, ์ผ๋ฐ ๋ชฉ์ NVMe ์ํ๊ณ์ ํ์ค ์ธํฐํ์ด์ค๊ฐ ๋๊ธฐ์๋ ๋ถ๋ด์ด ํฝ๋๋ค.
๊ทธ๋ฆผ 2. ์ ํต SSD์ Open-Channel SSD์ ์ฑ ์ ๋ถํ ๋น๊ต
3. ZNS(Zoned Namespace)์ ๊ธฐ๋ณธ ๋ชจ๋ธ
ZNS๋ Open-Channel์ฒ๋ผ ๋ฌผ๋ฆฌ ํ์ด์ง๋ฅผ ์ ๋ถ ๋๋ฌ๋ด์ง๋ ์๋, ์ ์ฅ ๊ณต๊ฐ์ Zone ๋จ์๋ก ๋๋๊ณ ๊ฐ Zone์ ์์ฐจ ์ฐ๊ธฐ ๊ท์น๊ณผ write pointer๋ฅผ ๋ถ์ฌํฉ๋๋ค. ํธ์คํธ๋ zone append๋ฅผ ๋ฐ๋ผ ์ฐ๊ณ , ํ์ ์์ด์ง Zone์ resetํ์ฌ ํ ๋ฒ์ ์ฌ์ฌ์ฉํฉ๋๋ค.
์ด ๋ชจ๋ธ์ NVMe ํ์ค์ ๋ฒ์ ์์์ host-managed ํน์ฑ์ ๋์ ํ๋ ์ ์ถฉ์์ ๋๋ค. ์ฅ์น๋ zone ๋ด๋ถ ๋ฐฐ์น๋ฅผ ๋จ์ํ๊ฒ ์ ์งํ ์ ์๊ณ , ํธ์คํธ๋ ๋ก๊ทธ๊ตฌ์กฐ ์ธ๊ทธ๋จผํธ๋ฅผ Zone์ ๋ง์ถฐ ๋ฐฐ์นํด ๋ด๋ถ GC ๋ถ๋ด์ ์ค์ผ ์ ์์ต๋๋ค.
Zone ์ข ๋ฅ์ ์ ์ฝ
| ๊ตฌ๋ถ | ์ ๊ทผ ์ ์ฝ | ์ฌ์ฌ์ฉ ๋ฐฉ์ | ์ ๋ง๋ ๋ฐ์ดํฐ |
|---|---|---|---|
| Conventional Zone | ์ผ๋ฐ ๋ธ๋ก์ฒ๋ผ ์์ ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ฐ๋ฅ | ์ผ๋ฐ ๋ธ๋ก ๋์ | ๋ฉํ๋ฐ์ดํฐ, ์์ ๋๋ค ์ฐ๊ธฐ |
| Sequential Zone | ์์ฐจ append๋ง ํ์ฉ, write pointer ์ค์ ํ์ | zone reset ํ ์ฌ์ฌ์ฉ | ๋ก๊ทธ, SSTable, object extent |
Sequential Zone์์๋ ํธ์คํธ๊ฐ ๋ง์ง๋ง write pointer ์์น์ ๋ง์ถฐ appendํด์ผ ํ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ zone append๋ฅผ ์ฌ์ฉํด ์ฅ์น๊ฐ ์ค์ ๋ฌผ๋ฆฌ ๋ฐฐ์น๋ฅผ ๊ฒฐ์ ํ๋๋ก ๋งก๊ธธ ์ ์์ต๋๋ค. ์ผ๋ถ ์ฅ์น๋ ๋์์ ํ์ฑํํ ์ ์๋ zone ์์ ์ ํ์ด ์์ผ๋ฏ๋ก, ์์ ๊ณ์ธต์ open๊ณผ close ํ์ด๋ฐ์ ๊ณ ๋ คํด ์ฐ๊ธฐ ์คํจ๋ฅผ ํผํด์ผ ํฉ๋๋ค.
๊ทธ๋ฆผ 3. ZNS์ Zone๊ณผ Write Pointer ๋ชจ๋ธ
4. GC๋ฅผ ๋๊ฐ ๋งก๋๊ฐ
์ ํต SSD์์๋ invalid page๊ฐ device ๋ด๋ถ์ ํฉ์ด์ง๊ณ , SSD๊ฐ valid page migration์ ์ํํ ๋ค eraseํฉ๋๋ค. ๋ฐ๋ฉด ZNS์์๋ ์์ ์ํํธ์จ์ด๊ฐ obsolete ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํ๊ณ , ๋น์์ง Zone ์ ์ฒด๋ฅผ resetํ์ฌ ์ฌ์ฌ์ฉํ๋ฏ๋ก device ๋ด๋ถ copy๊ฐ ํฌ๊ฒ ์ค์ด๋ญ๋๋ค.
์ฆ ZNS๋ FTL์ ์์ ํ ์ ๊ฑฐํ๋ค๊ธฐ๋ณด๋ค, host๊ฐ ๋ ๊ตฌ์กฐ์ ์ธ ์ ๋ณด์ ๋ฐฐ์น ์๋๋ฅผ ์ ๊ณตํด device ๋ด๋ถ cleaning์ ์์ ์ค์ด๋ ๋ฐฉํฅ์ ๊ฐ๊น์ต๋๋ค. ์ด ๋๋ถ์ tail latency์ WAF๋ฅผ ๋ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
ํธ์คํธ ์ฒ๋ฆฌ ํ๋ฆ
- ์ฅ์น์ zone geometry๋ฅผ ์ฝ๊ณ zone ๊ฒฝ๊ณ๋ฅผ ํ์ ํฉ๋๋ค.
- ์ฐ๊ธฐ ๋ฐ์ดํฐ๋ sequential zone์ ๋์ appendํฉ๋๋ค.
- ๋ ์ด์ ํ์ํ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ํด๋น zone์ resetํด ๊ณต๊ฐ์ ํ์ํฉ๋๋ค.
- ํ์ผ์์คํ ์ด๋ DB๋ ๋ก๊ทธ ์ธ๊ทธ๋จผํธ์ zone ๊ฒฝ๊ณ๋ฅผ ๋ง์ถฐ ๋ด๋ถ migration์ ์ค์ ๋๋ค.
๊ทธ๋ฆผ 4. ์ ํต GC์ ZNS์ zone reset ๊ธฐ๋ฐ ์ ๋ฆฌ ๋ฐฉ์ ๋น๊ต
5. ์ํํธ์จ์ด ์คํ๊ณผ ์ํฌ๋ก๋ ์ ํฉ์ฑ
ZNS๋ RocksDB ๊ฐ์ LSM-tree, ๋ก๊ทธ ์์ง ์์คํ , ๊ฐ์ฒด ์ ์ฅ์์ฒ๋ผ ์๋๋ append์ segment cleaning ๊ฐ๋ ์ ๊ฐ๋ ์ํํธ์จ์ด์ ํนํ ์ ๋ง์ต๋๋ค. Zone์ SSTable, ๋ก๊ทธ ์ธ๊ทธ๋จผํธ, object extent์ ์ ๋ ฌํ๋ฉด ๋ถํ์ํ ๋ด๋ถ ์ฌ๋ฐฐ์น๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
๋ฐ๋๋ก ๋ฎ์ด์ฐ๊ธฐ ์ค์ฌ์ ๋ฒ์ฉ ํ์ผ์์คํ ์ด๋ legacy block API์ ๊ทธ๋๋ก ๋ง์ถ๋ ค๋ฉด ์ค๊ฐ ๊ณ์ธต์ด ํ์ํฉ๋๋ค. ๊ทธ๋์ ZNS์ ์ฑ๋ฅ ์ ์ฌ๋ ฅ์ ๋จ์ํ SSD๋ง ๋ฐ๊พธ๋ ๊ฒ์ด ์๋๋ผ, ํ์ผ์์คํ /DB/๋ฐํ์์ด zone ๊ท์น์ ์ผ๋ง๋ ์์ฐ์ค๋ฝ๊ฒ ํก์ํ๋๋์ ๋ฌ๋ ค ์์ต๋๋ค.
๋ชจ๋ธ ๋น๊ต
| ๋ชจ๋ธ | ๋ ธ์ถ ๋ฒ์ | GC ์์น | ์ฑ ๋ณต์ก๋ | ์ฅ์ | ํ๊ณ |
|---|---|---|---|---|---|
| Traditional Block SSD | LBA๋ง ๋ ธ์ถ | device ๋ด๋ถ | ๋ฎ์ | ํธํ์ฑ ๋์ | WAF์ tail latency๊ฐ ์จ๊ฒจ์ง |
| Open-Channel SSD | PPA์ ๋ฐฐ์น ํํธ๊น์ง ๋ ธ์ถ | host ๋๋ host-side stack | ๋์ | ์ ์ด๋ ฅ ์ต๋ํ | ์ํํธ์จ์ด ๋ณ๊ฒฝ๋์ด ํผ |
| ZNS | zone, write pointer, reset | host + device ๋ถ๋ด | ์ค๊ฐ | ํ์คํ๋ ์ ์ถฉ์ | zone-aware ๊ณ์ธต์ด ํ์ |
๊ทธ๋ฆผ 5. ZNS ์ํํธ์จ์ด ์คํ โ Zoned-aware ๊ณ์ธต์ด ๋ฐฐ์น ์ ์ฑ ์ ๋ด๋น
6. Open-Channel vs ZNS ์ ๋ฆฌ
Open-Channel SSD๋ ๋ฌผ๋ฆฌ ์ ์ด๊ถ์ ํฌ๊ฒ ์ด์ด์ฃผ์ง๋ง ์ฑ ๋ณต์ก๋๊ฐ ๋๊ณ , ZNS๋ ํ์คํ๋ zone ๊ท์น๋ง ๋ ธ์ถํด ํ์ค์ ์ฑํ ๊ฐ๋ฅ์ฑ์ ๋์์ต๋๋ค. ๋ ์ ๊ทผ ๋ชจ๋ '๋ธ๋๋ฐ์ค FTL์ ๋ชจ๋ ๊ฒ์ ๋งก๊ธฐ์ง ๋ง์'๋ ๊ณตํต ์ฒ ํ์ ๊ฐ์ต๋๋ค.
๊ฒฐ๊ตญ ํต์ฌ์ host๊ฐ ๋ฐ์ดํฐ์ ์๋ช ๊ณผ ๊ฐฑ์ ํจํด์ ๊ฐ์ฅ ์ ์๋ค๋ ์ ์ ๋๋ค. ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅ์ฅ์น ์ธํฐํ์ด์ค์ ์ผ๋ง๋ ๋ฐ์ํ๋๋๊ฐ ์์ผ๋ก์ SSD ์ํํธ์จ์ด-ํ๋์จ์ด ๊ณต๋ ์ต์ ํ ๋ฐฉํฅ์ ๊ฒฐ์ ํฉ๋๋ค.
์๋ ๋์์ ์ด ์ฒ ํ์ ์ดํดํ๋ ๋ฐ ํ์ํ ๋ฐฐ๊ฒฝ์ผ๋ก, ์ ํต SSD์ FTL ๋์๊ณผ ๋ธ๋ก ์ธํฐํ์ด์ค, Open-Channel์ ์ฑ ์ ์ด๋, ZNS์ write pointer ๋ชจ๋ธ์ ๋๋ํ ๋ณด์ฌ์ค๋๋ค.
๊ทธ๋ฆผ 6. ์ ํต SSD๊ฐ ๋ด๋ถ FTL๋ก ํด๊ฒฐํ๋ ๋งคํ, GC, wear leveling, OP์ ์ญํ
๊ทธ๋ฆผ 7. ๋ธ๋ก SSD ์ธํฐํ์ด์ค์์๋ ๋ด๋ถ ์ ๋ฆฌ ๋น์ฉ์ด ํธ์คํธ์ ์ ๋๋ฌ๋์ง ์์
๊ทธ๋ฆผ 8. Open-Channel SSD๋ ๋ฐฐ์น์ cleaning ์ ์ฑ ์ผ๋ถ๋ฅผ ํธ์คํธ ์คํ์ผ๋ก ์ด๋
๊ทธ๋ฆผ 9. ZNS๋ zone, write pointer, reset๋ง ๋ ธ์ถํด ํ์ค ์์์ host-managed ํน์ฑ์ ์ ๊ณต
7. ์ฅ๋จ์
์ฅ์
-
host๊ฐ append์ reclaim ์ ์ฑ ์ ์ง์ ๋ง์ถ ์ ์์ด write amplification์ ์ค์ด๊ธฐ ์ฝ์ต๋๋ค.
-
zone reset๊ณผ ์์ฐจ ์ฐ๊ธฐ ๊ท์น ๋๋ถ์ tail latency์ ๋ณ๋ ํญ์ ์ค์ด๊ธฐ ์ ๋ฆฌํฉ๋๋ค.
-
ZNS๋ NVMe ํ์ค ๊ธฐ๋ฐ์ด๋ผ Open-Channel๋ณด๋ค ๋์ ์ฅ๋ฒฝ์ด ๋ฎ๊ณ , zonefs ๊ฐ์ ์์ ๊ณ์ธต๊ณผ๋ ์ ๋ง์ต๋๋ค.
ํ๊ณ
-
์์ overwrite ์ค์ฌ ์ํฌ๋ก๋๋ zone ๊ท์น๊ณผ ์ ๋ง์ง ์์ ์ฑ๋ฅ ์ด์ ์ด ์์ต๋๋ค.
-
active/open zone ์ ์ ํ์ ๊ณ ๋ คํด์ผ ํ๋ฏ๋ก ์ฑ์ด๋ ํ์ผ์์คํ ์ด ๋ ๋ณต์กํด์ง ์ ์์ต๋๋ค.
-
๊ธฐ์กด ๋ฒ์ฉ block API๋ฅผ ๊ทธ๋๋ก ์ฐ๊ธฐ ์ด๋ ต๊ณ , zone-aware ๊ณ์ธต์ด ์์ผ๋ฉด ์ด์ ์ด ์ ํ๋ฉ๋๋ค.
8. ๊ด๋ จ ๊ธฐ์
-
NAND NVMe SSD Analysis: NVMe SSD ๊ธฐ๋ณธ ๊ตฌ์กฐ์ NAND/์ปจํธ๋กค๋ฌ ๊ด๊ณ
-
FTL WearLeveling GarbageCollection: L2P ๋งคํ, GC, Wear Leveling, TRIM
-
SSD Internal Parallelism Channel Die Plane: ์ฑ๋/๋ค์ด/ํ๋ ์ธ ๋ณ๋ ฌ์ฑ
-
VFS FS PageCache BlockIO: zonefs์ฒ๋ผ ํ์ผ ์์คํ ๊ณ์ธต์ด ์ฅ์น ์ ์ฝ์ ํก์ํ๋ ๋ฐฉ์
-
NVMe Architecture: NVMe ํ ๊ตฌ์กฐ์ ํธ์คํธ I/O ๋ฐํ ๊ฒฝ๋ก
-
Virtual Memory: ๋ก๊ทธํ ์ ์ฅ์์ page cache, mmap ์ํธ์์ฉ ์ดํด์ ๋์
์ฐธ๊ณ ๋ฌธํ
-
NVM Express, Specifications โ https://nvmexpress.org/specifications/
-
NVM Express, NVM Express Base Specification 2.0d โ https://nvmexpress.org/wp-content/uploads/NVM-Express-Base-Specification-2.0d-2024.01.11-Ratified.pdf
-
The Linux Kernel Documentation, ZoneFS - Zone filesystem for Zoned block devices โ https://www.kernel.org/doc/html/latest/filesystems/zonefs.html
-
Wikipedia, Open-channel SSD โ https://en.wikipedia.org/wiki/Open-channel_SSD
-
Bjรธrling, Gonzalez, Bonnet, LightNVM: The Linux Open-Channel SSD Subsystem (FAST 2017) โ https://www.usenix.org/system/files/conference/fast17/fast17-bjorling.pdf
9. ํต์ฌ ์ ๋ฆฌ
ZNS์ Open-Channel SSD๋ NAND์ ๋น๋์นญ์ฑ๊ณผ GC ๋น์ฉ์ ํธ์คํธ๊ฐ ๋ ์ ๋ค๋ฃจ๋๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๊พธ๋ ค๋ ์๋์ ๋๋ค. Open-Channel์ ์ ์ด๊ถ์ด ํฌ์ง๋ง ์ํํธ์จ์ด ๋ถ๋ด์ด ํฌ๊ณ , ZNS๋ zone๊ณผ write pointer๋ง ๋ ธ์ถํด ํ์คํ์ ์ค์ฉ์ฑ ์ฌ์ด์์ ํํํฉ๋๋ค.
์ค์ ์ฑ๋ฅ์ ์ฅ์น๋ง์ผ๋ก ๊ฒฐ์ ๋์ง ์๊ณ , ํ์ผ์์คํ ๊ณผ DB๊ฐ append, reset, reclaim์ ์ผ๋ง๋ ์์ฐ์ค๋ฝ๊ฒ ํก์ํ๋๋์ ๋ฌ๋ ค ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๋ฌธ์์ ํต์ฌ์ "์ ์ฅ์ฅ์น๊ฐ ์จ๊ธฐ๋ ๋น์ฉ์ ์ด๋๊น์ง ํธ์คํธ๋ก ๋๋ฌ๋ผ ๊ฒ์ธ๊ฐ"๋ผ๋ ์ค๊ณ ์ ํ์ ๋๋ค.