nfs 서버와 클라이언트(v4, 둘 다 CentOS 7.6/7.8)가 있습니다.
서버에 들어오는 파일을 복사하는 프로그램이 있습니다 inotifywait
(in CLOSE_WRITE
).
클라이언트에서 공유는 다음과 같이 마운트됩니다
sudo mount 192.168.1.10:/myshare /mnt/share
(비동기 모드를 의미함)
.
sudo mount -o sync 192.168.1.10:/data/shares/myshare /mnt/share
동기식 설명
마운트 지점에 sync 옵션이 지정되면 해당 마운트 지점의 파일에 데이터를 쓰는 시스템 호출로 인해 시스템 호출이 사용자 공간에 제어권을 반환하기 전에 데이터가 서버로 플러시됩니다. 이는 클라이언트 전체에 걸쳐 더 나은 데이터 캐시 일관성을 제공하지만 상당한 성능 비용이 발생합니다.
서버에서 나는 /data/shares/myshare
폴더를 본다
inotifywait -m -e CLOSE_WRITE /data/shares/myshare | while read path action file; do echo "$action"; done
이제 일반적인 방법으로 충분히 큰 파일을 복사합니다(효과는 약 500mbyte부터 시작됩니다).cp
질문
서버에서 발생하는 일은 해당 플래그를 사용하면 sync
파일이 복사될 때 이벤트가 한 번 발생한다는 것입니다. 이는 원하는 효과입니다. 그러나 비동기 모드에서는 이벤트가 여러 번 발생하고 이 이벤트를 사용하여 서버에 들어오는 파일을 복사하므로 불완전한 파일을 복사합니다.CLOSE_WRITE
동기화 플래그를 사용하면 문제가 해결되지만 약 10%의 성능 저하가 발생합니다. 내 580MB 테스트 파일은 25% - 35%였습니다(더 큰 파일의 경우 속도가 감소하는 것 같고 비동기도 2.5GB 파일의 경우만큼 빠릅니다).
삼바에서는 이런 문제가 발생하지 않아서 nfs와 관련된 문제인 것으로 생각됩니다.
이벤트를 여러 번 실행하지 않고도 성능을 유지할 수 있는 플래그/옵션 또는 기타 가능성이 있습니까?