동일한 폴더에 있는 파일 수가 ext4 파일 시스템의 I/O 성능에 어떤 영향을 미칩니까?

동일한 폴더에 있는 파일 수가 ext4 파일 시스템의 I/O 성능에 어떤 영향을 미칩니까?

나는 사용하고있다교토 내각내 프로젝트의 (키-값 저장소)입니다. 내가 사용하고 있는 특정 DB 유형은 다음과 같습니다.DirDB키-값 쌍을 저장하기 위해 디렉터리에 많은 파일을 생성합니다. 이 프로젝트를 실행 중인 서버에는 ext4 파일 시스템이 있습니다. 내가 겪고 있는 문제는 디렉터리의 파일 수가 증가함에 따라 I/O 대기 시간이 증가한다는 것입니다. 또한 디렉터리에 너무 많은 파일이 있는 경우(예: 100만 개 이상의 파일) 전체 폴더를 삭제하려고 하면 시간이 오래 걸립니다(이미 5시간 이상 계속 실행 중임). 파일 수가 증가함에 따라 I/O 대기 시간이 증가하는 이유와 rm이 폴더를 삭제하는 데 시간이 오래 걸리는 이유를 누군가 설명할 수 있습니까?

답변1

지연의 가장 간단한 예는 전체 디렉토리를 나열하는 시간이 디렉토리의 크기에 따라 달라진다는 것입니다.

둘째, 파일 시스템 설정에 따라 ext4는 디렉터리 조회를 위해 연결된 목록이나 해시된 B-트리를 사용합니다. 잘못된 구성으로 인해 발생할 수 있는 차이점을 파악하려면 두 데이터 구조가 어떻게 작동하는지 살펴보기만 하면 됩니다. 짧은 버전은 연결된 목록이 매우 느리고 작은 디렉터리에만 적합한 반면, 해시는 훨씬 빠르고 큰 디렉터리에 훨씬 더 적합하다는 것입니다.

연결된 목록을 처리한다는 것은 목록의 모든 항목을 모두 검토하는 것을 의미합니다. 왜냐하면 대부분의 경우 항목 n-1만이 항목 n이 어디에 있는지 알고 있으므로 항목 n을 먼저 읽어야 하기 때문입니다.

해시 트리 처리에는 메모리의 숫자를 계산하고 해당 숫자를 기반으로 세부 정보로 직접 이동하는 작업이 포함됩니다. 큰 디렉터리의 경우 이 작업을 몇 번 수행해야 할 수도 있지만 모든 노드를 처리하는 것보다 훨씬 빠릅니다.

어쨌든 세부 사항을 정말로 이해하고 싶다면 모든 문서를 온라인에서 볼 수 있습니다. 예를 들어 여기에서 시작할 수 있습니다.https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Hash_Tree_Directories

관련 정보