legacy kernel 들에서 파일필터를 지원할때 redirfs.ko 모듈을 사용
이 모듈의 "적정 메모리 스펙" 을 정하기 위해 redirfs 가 사용하는 slab cache 3개의 사용량을 측정하고 있음
문제는 모듈을 load 할때, radix_tree_node 라는 slab cache 가 약 3000K ~ 4000K 정도
순간적으로 치고 올라오는 걸 확인함
radix_tree_node slab cache 가 redirfs.ko 에서 어떻게 쓰이는지 확인하기 위해,
radix tree insert 과정을 따라가봤습니다.
redirfs.ko 는 file/inode/dentry 구조체 주소를 index(key) 로 하여 높이 11의 radix tree 를 구성하고, leaf node 에 rfs_file/rfs_inode/rfs_dentry 를 저장하고 있습니다.
leaf node 에 접근하기 위해, index 를 chunksize(6) 크기로 앞(MSB)에서부터 사용. 현재 node 내 slot offset(0 ~ 63) 을 구하는데 사용하고 있습니다.
높이 11의 radix tree 는 최대 (64)^11 개까지 rfs_file/rfs_inode/rfs_dentry 저장이 가능합니다.
file 0xffff888003472800 에 대응하는 rfs_file 을 redirfs.ko 내부 radix tree 에 넣는
로직 예시입니다.
file 0xffff888003472800 를 radix tree 에 넣을때 node 별 slot offset 을 계산하는 과정입니다.
계산한 offset 이 있고, radix tree insert 로직을 이해하였으므로, 이제 crash 상에서 file 에 대응하는 rfs_file 을 radix tree 내에서 찾을 수 있습니다.
1) file 0xffff888003a34bc0 의 slot offset
root/15/63/63/34/8/0/18/41/37/12/0
2) crash 상에서 따라가봅니다.