Windows 7에서 파일 시스템 캐시의 기능은 무엇입니까?

Windows 7에서 파일 시스템 캐시의 기능은 무엇입니까?

그만큼Git이 왜 그렇게 느린지 진단하기기사에 다음과 같은 흥미로운 항목이 있습니다.

파일 시스템 캐시 활성화

Windows의 파일 시스템 계층은 본질적으로 Linux(Git의 파일 시스템 액세스가 최적화됨)와 다릅니다. 해결 방법으로 Windows용 Git은 초기 "준비" 후 많은 경우 작업을 가속화하는 파일 시스템 캐시를 제공합니다. 저장소별로 파일 시스템 캐시를 활성화할 수 있습니다.

git config core.fscache true

Git에서 이 옵션을 활성화하면 실제로 무엇이 바뀌나요? Windows 7의 파일 시스템 캐시는 어떤 모습이며, 캐시되는 내용은 무엇입니까? "초기 워밍업"에는 무엇이 필요합니까?

답변1

내용은 다음과 같습니다 git config --help.

core.fscache
일부 작업에 대해 파일 시스템 데이터의 추가 캐싱을 활성화합니다.

Windows용 Git은 이를 사용하여 파일별로 lstat를 수행하는 대신 전체 디렉터리의 lstat 데이터를 대량으로 읽고 캐시합니다.

많은 파일 시스템 요청을 수행하는 대신 git은 디렉토리의 모든 파일에 대한 정보를 얻기 위해 단 한 번의 요청만 수행합니다.

더 많은 기술적 설명은 다음을 소개한 커밋에서 찾을 수 있습니다 fscache.
Win32: mingw의 lstat 및 dirent 구현 아래에 캐시를 추가합니다.

느린 lstat 에뮬레이션(git은 인덱스의 각 파일에 대해 한 번씩 lstat를 호출함)으로 인해 Windows에서 작업 트리 상태를 확인하는 것이 매우 느립니다. Windows 운영 체제 API는 단일 파일을 검사하는 것보다 전체 디렉터리의 상태를 검사하는 데 훨씬 더 나은 것 같습니다.

lstat 데이터에 대한 캐시를 사용하는 lstat 구현을 추가합니다. 캐시 미스는 전체 상위 디렉터리를 읽고 이를 캐시에 추가합니다. 동일한 디렉토리에 대한 후속 lstat 호출은 캐시에서 직접 제공됩니다.

또한 캐시에 디렉터리 목록을 생성하고 사용할 수 있도록 opendir / readdir / closedir을 구현합니다.

캐시는 파일 시스템 변경 사항을 추적하지 않으며 파일 API 수정에 연결되지 않으므로 작업 복사본을 수정하지 않는 git 함수에 대해 명시적으로 활성화해야 합니다.

관련 정보