2014-11-14 3 views
0

폴더의 1000 개 파일에 대해 stat64()을 실행하고 1 초 미만의 시간이 걸렸지 만 동일한 디렉토리에 5000 개가있는 경우 시간은 15s으로 증가했습니다.디렉토리의 파일 수가 늘어남에 따라 linux의 stat64()가 느려지는 이유는 무엇입니까?

stat64()이 비선형 적으로 느린 이유는 무엇입니까? 나는 5 초가 될 것으로 예상했다.

EDIT 나는 FAT 파일 시스템으로 USB에서 데이터를 읽는다.

+3

모든 이름 조회에 대한 항목 목록을 스캔하는 장난감 파일 시스템을 사용하고 있기 때문입니다. ext3에서 XFS (최상) 또는 ext4를 사용하거나 "dir_index"를 활성화하십시오. – Nemo

+0

파일 시스템 유형은 무엇입니까? – tristan

+0

@Insane Coder : 두 경우 모두 1000 개 파일을 stat64하고 있습니까? 아니면 존재하는 모든 파일을 stat64하고 있습니까? –

답변

3

N 항목이 들어있는 디렉토리의 파일에 stat64을 호출하면 FAT 파일 시스템에서 시스템이 모든 디렉토리 항목을 검토하고 각각을 비교해야하기 때문에 복잡성은 O (N)입니다. 찾고.

N 항목이 들어있는 폴더에서 stat64 번을 M 번 호출하면 복잡성은 O (M * N)이고 M = N이면 O (N * N)이됩니다.

예제를 보면 : stat64 요소가 5 개일 때, 요인 25가 필요합니다. 사실 1 초의 시간이 0.6 초라면 예상대로 결과가 나옵니다.