본문 바로가기

Programming/Linux_Kernel

filesystem 잡다한 내용

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