![ecryptfs(일반적으로 FUSE 파일 시스템)는 버퍼 캐시와 어떻게 상호 작용합니까?](https://linux55.com/image/37420/ecryptfs(%EC%9D%BC%EB%B0%98%EC%A0%81%EC%9C%BC%EB%A1%9C%20FUSE%20%ED%8C%8C%EC%9D%BC%20%EC%8B%9C%EC%8A%A4%ED%85%9C)%EB%8A%94%20%EB%B2%84%ED%8D%BC%20%EC%BA%90%EC%8B%9C%EC%99%80%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EC%83%81%ED%98%B8%20%EC%9E%91%EC%9A%A9%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
내 가정(잘못된 것 같음)은 ecryptfs(보통 FUSE 파일 시스템)가 다음 스태킹 메커니즘을 사용한다는 것입니다.
- 사용자 코드 문제
read()
- 커널은 기존(암호화되지 않은) 버퍼의 요청을 충족하려고 시도합니다.
- 버퍼가 존재하지 않습니다. 커널이 ecryptfs에 청크 로드를 요청합니다.
- ecryptfs는 커널이 물리적(암호화된) 블록을 로드하도록 요구하며, 커널은 이를 수행하고 이를 버퍼 캐시에 저장합니다.
- ecryptfs는 물리적 블록을 해독합니다.
- 커널은 해독된 블록을 버퍼 캐시에 저장합니다.
- 후속 읽기는 캐시의 해독된 블록에서 수행됩니다.
그러나 암호화된 파일 시스템과 암호화되지 않은 파일 시스템에서 동일한 작업에 대한 "sys" 시간을 비교하면 캐시의 유일한 버퍼가 암호화되고 ecryptfs가 각 에서 실행되는 것으로 보입니다 read()
.퓨즈홈페이지에는 버퍼 캐싱에 대한 언급이 없지만, 블록 수준이 아닌 시스템 호출 수준에서 작업이 발생한다고 표시하는 것으로 보입니다.
ecryptfs(Dustin?) 또는 FUSE 내부에 익숙한 사람이 이 질문에 답할 수 있습니까?