๐Ÿ’พ NAND

NAND NVMe SSD Analysis

NAND ํ”Œ๋ž˜์‹œ ๋ฐ NVMe SSD ๋™์ž‘ ์›๋ฆฌ ์ƒ์„ธ ๋ถ„์„

NAND Flash Memory ยท SSD Controller ยท FTL ยท NVMe Protocol ยท OS I/O Stack

๋ณธ ๋ฌธ์„œ๋Š” NAND ํ”Œ๋ž˜์‹œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฌผ๋ฆฌ์  ๋™์ž‘๋ถ€ํ„ฐ SSD ์ปจํŠธ๋กค๋Ÿฌ์˜ FTL, ํ˜ธ์ŠคํŠธ์™€์˜ NVMe ํ”„๋กœํ† ์ฝœ ํ†ต์‹ , ๊ทธ๋ฆฌ๊ณ  ์šด์˜์ฒด์ œ(OS)๊ฐ€ SSD๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹(ํŒŒ์ผ์‹œ์Šคํ…œยท๋ธ”๋ก I/O ์ŠคํƒยทTRIMยทI/O ์Šค์ผ€์ค„๋Ÿฌ)๊นŒ์ง€ SSD์˜ ์ „์ฒด ๋™์ž‘ ์Šคํƒ์„ ๊ณ„์ธต์ ์œผ๋กœ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ๋ฆ„์€ ์…€์˜ ์ „ํ•˜ ์ €์žฅ ํŠน์„ฑ, ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ฃผ์†Œ ๋ณ€ํ™˜, ํ˜ธ์ŠคํŠธ ํ์ž‰, ์ปค๋„์˜ ๋ธ”๋ก ๊ณ„์ธต์ด ํ•˜๋‚˜์˜ ํŒŒ์ดํ”„๋ผ์ธ์ฒ˜๋Ÿผ ์ด์–ด์ง„๋‹ค๋Š” ์ ์—์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ ์ง€์—ฐ, ์“ฐ๊ธฐ ์ฆํญ, ๋งˆ๋ชจ ํ‰์ค€ํ™”, TRIM, ์˜ค๋ฒ„ํ”„๋กœ๋น„์ €๋‹์€ ๊ฐ๊ฐ ๋”ฐ๋กœ ์กด์žฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ์„œ๋กœ์˜ ๋ถ€๋‹ด์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋งž๋ฌผ๋ ค ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

1. SSD ์ „์ฒด ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์š”

SSD๋Š” ํฌ๊ฒŒ ํ˜ธ์ŠคํŠธ ์ธํ„ฐํŽ˜์ด์Šค, SSD ์ปจํŠธ๋กค๋Ÿฌ(SoC), ๊ทธ๋ฆฌ๊ณ  NAND ํ”Œ๋ž˜์‹œ ์–ด๋ ˆ์ด์˜ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋Š” PCIe ๋ฒ„์Šค ์œ„์—์„œ NVMe ํ”„๋กœํ† ์ฝœ๋กœ ๋ช…๋ น์„ ์ „๋‹ฌํ•˜๊ณ , ์ปจํŠธ๋กค๋Ÿฌ ๋‚ด๋ถ€์˜ FTL์ด ๋…ผ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ, ๋ฉ€ํ‹ฐ ์ฑ„๋„์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ NAND ํŒจํ‚ค์ง€์— ๋ณ‘๋ ฌ๋กœ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

nand_0005_nand_nvme_ssd_analysis

๊ทธ๋ฆผ 1. NVMe SSD ์ „์ฒด ์•„ํ‚คํ…์ฒ˜ โ€” ํ˜ธ์ŠคํŠธ์—์„œ NAND ์…€๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ ๊ฒฝ๋กœ ๋ฐ NAND ๊ณ„์ธต ๊ตฌ์กฐ

NAND ๊ณ„์ธต ๊ตฌ์กฐ

NAND ํ”Œ๋ž˜์‹œ๋Š” Package โŠƒ Die(LUN) โŠƒ Plane โŠƒ Block โŠƒ Page โŠƒ Cell์˜ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ณ„์ธต์€ ๋ณ‘๋ ฌ์„ฑ๊ณผ ๋™์ž‘ ๋‹จ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

2. NAND ์…€ ๋™์ž‘ ์›๋ฆฌ

NAND ์…€์€ ํ”Œ๋กœํŒ… ๊ฒŒ์ดํŠธ(๋˜๋Š” charge trap) ํŠธ๋žœ์ง€์Šคํ„ฐ๋กœ, ๊ฒŒ์ดํŠธ์— ์ €์žฅ๋œ ์ „ํ•˜๋Ÿ‰์— ๋”ฐ๋ผ ๋ฌธํ„ฑ์ „์••(Vth)์ด ๋‹ฌ๋ผ์ง€๋Š” ์›๋ฆฌ๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ „ํ•˜๋Ÿ‰์„ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉด ํ•œ ์…€์— ์—ฌ๋Ÿฌ ๋น„ํŠธ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NAND NVMe SSD Analysis

๊ทธ๋ฆผ 2. NAND ์…€ ๊ตฌ์กฐ, ์…€๋‹น ์ €์žฅ ๋น„ํŠธ(SLC~QLC), ๊ทธ๋ฆฌ๊ณ  ์ฝ๊ธฐ/์“ฐ๊ธฐ/์†Œ๊ฑฐ 3๋Œ€ ๋™์ž‘

์…€๋‹น ์ €์žฅ ๋น„ํŠธ ์ˆ˜ ๋น„๊ต

์…€๋‹น ๋น„ํŠธ ์ˆ˜๊ฐ€ ๋Š˜์ˆ˜๋ก ๊ฐ™์€ ๋ฉด์ ์— ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜์ง€๋งŒ, ์ „์•• ๋ ˆ๋ฒจ ๊ฐ„ ๊ฐ„๊ฒฉ์ด ์ข์•„์ ธ ์˜ค๋ฅ˜์œจ์ด ๋†’์•„์ง€๊ณ  P/E ์ˆ˜๋ช…์ด ๊ธ‰๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ•๋ ฅํ•œ ECC(LDPC)์™€ ์ •๊ตํ•œ FTL์ด ํ•„์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ฝ๊ธฐ / ์“ฐ๊ธฐ / ์†Œ๊ฑฐ์˜ ๋น„๋Œ€์นญ์„ฑ

NAND์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํŠน์„ฑ์€ ๋™์ž‘ ๋‹จ์œ„์˜ ๋น„๋Œ€์นญ์„ฑ์ž…๋‹ˆ๋‹ค. ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋Š” Page ๋‹จ์œ„๋กœ ์ˆ˜ํ–‰๋˜์ง€๋งŒ, ์†Œ๊ฑฐ๋Š” ๊ทธ๋ณด๋‹ค ํ›จ์”ฌ ํฐ Block ๋‹จ์œ„๋กœ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์“ฐ์ธ ์…€์— ๊ณง๋ฐ”๋กœ ๋ฎ์–ด์“ธ ์ˆ˜ ์—†๊ณ (in-place update ๋ถˆ๊ฐ€), ๋ฐ˜๋“œ์‹œ ์†Œ๊ฑฐ๋ฅผ ๋จผ์ € ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋น„๋Œ€์นญ์„ฑ(Page R/W vs Block Erase)๊ณผ 'erase-before-write' ์ œ์•ฝ์ด ๋ฐ”๋กœ FTL์ด๋ผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณ„์ธต์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ทผ๋ณธ ์›์ธ์ž…๋‹ˆ๋‹ค.

3. FTL (Flash Translation Layer)

FTL์€ NAND์˜ ๋ฌผ๋ฆฌ์  ์ œ์•ฝ์„ ํ˜ธ์ŠคํŠธ๋กœ๋ถ€ํ„ฐ ์ˆจ๊ธฐ๊ณ , ์ผ๋ฐ˜ ๋ธ”๋ก ๋””๋ฐ”์ด์Šค์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ํŽŒ์›จ์–ด ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. ๋„ค ๊ฐ€์ง€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ โ€” ๋…ผ๋ฆฌ-๋ฌผ๋ฆฌ ๋งคํ•‘, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜, ๋งˆ๋ชจ ํ‰์ค€ํ™”, ์˜ค๋ฒ„ํ”„๋กœ๋น„์ €๋‹ โ€” ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

NAND NVMe SSD Analysis

๊ทธ๋ฆผ 3. FTL์˜ 4๋Œ€ ํ•ต์‹ฌ ๋™์ž‘ โ€” ๋งคํ•‘, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜, ๋งˆ๋ชจ ํ‰์ค€ํ™”, ์˜ค๋ฒ„ํ”„๋กœ๋น„์ €๋‹

โ‘  ๋…ผ๋ฆฌ-๋ฌผ๋ฆฌ ์ฃผ์†Œ ๋งคํ•‘ (L2P)

ํ˜ธ์ŠคํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋…ผ๋ฆฌ ์ฃผ์†Œ(LBA)๋ฅผ NAND์˜ ๋ฌผ๋ฆฌ ์ฃผ์†Œ(PPA)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋งคํ•‘ ํ…Œ์ด๋ธ”์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฎ์–ด์“ฐ๊ธฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ๊ฐ™์€ LBA์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์š”์ฒญ์ด ์™€๋„ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๋นˆ ํŽ˜์ด์ง€์— ๊ธฐ๋กํ•˜๊ณ  ๋งคํ•‘ ํ…Œ์ด๋ธ”๋งŒ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค(out-of-place update). ์ด ๋งคํ•‘ ํ…Œ์ด๋ธ”์€ ์ ‘๊ทผ ์†๋„๋ฅผ ์œ„ํ•ด SSD ๋‚ด์žฅ DRAM์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

DRAM-less SSD๋Š” Host Memory Buffer(HMB)๋‚˜ ๋” ์ž‘์€ ์˜จ๋””๋ฐ”์ด์Šค ์บ์‹œ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ๋งคํ•‘ ํ…Œ์ด๋ธ”์˜ ์ผ๋ถ€๋ฅผ ํ˜ธ์ŠคํŠธ ๋ฉ”๋ชจ๋ฆฌ์— ๋‘ก๋‹ˆ๋‹ค.

โ‘ก ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ (Garbage Collection)

out-of-place ์“ฐ๊ธฐ๋กœ ์ธํ•ด ๋ฌดํšจ(invalid) ํŽ˜์ด์ง€๊ฐ€ ๋ธ”๋ก ๊ณณ๊ณณ์— ํฉ์–ด์ง€๋ฉด, ์œ ํšจ(valid) ํŽ˜์ด์ง€๋งŒ ์ƒˆ ๋ธ”๋ก์œผ๋กœ ๋ชจ์•„ ์˜ฎ๊ธด ๋’ค ์›๋ž˜ ๋ธ”๋ก์„ ํ†ต์งธ๋กœ ์†Œ๊ฑฐํ•ด ๋นˆ ๊ณต๊ฐ„์„ ํšŒ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ํ˜ธ์ŠคํŠธ๊ฐ€ ์š”์ฒญํ•˜์ง€ ์•Š์€ ์ถ”๊ฐ€ ์“ฐ๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋ฅผ Write Amplification(WAF)์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค. WAF๊ฐ€ ๋†’์„์ˆ˜๋ก ์ˆ˜๋ช…๊ณผ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค.

โ‘ข ๋งˆ๋ชจ ํ‰์ค€ํ™” (Wear Leveling)

NAND ๋ธ”๋ก์€ P/E Cycle ํ•œ๊ณ„๊ฐ€ ์žˆ์–ด, ํŠน์ • ๋ธ”๋ก์—๋งŒ ์“ฐ๊ธฐ๊ฐ€ ์ง‘์ค‘๋˜๋ฉด ๊ทธ ๋ธ”๋ก์ด ๋จผ์ € ์ˆ˜๋ช…์„ ๋‹คํ•ด ์ „์ฒด SSD๋ฅผ ๋ชป ์“ฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋งˆ๋ชจ ํ‰์ค€ํ™”๋Š” ๋ชจ๋“  ๋ธ”๋ก์˜ P/E ํšŸ์ˆ˜๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐ์‹œ์ผœ ์ „์ฒด ์ˆ˜๋ช…์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

โ‘ฃ ์˜ค๋ฒ„ํ”„๋กœ๋น„์ €๋‹ (Over-Provisioning)

์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š” ์˜ˆ๋น„ ์˜์—ญ(ํ†ต์ƒ 7~28%)์„ ๋‘์–ด, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ํ•ญ์ƒ ์ถฉ๋ถ„ํ•œ ๋นˆ ๋ธ”๋ก์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. OP๊ฐ€ ํด์ˆ˜๋ก WAF๊ฐ€ ๋‚ฎ์•„์ง€๊ณ  ์„ฑ๋Šฅ๊ณผ ์ˆ˜๋ช…์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

4. ECC (์˜ค๋ฅ˜ ์ •์ •)

๋ฏธ์„ธ ๊ณต์ •๊ณผ ๋‹ค๋น„ํŠธ ์…€(QLC)๋กœ ์ธํ•ด NAND์˜ ์›์‹œ ๋น„ํŠธ ์˜ค๋ฅ˜์œจ(RBER)์€ ๋งค์šฐ ๋†’์Šต๋‹ˆ๋‹ค. SSD ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ฐ•๋ ฅํ•œ ECC ์—”์ง„์œผ๋กœ ์ด๋ฅผ ์ •์ •ํ•ฉ๋‹ˆ๋‹ค.

LDPC๋Š” ์…€์˜ ์ „์••์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ •๋ฐ€ ์ธก์ •(soft read)ํ•ด ํ™•๋ฅ  ๊ธฐ๋ฐ˜์œผ๋กœ ๋””์ฝ”๋”ฉํ•˜๋ฏ€๋กœ, ์…€์ด ๋งˆ๋ชจ๋˜์–ด ์˜ค๋ฅ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์–ด QLC ๊ฐ™์€ ๊ณ ๋ฐ€๋„ NAND์˜ ์‹ ๋ขฐ์„ฑ์„ ๋’ท๋ฐ›์นจํ•ฉ๋‹ˆ๋‹ค.

5. NVMe ํ”„๋กœํ† ์ฝœ

NVMe(Non-Volatile Memory Express)๋Š” PCIe ์œ„์—์„œ ๋™์ž‘ํ•˜๋„๋ก ์ฒ˜์Œ๋ถ€ํ„ฐ ํ”Œ๋ž˜์‹œ์— ์ตœ์ ํ™”๋œ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด SATA/AHCI๊ฐ€ ํšŒ์ „ ๋””์Šคํฌ ์‹œ๋Œ€์— ์„ค๊ณ„๋˜์–ด ๋‹จ์ผ ํยท32 ๋ช…๋ น์— ๊ทธ์ณค๋˜ ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, NVMe๋Š” ๋Œ€๊ทœ๋ชจ ๋ณ‘๋ ฌ ํ ๊ตฌ์กฐ๋กœ SSD์˜ ์ž ์žฌ๋ ฅ์„ ๋Œ์–ด๋ƒ…๋‹ˆ๋‹ค.

NAND NVMe SSD Analysis

๊ทธ๋ฆผ 4. NVMe ํ ๊ธฐ๋ฐ˜ I/O ์ฒ˜๋ฆฌ ํ๋ฆ„ (SQ/CQ Doorbell ๋ฉ”์ปค๋‹ˆ์ฆ˜)

ํ ๊ธฐ๋ฐ˜ I/O ์ฒ˜๋ฆฌ ํ๋ฆ„

  • โ‘  ํ˜ธ์ŠคํŠธ๊ฐ€ Submission Queue(SQ)์— I/O ๋ช…๋ น(Read/Write)์„ ๋“ฑ๋กํ•œ๋‹ค.

  • โ‘ก Doorbell ๋ ˆ์ง€์Šคํ„ฐ์— ์จ์„œ SSD ์ปจํŠธ๋กค๋Ÿฌ์— ์ƒˆ ๋ช…๋ น์„ ์•Œ๋ฆฐ๋‹ค.

  • โ‘ข ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ SQ์—์„œ ๋ช…๋ น์„ ํŽ˜์น˜(fetch)ํ•ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • โ‘ฃ ์ฒ˜๋ฆฌ ์™„๋ฃŒ ํ›„ Completion Queue(CQ)์— ์ƒํƒœ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  MSI-X ์ธํ„ฐ๋ŸฝํŠธ๋กœ ํ˜ธ์ŠคํŠธ์— ํ†ต์ง€ํ•œ๋‹ค.

NVMe vs SATA/AHCI ๋น„๊ต

ํ•ญ๋ชฉ SATA / AHCI NVMe
์ธํ„ฐํŽ˜์ด์Šค SATA 6 Gbps PCIe ๊ธฐ๋ฐ˜
ํ ๊ตฌ์กฐ 1๊ฐœ ํ, ๋ช…๋ น 32๊ฐœ ๋‹ค์ค‘ ํ, ํ๋‹น ์ตœ๋Œ€ 65,535๊ฐœ ๋ช…๋ น
๋ณ‘๋ ฌ์„ฑ ๋‹จ์ผ ๋ฝ/๋‹จ์ผ ๊ฒฝ๋กœ ์ค‘์‹ฌ CPU ์ฝ”์–ด์™€ ๋ณ‘๋ ฌ ์ž์›์„ ์ „์ œ๋กœ ์„ค๊ณ„
ํ”„๋กœํ† ์ฝœ ์˜ค๋ฒ„ํ—ค๋“œ ๋†’์Œ ๋‚ฎ์Œ
์ ํ•ฉ์„ฑ HDD ์‹œ๋Œ€ ์„ค๊ณ„, ๋ ˆ๊ฑฐ์‹œ SSD ํ”Œ๋ž˜์‹œ/NVM ์žฅ์น˜์— ์ตœ์ ํ™”

์ด ์ฐจ์ด ๋•Œ๋ฌธ์— NVMe SSD์—์„œ๋Š” ๋ธ”๋ก ๋ ˆ์ด์–ด๊ฐ€ ์š”์ฒญ์„ ๊ณผํ•˜๊ฒŒ ์ •๋ ฌํ•˜๊ธฐ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ํŽธ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Linux์—์„œ none ๊ณ„์—ด์˜ ๊ฐ€๋ฒผ์šด ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ž์ฃผ ๊ถŒ์žฅ๋˜๋Š” ์ด์œ ๋„ ์—ฌ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

6. ์ข…ํ•ฉ โ€” ์ฝ๊ธฐ/์“ฐ๊ธฐ ์ „์ฒด ํ๋ฆ„

์ฝ๊ธฐ ์š”์ฒญ ์ฒ˜๋ฆฌ

ํ˜ธ์ŠคํŠธ๊ฐ€ NVMe SQ์— ์ฝ๊ธฐ ๋ช…๋ น ๋“ฑ๋ก โ†’ ์ปจํŠธ๋กค๋Ÿฌ ํŽ˜์น˜ โ†’ FTL์ด LBA๋ฅผ PPA๋กœ ๋ณ€ํ™˜ โ†’ ํ•ด๋‹น NAND ํŽ˜์ด์ง€ ์ฝ๊ธฐ โ†’ ECC ์ •์ • โ†’ DRAM ๋ฒ„ํผ ๊ฒฝ์œ  โ†’ PCIe๋กœ ํ˜ธ์ŠคํŠธ์— ์ „์†ก โ†’ CQ์— ์™„๋ฃŒ ๊ธฐ๋ก.

์“ฐ๊ธฐ ์š”์ฒญ ์ฒ˜๋ฆฌ

ํ˜ธ์ŠคํŠธ๊ฐ€ ์“ฐ๊ธฐ ๋ช…๋ น ๋“ฑ๋ก โ†’ ์ปจํŠธ๋กค๋Ÿฌ ํŽ˜์น˜ โ†’ ๋ฐ์ดํ„ฐ๋ฅผ DRAM/SLC ์บ์‹œ์— ๋ฒ„ํผ๋ง โ†’ FTL์ด ๋นˆ ํŽ˜์ด์ง€์— ๊ธฐ๋ก(out-of-place) โ†’ ๋งคํ•‘ ํ…Œ์ด๋ธ” ๊ฐฑ์‹  โ†’ ๋นˆ ๋ธ”๋ก ๋ถ€์กฑ ์‹œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ํŠธ๋ฆฌ๊ฑฐ โ†’ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋งˆ๋ชจ ํ‰์ค€ํ™” ์ˆ˜ํ–‰ โ†’ CQ์— ์™„๋ฃŒ ๊ธฐ๋ก.

7. ์šด์˜์ฒด์ œ(OS) ๊ด€์ ์—์„œ ๋ณธ SSD

์ง€๊ธˆ๊นŒ์ง€๋Š” SSD ๋‚ด๋ถ€(NANDยทFTLยทNVMe)๋ฅผ ์‚ดํŽด๋ดค์Šต๋‹ˆ๋‹ค. ์ด์ œ OS๊ฐ€ SSD๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ”๋ผ๋ณด๊ณ  ๋‹ค๋ฃจ๋Š”์ง€, ์ฆ‰ ํŒŒ์ผ์‹œ์Šคํ…œยท๋ธ”๋ก I/O ์Šคํƒยท์บ์‹œยทTRIMยทI/O ์Šค์ผ€์ค„๋Ÿฌ์˜ ๊ด€์ ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. OS๋Š” SSD์˜ ๋ฌผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์•Œ์ง€ ๋ชปํ•œ ์ฑ„ LBA(๋…ผ๋ฆฌ ์„นํ„ฐ) ๋‹จ์œ„๋กœ๋งŒ ํ†ต์‹ ํ•˜๋ฉฐ, ๋ฌผ๋ฆฌ ๋งคํ•‘์€ ์ „์ ์œผ๋กœ SSD ๋‚ด๋ถ€ FTL์ด ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

7.1 ์Šคํ† ๋ฆฌ์ง€ I/O ์Šคํƒ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ read()/write() ํ˜ธ์ถœ์€ ์—ฌ๋Ÿฌ ์ปค๋„ ๊ณ„์ธต์„ ๊ฑฐ์ณ SSD์— ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ณ„์ธต์€ LBA ๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ, ๋ฌผ๋ฆฌ ์ฃผ์†Œ ๋ณ€ํ™˜์€ ํ•˜๋“œ์›จ์–ด ๊ฒฝ๊ณ„ ๋„ˆ๋จธ SSD๊ฐ€ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

NAND NVMe SSD Analysis

๊ทธ๋ฆผ 5. OS ์Šคํ† ๋ฆฌ์ง€ I/O ์Šคํƒ โ€” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ NAND๊นŒ์ง€์˜ ๊ณ„์ธต ๊ตฌ์กฐ

  • VFS โ€” ๋‹ค์–‘ํ•œ ํŒŒ์ผ์‹œ์Šคํ…œ์„ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ถ”์ƒํ™”ํ•œ๋‹ค.

  • ํŒŒ์ผ์‹œ์Šคํ…œ(ext4/F2FS/XFS) โ€” ํŒŒ์ผ์„ ๋…ผ๋ฆฌ ๋ธ”๋ก(LBA)์— ๋งคํ•‘ํ•˜๊ณ  ์ €๋„๋ง์œผ๋กœ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค. ํŠนํžˆ F2FS๋Š” NAND์˜ ์ˆœ์ฐจ ์“ฐ๊ธฐ ํŠน์„ฑ์— ๋งž์ถ˜ ๋กœ๊ทธ ๊ตฌ์กฐ(log-structured) ํŒŒ์ผ์‹œ์Šคํ…œ์ด๋‹ค.

  • ํŽ˜์ด์ง€ ์บ์‹œ โ€” ์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ DRAM์— ๋ฒ„ํผ๋งํ•˜์—ฌ ์‹ค์ œ I/O๋ฅผ ์ค„์ด๊ณ , dirty page๋ฅผ ๋ชจ์•„ ์ง€์—ฐ ๊ธฐ๋ก(writeback)ํ•œ๋‹ค.

  • ๋ธ”๋ก I/O ๋ ˆ์ด์–ด โ€” ์ธ์ ‘ ์š”์ฒญ์„ ๋ณ‘ํ•ฉยท์ •๋ ฌํ•˜๋ฉฐ, ํ˜„๋Œ€ ์ปค๋„์€ ๋ฉ€ํ‹ฐํ(blk-mq)๋กœ ๋‹ค์ค‘ ์ฝ”์–ด ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•œ๋‹ค.

7.2 I/O ์Šค์ผ€์ค„๋Ÿฌ โ€” SSD์— ๋งž๋Š” ์„ ํƒ

HDD ์‹œ๋Œ€์˜ I/O ์Šค์ผ€์ค„๋Ÿฌ๋Š” ๋””์Šคํฌ ํ—ค๋“œ ์ด๋™์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์š”์ฒญ์„ ๋ฌผ๋ฆฌ ์œ„์น˜ ์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ SSD๋Š” ํƒ์ƒ‰ ์‹œ๊ฐ„(seek time)์ด ์—†์–ด ์ด๋Ÿฐ ์ •๋ ฌ์ด ๋ถˆํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์˜คํžˆ๋ ค ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ SSD์—์„œ๋Š” ๋‹จ์ˆœํ•œ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค.

SSD๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฉ€ํ‹ฐ ์ฑ„๋„ ๋ณ‘๋ ฌ์„ฑ๊ณผ ์ž์ฒด ํ(NVMe)๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ, OS๊ฐ€ ๊ณผํ•˜๊ฒŒ ๊ฐœ์ž…ํ•˜๊ธฐ๋ณด๋‹ค ์š”์ฒญ์„ ๋น ๋ฅด๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ํŽธ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด NVMe SSD์—์„œ none ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ธ ์ด์œ ์ž…๋‹ˆ๋‹ค.

7.3 TRIM (Discard) โ€” OS-SSD ํ˜‘๋ ฅ์˜ ํ•ต์‹ฌ

OS๊ฐ€ ํŒŒ์ผ์„ ์‚ญ์ œํ•ด๋„ ๊ทธ ์ •๋ณด๋Š” SSD์— ์ž๋™์œผ๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์‹œ์Šคํ…œ์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ๊ฐฑ์‹ ํ•  ๋ฟ, SSD ์ž…์žฅ์—์„œ๋Š” ํ•ด๋‹น LBA๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด ์ •๋ณด ๋‹จ์ ˆ์„ ํ•ด์†Œํ•˜๋Š” ๊ฒƒ์ด TRIM(NVMe์—์„œ๋Š” Deallocate) ๋ช…๋ น์ž…๋‹ˆ๋‹ค.

NAND NVMe SSD Analysis

๊ทธ๋ฆผ 6. TRIM ์œ ๋ฌด์— ๋”ฐ๋ฅธ ์ฐจ์ด์™€ TRIM(Discard) ๋ฐœํ–‰ ๊ฒฝ๋กœ

TRIM์ด ์—†์œผ๋ฉด SSD๋Š” ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ํšจํ•œ ๊ฒƒ์œผ๋กœ ์˜ค์ธํ•˜์—ฌ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋•Œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Write Amplification(WAF)์„ ํ‚ค์šฐ๊ณ  ์„ฑ๋Šฅ๊ณผ ์ˆ˜๋ช…์„ ๋–จ์–ด๋œจ๋ฆฝ๋‹ˆ๋‹ค. TRIM์œผ๋กœ OS๊ฐ€ '์ด LBA๋Š” ๋” ์ด์ƒ ์“ฐ์ง€ ์•Š๋Š”๋‹ค'๊ณ  ์•Œ๋ ค์ฃผ๋ฉด, SSD๋Š” ํ•ด๋‹น ๋งคํ•‘์„ ๋ฌดํšจํ™”ํ•ด GC ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜๊ณ  ๋นˆ ๋ธ”๋ก์„ ํšจ์œจ์ ์œผ๋กœ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.

  • ์‹ค์‹œ๊ฐ„ ๋ฐฉ์‹ โ€” mount -o discard: ์‚ญ์ œ ์ฆ‰์‹œ TRIM ๋ฐœํ–‰. ์žฆ์€ ๋ช…๋ น์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฃผ๊ธฐ์  ๋ฐฉ์‹ โ€” fstrim: cron/ํƒ€์ด๋จธ๋กœ ๋ชจ์•„์„œ batch TRIM. ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ๋ฌด๋‚œํ•˜๋ฉฐ, ์ฃผ 1ํšŒ ์ •๋„์˜ ์ฃผ๊ธฐ๊ฐ€ ๋งŽ์ด ์“ฐ์ž…๋‹ˆ๋‹ค.

7.4 ํŽ˜์ด์ง€ ์บ์‹œ์™€ ์“ฐ๊ธฐ ์ •์ฑ…

OS์˜ ํŽ˜์ด์ง€ ์บ์‹œ๋Š” SSD ์ ‘๊ทผ์„ ์ค„์ด๋Š” 1์ฐจ ์™„์ถฉ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ๋Š” ์บ์‹œ ํžˆํŠธ๋กœ SSD I/O๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ , ์“ฐ๊ธฐ๋Š” write-back ์ •์ฑ…์œผ๋กœ dirty page๋ฅผ ๋ชจ์•„ ๋‘์—ˆ๋‹ค๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ(๋˜๋Š” fsync ์‹œ) SSD์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ„ํผ๋ง์€ ์ž‘์€ ์“ฐ๊ธฐ๋ฅผ ๋ณ‘ํ•ฉํ•ด SSD์˜ WAF๋ฅผ ์ค„์ด๋Š” ๋ฐ์—๋„ ๊ธฐ์—ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ „์› ์žฅ์•  ์‹œ ๋ฐ์ดํ„ฐ ์œ ์‹ค์„ ๋ง‰์œผ๋ ค๋ฉด fsync/FUA(Force Unit Access)๋กœ ์˜์†์„ฑ์„ ๋ณด์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

7.5 OS๊ฐ€ SSD ํŠน์„ฑ์„ ๊ณ ๋ คํ•˜๋Š” ๋ฐฉ๋ฒ• ์š”์•ฝ

๊ณ„์ธต ์—ญํ•  ๋ณ‘๋ ฌ์„ฑ / ๋‹จ์œ„
Package ์—ฌ๋Ÿฌ Die๋ฅผ ์ ์ธตํ•œ ๋ฌผ๋ฆฌ ์นฉ ์ฑ„๋„์— ์—ฐ๊ฒฐ
Die (LUN) ๋…๋ฆฝ์ ์œผ๋กœ ๋ช…๋ น ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ๋‹จ์œ„ Die ๊ฐ„ ์™„์ „ ๋ณ‘๋ ฌ
Plane Die ๋‚ด ๋ณ‘๋ ฌ ๋™์ž‘ ๋‹จ์œ„ (๋ณดํ†ต 2~4๊ฐœ) Plane ๊ฐ„ ๋™์‹œ ๋™์ž‘
Block ์†Œ๊ฑฐ(Erase)์˜ ์ตœ์†Œ ๋‹จ์œ„ (์ˆ˜๋ฐฑ~์ˆ˜์ฒœ Page) ์†Œ๊ฑฐ ๋‹จ์œ„
Page ์ฝ๊ธฐ/์“ฐ๊ธฐ(R/W)์˜ ์ตœ์†Œ ๋‹จ์œ„ (4~16 KB) R/W ๋‹จ์œ„
Cell 1๋น„ํŠธ ์ด์ƒ์„ ์ €์žฅํ•˜๋Š” ํŠธ๋žœ์ง€์Šคํ„ฐ SLC~QLC
์ข…๋ฅ˜ ๋น„ํŠธ/์…€ ์ „์•• ๋ ˆ๋ฒจ P/E Cycle ํŠน์„ฑ
SLC 1 bit 2 ~100,000 ์ตœ๊ณ  ์†๋„ยท์ˆ˜๋ช…, ๊ณ ๊ฐ€, ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ/์บ์‹œ
MLC 2 bit 4 ~3,000~10,000 ์†๋„ยท์ˆ˜๋ช…ยท๋น„์šฉ ๊ท ํ˜•
TLC 3 bit 8 ~1,000~3,000 ํ˜„์žฌ ์†Œ๋น„์ž ์ฃผ๋ฅ˜
QLC 4 bit 16 ~100~1,000 ์ตœ๋Œ€ ์šฉ๋Ÿ‰ยท์ตœ์ € ๋น„์šฉ, ๋‚ฎ์€ ์ˆ˜๋ช…
๋™์ž‘ ๋‹จ์œ„ ์†๋„(๋Œ€๋žต) ํŠน์„ฑ
READ (์ฝ๊ธฐ) Page (4~16KB) 25~100 ยตs ๋น„ํŒŒ๊ดด์ , ๊ฐ€์žฅ ๋น ๋ฆ„
PROGRAM (์“ฐ๊ธฐ) Page 200~1,500 ยตs ์ „ํ•˜ ์ฃผ์ž…(FN ํ„ฐ๋„๋ง), ์†Œ๊ฑฐ ์„ ํ–‰ ํ•„์š”
ERASE (์†Œ๊ฑฐ) Block 2~10 ms ์ „ํ•˜ ๋ฐฉ์ถœ, ์…€ ๋งˆ๋ชจ ๋ฐœ์ƒ, ๊ฐ€์žฅ ๋А๋ฆผ
ECC ๋ฐฉ์‹ ํŠน์ง• ์ ์šฉ
BCH ๋Œ€์ˆ˜์  ์ •์ •, ๊ตฌํ˜„ ๋‹จ์ˆœ, ์ •์ • ๋Šฅ๋ ฅ ์ œํ•œ ๊ตฌํ˜• SLC/MLC
LDPC ์—ฐํŒ์ •(soft-decision) ๋””์ฝ”๋”ฉ, ๋†’์€ ์ •์ • ๋Šฅ๋ ฅ ํ˜„์žฌ TLC/QLC ์ฃผ๋ฅ˜
ํ•ญ๋ชฉ SATA / AHCI NVMe
์ธํ„ฐํŽ˜์ด์Šค SATA 6 Gbps PCIe (Gen5 x4 โ‰ˆ 16 GB/s)
ํ ๊ฐœ์ˆ˜ 1๊ฐœ ์ตœ๋Œ€ 65,535๊ฐœ
ํ๋‹น ๋ช…๋ น ์ˆ˜ 32 ์ตœ๋Œ€ 65,535
ํ”„๋กœํ† ์ฝœ ์˜ค๋ฒ„ํ—ค๋“œ ๋†’์Œ (HDD ์‹œ๋Œ€ ์„ค๊ณ„) ๋‚ฎ์Œ (ํ”Œ๋ž˜์‹œ ์ตœ์ ํ™”)
๋ ˆ์ดํ„ด์‹œ ๋†’์Œ ๋‚ฎ์Œ
์Šค์ผ€์ค„๋Ÿฌ ํŠน์ง• SSD ์ ํ•ฉ์„ฑ
none (noop) ์Šค์ผ€์ค„๋ง ๊ฑฐ์˜ ์—†์ด ๋ฐ”๋กœ ์ „๋‹ฌ โ˜…โ˜…โ˜… NVMe SSD ๊ธฐ๋ณธ ๊ถŒ์žฅ
mq-deadline ์ง€์—ฐ์‹œ๊ฐ„ ์ƒํ•œ ๋ณด์žฅ, ๊ฐ€๋ฒผ์šด ์ •๋ ฌ โ˜…โ˜… ํ˜ผํ•ฉ ์›Œํฌ๋กœ๋“œ
kyber ์ง€์—ฐ์‹œ๊ฐ„ ๋ชฉํ‘œ ๊ธฐ๋ฐ˜ ์ ์‘ ์ œ์–ด โ˜…โ˜… ๊ณ ์„ฑ๋Šฅ NVMe
BFQ ๊ณต์ •์„ฑ ์ค‘์‹ฌ, ๋ฐ์Šคํฌํƒ‘ ๋ฐ˜์‘์„ฑ โ˜… ์˜ค๋ฒ„ํ—ค๋“œ ํผ
OS ๊ธฐ๋ฒ• ๋ชฉ์  SSD์— ๋ฏธ์น˜๋Š” ํšจ๊ณผ
TRIM/Discard ์‚ญ์ œ ์ •๋ณด ์ „๋‹ฌ WAFโ†“, GC ํšจ์œจโ†‘, ์ˆ˜๋ช…โ†‘
none I/O ์Šค์ผ€์ค„๋Ÿฌ ๋ถˆํ•„์š”ํ•œ ์ •๋ ฌ ์ œ๊ฑฐ ๋ ˆ์ดํ„ด์‹œโ†“, CPU ์˜ค๋ฒ„ํ—ค๋“œโ†“
F2FS ๋“ฑ FS ์ˆœ์ฐจ ์“ฐ๊ธฐ ์œ ๋„ GC ๋ถ€๋‹ดโ†“, ์„ฑ๋Šฅโ†‘
ํŽ˜์ด์ง€ ์บ์‹œ write-back ์ž‘์€ ์“ฐ๊ธฐ ๋ณ‘ํ•ฉ WAFโ†“, I/O ํšŸ์ˆ˜โ†“
์ •๋ ฌ(alignment) ํŒŒํ‹ฐ์…˜์„ ํŽ˜์ด์ง€ ๊ฒฝ๊ณ„ ์ •๋ ฌ ์“ฐ๊ธฐ ๋ถ„ํ•  ๋ฐฉ์ง€, WAFโ†“

8. ์žฅ๋‹จ์ 

์žฅ์ 

  • NVMe์™€ blk-mq์˜ ์กฐํ•ฉ์œผ๋กœ ๋‹ค์ค‘ ์ฝ”์–ด ๋ณ‘๋ ฌ I/O๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • FTL๊ณผ ์˜ค๋ฒ„ํ”„๋กœ๋น„์ €๋‹ ๋•๋ถ„์— ํ˜ธ์ŠคํŠธ๋Š” NAND์˜ ๋ฎ์–ด์“ฐ๊ธฐ ๋ถˆ๊ฐ€ ์ œ์•ฝ์„ ์ง์ ‘ ๋ณด์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

  • TRIM๊ณผ page cache write-back์ด ์ž‘์€ ์“ฐ๊ธฐ๋ฅผ ๋ณ‘ํ•ฉํ•ด WAF์™€ ์ง€์—ฐ์„ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค.

ํ•œ๊ณ„

  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜๊ณผ LDPC ์žฌ์‹œ๋„๋กœ ์ธํ•ด tail latency๊ฐ€ ํ”๋“ค๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์…€๋‹น ๋น„ํŠธ ์ˆ˜๊ฐ€ ๋Š˜์ˆ˜๋ก ์ˆ˜๋ช…๊ณผ ์˜ค๋ฅ˜ ์—ฌ์œ ๊ฐ€ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

  • DRAM-less SSD๋Š” HMB์— ์˜์กดํ•˜๋ฏ€๋กœ ๊ณ ๋ถ€ํ•˜ ๋žœ๋ค I/O์—์„œ ๋ถˆ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • SLC ์บ์‹œ๋Š” ๋ฒ„์ŠคํŠธ ์“ฐ๊ธฐ์—๋Š” ์œ ๋ฆฌํ•˜์ง€๋งŒ, ์žฅ์‹œ๊ฐ„ ์—ฐ์† ์“ฐ๊ธฐ์—์„œ๋Š” ์†Œ์ง„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

9. ๊ด€๋ จ ๊ธฐ์ˆ 

  • nand_0010_nand_flash_internals.html - ์…€ ๊ตฌ์กฐ, Vth ๋ถ„ํฌ, Program/Erase ๋ฌผ๋ฆฌ

  • nand_0020_ftl_wearleveling_garbagecollection.html - L2P ๋งคํ•‘, GC, Wear Leveling, OP

  • nand_0015_vfs_fs_pagecache_blockio.html - VFS, page cache, blk-mq ๊ฒฝ๋กœ

  • nand_0025_ssd_internal_parallelism_channel_die_plane.html - ์ฑ„๋„, ๋‹ค์ด, ํ”Œ๋ ˆ์ธ ๋ณ‘๋ ฌ์„ฑ

  • ../system/system_0025_nvme_architecture.html - NVMe ํ ๊ตฌ์กฐ์™€ ์ธํ„ฐํŽ˜์ด์Šค

  • ../system/system_0020_ecc_error_correction.html - ECC/LDPC์™€ ๋ฐ์ดํ„ฐ ์ •์ • ๋ฐฐ๊ฒฝ

  • https://docs.kernel.org/filesystems/f2fs.html - F2FS์˜ ๋กœ๊ทธ ๊ตฌ์กฐ, background GC, discard

  • https://docs.kernel.org/block/blk-mq.html - ๋ฉ€ํ‹ฐํ ๋ธ”๋ก I/O์™€ ์š”์ฒญ ๋ถ„์‚ฐ

  • https://man7.org/linux/man-pages/man8/fstrim.8.html - ์ฃผ๊ธฐ์  TRIM๊ณผ discard ์šด์˜

10. ํ•ต์‹ฌ ์ •๋ฆฌ

NAND SSD๋Š” ์…€ ๋ฌผ๋ฆฌ, FTL, NVMe, OS ๋ธ”๋ก ๊ณ„์ธต์ด ์„œ๋กœ ๋ถ€๋‹ด์„ ๋‚˜๋ˆ  ๊ฐ–๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. NAND์˜ erase-before-write ์ œ์•ฝ์„ FTL์ด ์ˆจ๊ธฐ๊ณ , NVMe์™€ blk-mq๊ฐ€ ๋‹ค์ค‘ ํ ๋ณ‘๋ ฌ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, OS๋Š” page cache์™€ TRIM์œผ๋กœ ๋‚ด๋ถ€ ์ฆํญ์„ ์ค„์ž…๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์€ ๋‹จ์ˆœํ•œ ๋Œ€์—ญํญ๋ณด๋‹ค GC, ECC, HMB, OP ๊ฐ™์€ ๋ณด์กฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ๊ท ํ˜•์— ๋” ํฌ๊ฒŒ ์ขŒ์šฐ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์ข‹์€ SSD๋Š” ๋น ๋ฅธ NAND๋งŒ์ด ์•„๋‹ˆ๋ผ, ๊ทธ NAND๋ฅผ ์–ผ๋งˆ๋‚˜ ์•ˆ์ •์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋А๋ƒ์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.