NAND flash, 파일 시스템 IT

갤럭시S의 ICS 업데이트 불가가 모비낸드와 RFS 파일 시스템 때문이라는 추측이 떠돌면서 NAND 플래쉬에 대해서 말이 많은 것 같은데...


이 글을 통해서 알고 있는 것을 알려드리겠습니다. 기술적인 이야기는 최대한 배제하고 쉽게 풀어쓰겠으나, 그래도 이해가 안가는 부분은 덧글로 물어보시면 알려드리겠습니다.


일단 NAND flash란 NAND 회로를 통해 구성된 플래쉬 메모리를 일컫는 말입니다. 기존의 PC에 쓰이는 HDD는 모바일 디바이스에는 적합하지 않습니다. HDD는 원판처럼 생긴 플래터란 물리적인 공간에 자기를 통해서 기록하고 헤드를 통해서 직접 데이터가 기록된 공간으로 접근하여 읽고, 쓰기 작업을 수행합니다.


HDD는 대용량화가 가능하고 1MB대 가격도 NAND flash 에 비해서 훨씬 저렴하나, 물리적으로 플래터가 회전하고 헤드가 움직여야 하기 때문에 크기의 경량화가 쉽지 않으며 전력의 소모도 크고, 무엇보다도 충격에 상대적으로 약한 편입니다. 따라서 스마트폰을 비롯한 모바일 디바이스에서는 HDD가 사용되지 않고 NAND flash 메모리를 보조기억장치로 이용하게 됩니다. (요새 PC에서 한창 쓰이고 있는 SDD도 결국 NAND flash 에 각종 컨트롤러가 합쳐진 것입니다.)


NAND flash는 HDD 에 비해서 가격이 훨씬 비싸고 대용량화가 쉽지 않지만, 물리적으로 움직이는 부분이 없는 반도체로 구성되기 때문에 충격에 강하고, 경량화가 가능하며, 속도 또한 훨씬 빠릅니다. (수명은 HDD에 비해 상대적으로 짧습니다.)


이러한 이유로 모바일 디바이스에서 보조기억장치로 이용되는 NAND flash는 SLC, MLC, TLC 로 분류할 수 있습니다.


SLC - Single Level Cell
MLC - Multi Level Cell
TLC - Triple Level Cell


의 약자입니다.


NAND flash는 데이터를 셀(Cell)이라는 공간에 저장하게 됩니다.  SLC는 이 셀이라는 공간에 데이터를 1비트를 저장하게 되고, MLC는 2비트를, TLC는 3비트를 저장하게 됩니다.


따라서 SLC는 하나의 셀에 0/1 의 두가지 방법으로 기록되며, MLC는 00/01/10/11의 네가지 방법, TLC는 000/001/010/011/100/101/110/111 의 8가지 방법으로 저장됩니다. 


언뜻 보면 TLC가 가장 좋은 것 같지만 결코 그렇지 않습니다. TLC는 저가 USB에나 쓰이는 NAND flash 입니다.


SLC는 셀에 0/1 의 두가지 방법으로 저장하기 때문에 데이터의 신뢰성이 높으며(기록 방법이 단순하게 때문에 수명이 길고), 읽고 쓰기 속도 빠릅니다. 다만 셀의 갯수가 동일하다면 당연하겠지만 MLC에 비해서 용량이 적으며, 대용량화도 쉽지 않고 가격도 비쌉니다. 삼성에서 1GB의 SLC NAND flash를 상용화 한 게 겨우 작년 8월입니다. (지금은 어느정도까지 상용화 되어있는지는 모르겠습니다.)


MLC는 하나의 셀에 4가지 방법으로 기록됩니다. 따라서 SLC 에 비해서 대용량화가 쉽고, 가격도 쌉니다. 대신 SLC 에 비해서 데이터의 신뢰성이 낮으며(수명이 짧습니다), 읽고 쓰기 속도가 느립니다.


TLC는 뭐... 낮은 데이터 신뢰성과 짧은 수명으로 인해서 저가 USB에나 쓰이는 수준입니다.


OneNand(원낸드), iNAND(아이낸드), MoviNAND(모비낸드) 이름은 많이 들어보셨죠? 갤S에는 모비낸드가 쓰였느니, 넥스에는 아이낸드가 쓰였느니... 하지만 알아두실 게 원낸드, 아이낸드, 모비낸드는 SLC, MLC와 같은 기술에 따른 분류가 아니라 그저 제조사에서 붙인 브랜드명입니다.


삼성에서는 자사의 SLC 플래쉬에 원낸드라는 이름을, MLC 플래쉬에 모비낸드란 이름을 붙였습니다(참고로 삼성에서는 모비낸드의 부정적인 이미지로 인하여 더이상 자사의 MLC 플래쉬에 모비낸드란 이름을 사용하지 않습니다). 아이낸드는 샌디스크의 MLC 플래쉬의 이름일 뿐입니다. 물론 같은 SLC, MLC로 분류된다고 하더라도 각 제조사마다 제조 공정이 다르고 기술이 틀린 만큼 속도 및 수명의 차이는 존재하긴 합니다.


모바일 AP처럼 같은 Cortex A9 을 사용하지만 애플의 A5, 삼성의 엑시노스, TI의 OMAP의 속도가 각각 다른 것과 비슷한 이치로 이해하시면 됩니다.


다시 본론으로 넘어가겠습니다. 일단 안드로이드의 구조에 대해서 살펴보면, 크게 4개의 파티션으로 구분되어있습니다.


/system - 안드로이드 OS 및 시스템 파일, 커널 등이 저장되는 파티션
/data - 각종 유저 데이터가 저장되는 파티션
/cache - OTA등으로 업데이트를 하게 될 경우 임시적으로 파일이 저장되는 파티션
/sdcard - sdcard 파티션


이 각 파티션은 서로 독립적으로 이뤄져 있으며 서로 물리적으로 다른 NAND flash에 구성되기도 하고 아니면 같은 NAND flash에서 논리적으로만 나눠져 있기도 합니다.


PC로 비유하면 이해하기 쉬울 것입니다. PC에서는 두개 이상의 HDD를 가지고 있다면 C드라이브, D드라이브 등으로 서로 다른 파티션으로 나뉘게 되지만, 하나의 HDD에서도 논리적으로 파티션을 나눌 수 있는 것과 같은 이치입니다.


이런 이야기를 하게 된 배경은 안드로이드의 경우 대부분 sdcard 확장이 가능하기 때문에, 다른 나머지 파티션은 같은 NAND flash에서 논리적으로만 나눠져 있더라도 /sdcard 파티션은 아예 물리적으로 독립되어있는 경우가 많습니다. 그렇기 때문에 대부분의 안드로이드 디바이스는 /system /data /cache  파티션을 하나의 NAND flash에, 그리고 /sdcard 파티션은 외부 sdcard를 통해 이뤄집니다. 물론 파티션의 구조를 어떻게 이루느냐는 어디까지나 순수하게 제조사의 마음입니다.


앞에서 말했던 것처럼 가장 속도가 빠르고 수명이 긴 SLC의 경우는 고작 작년 8월에 1GB 가 나왔을 정도로 고용량화가 쉽지 않습니다. 과거 안드로이드 초기라면 모를까 지금에서 이 정도의 용량으로 안드로이드의 보조기억장치를 구성하기에는 단가도 맞지않고 용량도 적습니다.


따라서 대부분의 안드로이드 디바이스들은 물리적으로 MLC + SDCARD 로 구성하게 됩니다. (물론 SDCARD도 대부분 MLC 입니다.) 아니면 단일의 대용량 MLC에 4개의 파티션을 전부 구성하고, 확장으로 sdcard를 꽂을 경우 /external_sdcard 파티션으로 인식하기도 합니다.


안드로이드와 비교가 많이 되는 아이폰의 경우 단일의 MLC 로 이루어진 경우입니다.


그렇다면 넥스는 어떨까요? 넥스는 1GB의 OneNAND와 나머지 용량은 iNAND로 구성됩니다. 넥스는 OneNAND다? iNAND다? 둘다 맞는 말입니다. 정확히 하면 둘 다 사용합니다.






다음으로는 파일 시스템에 관한 이야기 입니다. 파일 시스템에 관하여 단순하게 이야기하자면 데이터를 읽고 쓰는 방식을 지칭하는 말입니다. 아이폰의 iOS는 HFS+, 갤럭시S는 RFS, 넥스는 EXT4를 사용합니다.


RFS는 기존의 윈도우에서 사용하던 파일 시스템인 FAT32를 NAND flash에 맞게 개량하여 삼성이 자체적으로 만든 파일 시스템입니다. NAND 플래쉬에 사용하기 때문에 웨어 레벨링(wear-leveling)이라는 기술이 들어가 있습니다. 앞에서 말했다시 NAND flash는 셀이라는 공간에 데이터를 저장합니다. 그런데 셀에 데이터를 저장하는데 횟수의 한계가 있습니다. 일반적으로 보증된 횟수를 넘어서면 해당 셀의 데이터의 신뢰성에 의문이 생길 수 밖에 없는 것입니다. 대략 SLC의 경우 한 셀당 10만회, MLC는 3만회 정도의 수명을 가지고 있습니다. 그렇기 때문에 NAND flash의 수명을 늘리기 위해서는 하나의 셀에 계속 반복해서 읽고 쓰기 작업을 하는 게 아니라, 가능한 여러셀에 골고루 데이터를 분산시켜야 합니다. 이러한 작업이 바로 웨어 레벨링입니다. RFS는 이러한 웨어레벨링이 고려된 파일 시스템입니다. 하지만 데이터의 신뢰성에 중점을 둔 나머지 속도가 좀 많이 느립니다.


넥스에 사용된 EXT4의 경우는 기존의 리눅스에서 널리 사용되던 파일 시스템입니다. 원래는 HDD에서 사용되던 파일 시스템이기 때문에 웨어레벨링은 지원하지 않습니다. 따라서 사실 EXT4는 NAND flash에는 적합한 파일 시스템은 아닙니다. 하지만 웨어 레벨링을 NAND flash의 컨트롤러 자체에서 지원하기도 하고(믿을 만한 수준은 아니지만), EXT4의 사용으로 인한 NAND flash의 수명 단축 보다는 사용자의 기기 변경시기가 더 빠를 것이라고 판단했기 때문에 EXT4를 사용했을 겁니다.


그리고 아이폰에서 사용한 HFS+는 기존의 OSX에서 사용하던 파일시스템을 iOS에 맞게 개량한 버전입니다. 위의 두 파일 시스템과 결정적인 차이를 가지고 있는데 바로 저널링 기능이 빠져 있습니다. 저널링이란 갑작스런 전원의 손실을 대비하여 주기적으로 로그를 작성함으로써 전원 손실로 인한 데이터 손실이 발생했을 경우 이를 복구할 수 있도록 해주는 기능입니다. 하지만 아이폰은 배터리가 일체형이기 때문에 갑작스럽게 전원이 손실될 일이 없습니다. 따라서 저널링 기능이 빠져있습니다.


저널링 또한 일종의 I/O 작업이기 때문에 엄연히 시스템 자원을 사용합니다. 하지만 아이폰은 저널링이 빠져있기 때문에 이로인한 퍼포먼스의 하락이 없습니다. 배터리 일체형으로 인한 저널링 제거로 어느정도의 퍼포먼스 향상을 가져온 셈이죠. 하지만 반대로 이러한 이유로 아이폰은 배터리 탈착형이 불가능합니다. 안드로이드의 경우는 이와 반대입니다. 배터리 탈부착으로 인해 어느정도 퍼포먼스의 손해를 보는 타입입니다.


뭐 일단은 생각나는 건 이정도인 것 같습니다.

---------------------------------------------------------------------------

넥서스S 카페에 썼던 글 백업용.



핑백

덧글

  • RUBINISM 2011/12/22 21:07 # 답글

    갤2도 갤스랑 동일한 타입을 쓰려나요...?
  • regen 2011/12/22 21:32 #

    갤2도 MLC 이긴 한데, eMMC 4.4 규약에 따라서 MLC를 SLC 비스무리하게 작동하도록 구현한 걸로 알고있습니다.
  • 가루로 2011/12/23 09:47 # 답글

    안녕하세요 쉽게 잘 정리 된 정보를 잘 보고 가게 됩니다.
    수고하십시오.
  • regen 2011/12/23 11:16 #

    방문 감사드립니다.
  • 추세관망 2011/12/23 18:54 # 삭제 답글

    가끔씩 와서 블로그 읽고있습니다.
    항상 느끼지만 어려운 내용을 읽는사람편에서 읽기쉽게 알려주셔서 감사하고, 부러운 면이기도합니다.
    자알~읽고갑니다~
  • Colus 2012/01/30 05:03 # 답글

    아, 저널링FS와 배터리 탈착과의 관계도 있었군요. 어차피 배터리가 떨어지면 자동적으로 꺼지면서 처리할 수 있을테니까 저널링을 생략할 수도 있었겠네요. 좋은 지적 감사합니다. ^^
댓글 입력 영역