NAND 플래쉬 기반 제품들 (SSD, MicroSD Card, USB 등)에 대한 상식
페이지 정보
본문
본 글은 (구) 옆동네에 제가 5년전쯤 썼던 글을 가지고 와서 조금 수정한 글입니다.
평소에 많이 사용하시는 SSD, uSD Card, USB 등 사용하실때 알고 사용하시면 조금 더 났겠죠.
1. NAND 제품들은 전원을 빼두면 데이터가 날아간다?
- 결론만 말씀드리면 맞는 이야기 입니다.
- NAND 플래쉬 메모리에는 Retention 이라는 특성이 있는데, 이것은 NAND 플래쉬에 저장된 데이터가 시간이 지나면 날아가는 특성이 있기 때문입니다.
- 보통 NAND 단품기준 SLC는 5~10년, MLC는 1~3년, TLC/QLC는 3~6개월정도 제조사에서 보증을 하고 있습니다.
- 물론, 저 기간이 지난다고 모든 데이터가 날아가는건 아니지만 확률적으로 전체의 몇% 데이터가 날아갈수 있다는 것을 기준으로 제조사 보증을 하게 됩니다. 실제로는 시간이 지날수록 데이터가 조금씩 점점 log 함수적으로 깨지기 시작합니다.
- 데이터가 날아가도 컨트롤러의 ECC (Error Correction Code, 에러 보정 기능)를 사용해서 보정을 하긴 하나, 보정 능력치가 넘어가는 경우 데이터가 깨지는 현상이 나타나게 됩니다.
- 비디오나 오디오 스트림의 경우 몇비트 깨진다고 해서 문제가 되지 않겠지만 OS나 프로그램의 경우 실행이 안되므로 문제가 심각해 지게 됩니다. 그러므로 SSD 같은 경우는 Controller의 ECC기능이 막강합니다. 상대적으로 Card나 USB는 저가 controller 를 사용하고 ECC기능이 약합니다. 그래도 되는게 Card나 USB에는 보통 사진, 비디오 같은걸 저장하니 혹여나 몇비트 깨진다고 해서 내용이 날라가고 그러지 않기 때문입니다.
- (고급) NAND Controller에는 오래된 데이터를 다시 쓰기를 해서 Cell의 Retention time을 Reset하는 기능이 있습니다. 당연히 전원이 인가된 상태어야 이 기능이 동작하겠지요? - 일부 저가 uSD card or USB controller의 경우에는 이 기능이 없을수도 있습니다.
- SSD를 전원을 빼놓고 오래 방치한뒤 컴퓨터에 연결해서 부팅하면 간혹 부팅에 실패하는 이유가 바로 이때문입니다. 시간이 지나서 OS가 들어있는 부분의 데이터가 깨졌는데, ECC로 복구가 안되는 경우입니다.
- 그래서 SSD나 MicroSD, USB등은 장기 보존이 필요한 데이터를 보관하기에는 적합하지 않습니다. 그냥 HDD같은데다 보관하세요. HDD는 Retention 문제에서 비교적 자유롭습니다.
2. 용량이 큰 NAND 제품들이 속도가 빠르다?
- 대체적으로 맞습니다.
- NAND 플래쉬 메모리 단품(Mono die)은 쓰기 속도가 정해져 있습니다. SLC/MLC/TLC/QLC에 따라 다르기는 하지만 보통 20~30MB/sec 정도 됩니다. 여기서 단품이라고 하면 1개의 die(wafer chip)를 이야기 하는 것입니다. 1개의 Package와는 다른 이야기입니다. 1개의 Package (검은색 몰딩이 된 칩) 안에는 NAND die가 여러개 들어가는 것이 보통입니다.
- NAND Controller 1개에 수많은 NAND 플래쉬 die들이 주렁주렁 붙어서 동작을 하게 되는데, 속도를 높이기 위해 병렬 쓰기를 합니다. 즉 데이터가 들어오면 데이터를 쪼갠뒤 각각의 NAND 플래쉬가 감당할 정도의 데이터를 여러개의 die에 순차적으로 던져서 쓰기 속도를 높이는 방법입니다.
- 예를 들어 최근에는 보통 NAND 플래쉬 die의 용량이 512Gb 비트 (64GB 바이트) 혹은 1Tb(128GB 바이트) 단위로 되어 있습니다. 512Gb 4개를 사용하면 256GB SSD가 됩니다. 이경우 단품의 쓰기 속도가 30MB라고 한다면 30MB * 4 = 120MB/sec 이 최대 쓰기 속도가 됩니다. 512Gb 8개를 사용하면 512GB SSD가 됩니다. 이경우는 30MB * 8 = 240MB/sec 이 됩니다.
- 맥북에어 M2가 처음 나왔을때 256GB 제품의 쓰기 속도가 512GB 제품보다 딱 절반이었죠? 그 이유가 바로 이것입니다.
- 그러므로 용량이 커질수록 안정적으로 쓰기 속도가 높아지게 되는 것입니다.
- 그러나 보통 SSD에 보면 앞단에 Cache가 존재하여 일단 일정 용량의 데이터를 먼저 받아서 NAND에 기록을 하게 됩니다. (고급 제품은 별도의 DRAM cache가 있어서 꽤 많은 데이터를 캐싱하고, 저가제품은 DRAM less여서 DRAM이 따로 없고 controller내의 작은 cache에 캐싱을 합니다) 그러다보니 초기에 들어가는 데이터의 쓰기 속도는 실제 NAND 기록 속도보다 훨씬 빠르게 됩니다만, 지속적으로 대용량 데이터를 보내게 되면 결국 Cache가 다 차게 되고, 실제 NAND 플래쉬가 받아들일 수 있는 속도로 수렴하게 됩니다.
- 쓰기 속도는 NAND 단품 속도 외에도 Controller의 성능, Cache 크기 등 수많은 변수에 의해 결정되긴 합니다만, 대체적으로 용량이 크면 안정적으로 쓰기 속도가 나올수 있다고 이해하시면 되겠습니다.
3. 용량이 큰 NAND 제품들이 오래 사용할수 있다?
- 이것도 맞습니다.
- NAND 플래쉬에는 Endurance라는 특성이 있는데, 쓰기 횟수가 일정 횟수를 넘어가면 셀 자체가 망가지는 현상입니다.
- SLC는 5~10만번, MLC는 1500~3천번, TLC는 500번~1천번, QLC는 500번 이하입니다. 이것도 제품과 제조사별로 다양합니다.
- 실제 보증 기록 횟수가 넘어간다고 셀이 파괴되는건 아니고 전체 셀중에 몇%가 확률적으로 파괴 가능성이 있는지를 계산하여 보증을 하게 됩니다.
- Controller에서 기록후 읽었을때 데이터가 제대로 나오지 않으면, Bad Block 으로 기록하여 향후에 사용하지 않도록 처리를 할 수 있습니다. 그래서 오래 사용하다보면 용량이 조금씩 줄수도 있습니다.
- Controller에서 Wear leveling이라는 기법을 사용하는데, 이는 NAND 플래쉬의 Endurance특성을 고려하여 특정 영역에 쓰기가 빈번하게 일어나지 않도록 골고루 써주는 기능입니다. 이래야 전체적으로 골고루 닳아서 데이터가 날아갈 위험도를 줄여주게 되는 겁니다.
- 예를 들어 Log file 같은 경우 아주 빈번하게 업데이트가 되는데, 이걸 한 자리에서 계속 쓰기를 반복하면 Log File이 써져있던 셀이 금방 죽겠죠? 그래서 다음 쓰기 때는 이 File을 다른 빈 셀에다가 적어줍니다. 이런식으로 Wear Leveling 작업을 하게 됩니다.
- 그래서 용량이 큰 제품일수록 쓸 공간이 많기 때문에 전체적으로는 더 천천히 닳아지게 되는 것입니다.
- 자동차용 블랙박스용 메모리는 지속적으로 쓰기가 이루어져서 사실 플래쉬 메모리 제품에게는 최악의 환경 조건중 하나인데, 용량이 크면 특정 셀에 써지는 횟수가 상대적으로 적어지므로 오래 버틸수가 있습니다.
- 자동차용 블랙박스용도 외에 일반적으로 사용하는 SSD, 디카의 메모리, USB등은 사실 NAND 플래쉬 수명이 다하기 전에 버리거나 제품을 바꾸기 때문에 일반 소비자 입장에서는 수명을 생각하실 필요는 없을것 같습니다.
4. 싸구려 제품과 Major 제품의 품질 차이가 있다?
- 당연히 있습니다.
- NAND 플래쉬는 제품 특성상 100% 셀이 살아나는 칩이 나오기 어렵습니다. 그래서 Controller를 사용해서 오류 보정 등을 해주는 것이구요. (반면 DRAM은 Controller가 없어서 셀이 100% 살아야 동작합니다)
- 삼성, SK하이닉스, 마이크론, 키옥시아 등 칩 제조사마다 자체 등급 규격이 있어서 예를 들어 99% 이상의 셀이 살면 정상품 출하, 이런식으로 기준이 있습니다.
- Major 제조사에서는 본인들 브랜드 이미지도 있고 A/S도 생각하고 해야 하니 최대한 품질 좋은 칩을 사용하게 됩니다.
- 그러나 Brand 없는 싸구려 제품들은 칩 제조사에서 불량으로 떨어진 자재들을 사용하는 경우도 있습니다. 이런걸 Ink die 라고 하고 실제로 많이 유통됩니다. 정품 wafer를 제조할때 수율이 85~90% 수준이므로 나머지 10~15%는 ink die로 팔려나갑니다. 알리에서 파는 카드나 USB같은 제품들은 대부분 이 불량 Ink die를 이용해서 만든다고 생각하시면 됩니다.
- 이경우 처음에 동작을 할수는 있지만, 시간이 지나면서 Retention, Endurance 특성이 매우 좋지 않기 때문에 오류가 점차 들어나다가 데이터가 깨지기도 하고 하는 현상이 일어나게 됩니다.
- 그러므로 중요한 데이터가 담기는 저장장치는 돈을 좀더 주더라도 Major 제조사의 제품을 사용하는 것을 권장합니다.
- 사은품으로 주는 USB, 길거리에서 파는 카드, USB등에는 중요한 데이터 저장을 하지 마시길 바랍니다. 언제 갑자기 죽을지 모르거든요.
- NAND 플래쉬 첫번째 block에는 NAND Controller Firmware 를 기록하는 부분이 있는데, 이부분이 1 bit라도 깨지면 Controller 부팅이 불가능해서 인식도 안되고 제품이 맛이 가게 됩니다. 카드나 USB를 꼽으면 꼽을때마다 이 부분을 읽어서 controller가 부팅을 하게 되는데, 부트코드가 깨지니 부팅을 하다가 죽는 것입니다. 잘 쓰던 카드나 USB가 갑자기 죽는게 바로 이것 때문입니다. 어찌어찌 controller 회사의 firmware writing tool을 구해다가 펌웨어 다시쓰기를 하면 살아날수도 있으나 또 금방 죽을것이기에 미련없이 버리는게 났습니다.
혹시 더 궁금하신 사항이 있으시면 댓글 부탁드립니다.
감사합니다.
페퍼로니피자님의 댓글
좋은글 감사합니다~
Pazz님의 댓글의 댓글
punkguy님의 댓글
2~3달마다 물려서 밥줘야갰군요?
좋은 정보 감사합니다!
Pazz님의 댓글의 댓글
Nalto님의 댓글
DRAM 은 쓰여진 용량과 정확히 일치하지만, NAND 는 보통 그보다 약간 적은 경우가 많습니다.
그건, JDEC 규정상 NAND 는 정해진 용량에서 Bad BLK 을 일부분 인정해주기로 되어 있어서 그렇습니다.
DRAM 이나 NAND 나 정해진 cell 외에 Repair cell 이 있어 불량이 있을 경우, 이걸로 일정부분 치환을 하게 되는데요. DRAM 은 Repair 를 다쓰면 fail chip 이 되지만, NAND 는 Repair 를 다 쓰고, Bad BLK 까지 다 소진해야 Fail chip 이 됩니다.
물론 업체에서는 Bad BLK count가 낮은 놈들은 더 비싸게 팔아 먹지요.
역불님의 댓글