filesystem 의 파일 삭제 순서
1. unlink 호출
2. ext4 -> mata data 삭제 (~10초)
3. ext4 -> raw data 삭제(TRIM) (~20초) : 삼성외에는 이것을 하지 않는다.
4. batched discard : 구글이 만든 기능으로 하루에 한번정도 mata data 만 삭제되고 raw data 가 남아있는 데이터를 찾아서 삭제해줌. 즉, 3번이 수행되지 않은 부분에 수행해줌.
securediscard 는 실제로는 잘 쓰지 않고 FTL 에서도 잘 보장되지 않는다.
ext4 metadata 종류
- bitmap
- inode
- directory entry : 파일 raw 데이터의 일종이나 내부적으로 해당 디렉토리에 어떤 파일(inode)들이 있는지 기재되어 있다.
filesystem 은 각 block 을
block group (128K) 단위로 관리함.
block_group_descriptor
super_block
ext4 전에는 각 block group 별로 meta data 영역이 있음.
ext4 에서는 block_group 을 몇개씩 묶어서 meta data 영역을 하나만 쓰는 feature 가 있음. (성능상 유리)
----------------------------
page cache 에 대한 차이
/dev/ 밑에 장치를 통해서 접근해서 block device 를 읽으면, page cache 의 sync 되지 않은 데이터는 신경 안쓰고 읽는 것임.
만약 /data/.. 식의 경로로 접근해서 읽으면 DRAM 위에 page cache 에 있는 데이터를 포함해서 접근하게 됨.
------------------------
NAND 의 단위
block : 보통은 256 KByte 정도. erase 단위
sector : write 단위, 보통은 4KByte
--------------------------
SDcard 는 discard 명령어의 개념이 없다??
--------------------------
MoviNand -> eMMC -> ufc card
eMMC 는 커맨드를 한번에 하나씩만 처리가 가능하지만 UFS 는 여러개의 cmd 를 동시에 보낼 수 있다.
------------------------
NAND 내부에도 SRAM 이 있고, sync 명령어를 안내리고 전원을 끊으면 데이터가 날라감
-----------------------
SDcard 는 속도별로 Class 가 있고 이는 시퀀셜write 성능 기준임.
-------------------
inode size 는 256 byte 임
extent : inode 에 해당 하는 파일의 파편된 각 조각에 대한 link
inode 하나에 표현가능한 extent 의 개수는 4개 인데 하나의 파일이 5개 이상의 extent 로 쪼개지게 되면
ext4_extent_idx( 4k ) 가 할당되면서 메타데이터 사이즈가 늘어남
inode 자체 size 인 i_size 는 늘어나지 않으나, i_block 의 사이즈는 늘어나게 됨
즉, 똑같이 1G를 썼는데 fragmantation 난 상황이랑 아닌 상황이랑 i_size는 차이가 없음
'Programming > Linux_Kernel' 카테고리의 다른 글
dtb(device tree blob) file parser(command) on linux (0) | 2018.05.31 |
---|---|
rootfs (0) | 2018.04.11 |
batched discard - ext4 (0) | 2017.01.03 |
Direct IO 를 위한 aligned buffer 얻기 (0) | 2015.06.29 |
use fallocate in Android system (0) | 2015.04.06 |