10.3. NFS에서 캐시 사용
명시적으로 지시하지 않는 한 NFS는 캐시를 사용하지 않습니다. FS-Cache를 사용하도록 NFS 마운트를 구성하려면 mount 명령에 -o fsc 옵션을 포함합니다.
# mount nfs-share:/ /mount/point -o fsc
/mount/point 아래의 파일에 대한 모든 액세스는 파일이 직접 I/O 또는 쓰기용으로 열려 있지 않으면 캐시를 통해 이동합니다. 자세한 내용은 10.3.2절. “NFS를 사용한 캐시 제한” 에서 참조하십시오. NFS 인덱스에서는 파일 이름이 아닌 NFS 파일 핸들을 사용하여 내용을 캐시하므로 하드 링크된 파일이 캐시를 올바르게 공유합니다.
캐싱은 NFS 버전 2, 3 및 4에서 지원됩니다. 그러나 각 버전은 캐싱에 다른 분기를 사용합니다.
10.3.1. 캐시 공유
NFS 캐시 공유와 관련된 몇 가지 잠재적인 문제가 있습니다. 캐시가 영구적이므로 캐시의 데이터 블록이 네 개의 키 시퀀스에서 인덱싱됩니다.
- 수준 1: 서버 세부 정보
- 수준 2: 일부 마운트 옵션, 보안 유형, FSID, uniquifier
- 수준 3: 파일 처리
- 수준 4: 파일의 페이지 번호
수퍼 블록 간의 일관성 관리 문제를 방지하기 위해 데이터를 캐시하려는 모든 NFS 수퍼 블록에는 고유한 수준 2 키가 있습니다. 일반적으로 동일한 소스 볼륨 및 옵션을 사용하여 두 NFS 마운트는 수퍼 블록을 공유하므로 해당 볼륨 내의 다른 디렉터리를 마운트하더라도 캐싱을 공유합니다.
예 10.1. 캐시 공유
다음 두 개의 마운트 명령을 사용하십시오.
home0:/disk0/fred /home/fred -o fsc 마운트
home0:/disk0/jim /home/jim -o fsc 마운트
여기에서
/home/fred
및 /home/jim
은 특히 NFS 서버의 볼륨/파티션이 동일한 옵션인 것처럼 수퍼 블록을 공유할 수있습니다
. 이제 다음 두 가지 마운트 명령을 고려하십시오.
mount home0:/disk0/fred /home/fred -o fsc,rsize=230
mount home0:/disk0/jim /home/jim -o fsc,rsize=231
이 경우
/home/fred
및 /home/jim
은 고급 2 키의 일부인 네트워크 액세스 매개 변수가 다르기 때문에 수퍼 블록을 공유하지 않습니다. 다음과 같은 마운트 시퀀스에 대해 동일한 작업이 수행됩니다.
mount home0:/disk0/fred /home/fred1 -o fsc,rsize=230
mount home0:/disk0/fred /home/fred2 -o fsc,rsize=231
여기에서 두 개의 하위 트리(
/home/fred1
및 /home/fred2
)의 콘텐츠가 두 번 캐시됩니다.
수퍼 블록 공유를 방지하는 또 다른 방법은 nosharecache 매개 변수를 사용하여 명시적으로 억제하는 것입니다. 동일한 예제를 사용합니다.
home0:/disk0/fred /home/fred -o nosharecache,fsc 마운트
mount home0:/disk0/jim /home/jim -o nosharecache,fsc
그러나 이 경우
home0:/disk0/fred
및 home0:/disk0/jim
의 수준 2 키를 구분할 필요가 없으므로 수퍼 블록 중 하나만 캐시를 사용할 수 있습니다. 이 문제를 해결하려면 마운트 중 하나 이상의 고유 식별자 (예: fsc=unique-identifier )를 추가합니다. 예를 들어 다음과 같습니다.
home0:/disk0/fred /home/fred -o nosharecache,fsc 마운트
mount home0:/disk0/jim /home/jim -o nosharecache,fsc=jim
여기에서 고유 식별자 jim 이
/home/jim
에 대한 캐시에 사용된 수준 2 키에 추가됩니다.