디렉토리를 vmtouch하는 방법(포함된 파일은 제외)

디렉토리를 vmtouch하는 방법(포함된 파일은 제외)

이것가상 터치(8)도구를 사용하면 메모리에 있는 하나 이상의 파일을 잠글 수 있습니다. 재귀 모드가 있지만 디렉터리는 파일을 검색하는 데만 사용되며 자체적으로 잠그지는 않습니다.

잠금을 해제할 때까지 readdir이 항상 빠르게 유지되도록 메모리에서 디렉토리를 잠그는 방법은 무엇입니까?

답변1

vmtouch이 문제에 대한 해결책은 전혀 없습니다. 실행하도록 지시한 파일에 대해 & 작업을 vmtouch수행합니다 .open(2)mmap(2)

커널 캐시를 허용하더라도 readdir(2)여전히 선형 작업입니다.여전히 많은 경우 디스크에 영향을 미칩니다.:

현재 VFS readdir 작업에서는 전체 디렉토리가 캐시에 있더라도 항상 낮은 수준의 파일 시스템이 호출됩니다.

(2017/08/07 18:40 UTC에 후속 조치):

ls -l수행되고 있는 작업은 어쨌든 이미 쓸모가 없어진 디렉토리에 대한 래퍼 가 아닙니다 readdir. 옵션을 사용하면 해당 옵션 내의 각 항목도 표시됩니다.readdir(2)readdir(3)(f)statgetdents-llslstat

getdents.iterate_shared그 자체는 주어진 파일 시스템이 & 포인터에 대한 디렉토리 파일 구조 작업을 위해 제공하는 모든 것에 대한 래퍼 일 뿐입니다 . .iterate이 경우에는 ext4종료됩니다 ext4_readdir.

일부 파일 시스템은 이 계층에서 캐싱을 구현하지만(NFS가 매우 명확한 예임) 다른 파일 시스템은 여전히 ​​디스크에 액세스할 수 있습니다.

원래 문제의 원인에 대해서는 getdents특정 디렉터리에서 반복적으로 실행되는 일부 데몬을 작성할 수 있지만 해당 디렉터리 항목을 커널 캐시에 고정할 방법이 없습니다. 그렇지 않으면 커널이 별도의 캐시 스레드에서 데이터를 완전히 무시할 수 있습니다( 파일 시스템에 따라 다름).

ext4간단히 말해서, 파일 시스템에 해당 기능이 있는 경우 디렉토리를 디렉토리에 색인화된 htree로 표시 dir_index할 수 있습니다 (파일 시스템 기능이 설정된 경우 매우 작은 디렉토리도 해당 캐시를 사용합니다).chattr +I dir

관련 정보