일반 디스크와 NAND flash 에서 ext4 를 사용할때 차이점

alwaysN00b의 이미지

안녕하세요. 프로그래밍 Q&A에 올릴려다가 프로그램은 아닌것 같아 여기에 질문 올립니다.

최근에 폰은 바꾸면서 심심해서 파일시스템을 봤는데 ext4를 사용하더군요. yaffs 같은걸 쓸줄 알았는데 , 찾아보니 2010년에 결정되었더군요 ㅋ 그동안 너무 무관심 했었네요..

그래서, 혹시 NAND flash에서 ext4를 쓰면 FTL 때문에 분명 기존 데이터가 덮어씌워지는 시간차이가 일반디스크보다 훨씬 길게 날텐데 하는 생각에...

눈으로 확인해 보고 싶어졌습니다. ㅋ

그래서.. 질문 입니다. 일반 디스크에서 NAND flash 처럼 시뮬레이션 할수 있는 방법이 있을까요?

예를 들어 vm으로 우분투박스에서 1기가 하드디스크와 1기가 flash 디스크를 만들어 비슷한 파일들을 쓰고 지웠을때 차이점을 눈으로 보고싶거든요.

한 디렉토리에서 파일을 쓰고 지우거나, 덮어 씌울때 flash에서 복구 확률이 훨씬 높을것 같은데...

일단 전 제 폰 루팅해서 ext4로 된 /data영역을 덤프 떠봤습니다. 예상대로 ext4 더군요. ㅋ 하지만 용량이 10G라 분석하기엔 너무 커서 시뮬레이션 해보고 싶어서 질문 올립니다.

많은 답변 부탁드립니다.

송효진의 이미지

원하시는건 모르겠지만,
ext4 ssd optimization 에 대해 찾아보시면 궁금증은 해결하실 수 있지 않을까요?

태훈의 이미지

FTL이 내장된 flash 디바이스(ex> olid-state disks, eMMC, SD 카드등)가 아니면 yaffs나 jffs 같은 raw flash file system을 쓸텐대요?
요즘 스마트폰 flash 메모리단에은 FTL까지 내장되어 있나 보네요.
NAND flash 시뮬레이터는 뭐가 있는지 모르겠지만, 하시려는 것과 비슷한 내용의 LWN 기사가 있습니다. 이 기사에서는 flashbench라는 툴을 썼네요.

Just do it!

hurtak의 이미지

최근폰의 storage는 eMMC를 사용하는데, eMMC DRIVER에서 LOW LEVEL로 구현되어있고,
BLOCK I/O와의 연결은 하드디스크와 동일한 인터페이스인 GENERAL I/O TYPE으로 되어 있습니다.
WEAR-LEVELING이나 BAD BLOCK management는 eMMC 내부의 firmware에서 해주게 되어 있습니다..

eMMC를 사용하기 이전의 과도기적인 상황이었을 때, OneNAND에 ext4를 포팅해서 사용을 했었는데...
Nexus S가 OneNAND와 MMC를 혼용해서 사용한 형태였습니다.

실제 FS의 성능 차이 YAFFS를 사용하는 것보다 EXT4가 훨씬 빠릅니다.
EXT4의 경우에는 주로 MEMORY BUFFER에 대한 OPTIMIZATION이 훨씬 잘 되어 있습니다...

-_- _-_ -_-

태훈의 이미지

그렇군요.
storage에서 FTL을 제공해주면, 당연히 flash FS(JFFS, YAFFS)을 쓸 필요가 없죠. (flash FS가 파일 시스템 레벨에서 FTL 기능을 구현한 것이니...)

Nexus S가 OneNAND와 MMC를 혼용해서 사용하는 형태라면 MMC 부분은 ext4, OneNAND는 flash FS를 FS로 쓰면 되겠군요.

hurtak wrote:

실제 FS의 성능 차이 YAFFS를 사용하는 것보다 EXT4가 훨씬 빠릅니다.
EXT4의 경우에는 주로 MEMORY BUFFER에 대한 OPTIMIZATION이 훨씬 잘 되어 있습니다...

flash storage에 FTL 기능이 없으면 당연히 flash FS가 빠릅니다. 행여나 성능이 떨어진다하더라도 일반화된 FS는 flash 특정을 고려한 것이 아니므로 flash 메모리 수명이 줄어들거나 할 것 입니다.

근데 요즘 flash storage는 FTL이 기본 탑재라 이제 flash FS 쓸일이 없을듯 하네요.

Just do it!