/srv/data
나는 많은 수(20,000,000)의 작은 파일(4-40KB)을 포함하는 디렉토리( )를 가지고 있습니다 . 이러한 파일은 /srv/data
하위 디렉토리 이름과 파일 이름을 연결하여 UUID를 형성하는 하위 디렉토리에 있습니다 . 예를 들어 UUID는 833ac041-28c4-4ea4-9bac-81fe781732b4
path 에 매핑됩니다 /srv/data/83/3a/c0/41-28c4-4ea4-9bac-81fe781732b4
. 각 하위 디렉터리 수준에 대해 2개의 16진수 숫자를 사용하면 팬아웃은 255입니다. 예를 들어, 에는 255개의 디렉터리가 있고 /srv/data
각 디렉터리에는 최대 255개의 하위 디렉터리가 있을 수 있으며 각 디렉터리에는 최대 255개의 하위 디렉터리가 있을 수 있습니다.
이러한 파일이나 이러한 파일의 하위 집합에 대한 캐싱 기본 설정을 제공하도록 커널에 지시할 수 있습니까?
예를 들어, "안녕 Linux, 가능한 한 많은 파일을 캐시하세요 /srv/data
. 모든 파일을 메모리에 저장할 수 없다면 가능한 한 많이 캐시하고 이 디렉터리 외부의 파일에 대해서는 걱정하지 마세요. 가능하다면 메모리에 모두 넣은 다음 나머지 내용을 자유롭게 사용하여 이 디렉토리 외부의 파일을 캐시하세요."
답변1
sysctl vm.vfs_cache_pressure=10
도움이 될 수도 있습니다. 수천 개의 작은 파일 처리 속도를 높이려면 파일 내용보다 더 많은 디렉터리 항목과 inode를 캐시에 보관하십시오. 가장 큰 오버헤드는 하드 드라이브에서 작은 파일을 찾는 것입니다. 이는 정확한 위치에서 몇 킬로바이트를 읽는 것보다 더 많은 읽기 작업(더 많은 시간)이 필요합니다. 커널이 캐시에 저장된 물리적 위치를 이미 알고 있으면 파일 관리가 훨씬 빨라집니다.