2016-07-22 1 views
0

NFS 공유를 다시 내보내는 퓨즈 모듈이 있습니다. posix_fallocate를 호출하는 fio와 같은 응용 프로그램은 4K 스프레드로 한 바이트 씩 내 퓨즈 쓰기 함수를 호출합니다. 이것은 결과적으로 NFS를 통해 1 바이트 RPC 호출로 이어 지므로 성능이 매우 느려집니다.posix_fallocate는 4K 간격으로 한 번에 1 바이트 씩 씁니다. 따라서 NFS 구현에서 내 퓨즈가 매우 느려집니다.

어떻게 퓨전을 통해 응용 프로그램에 직접 파일을 처리 할 수 ​​있는지 알려주고 단일 바이트 쓰기를 사용해서는 안됩니까?

+0

이 퓨즈 파일 시스템은 fallocate 호출을 구현하지 않는다? – itisravi

답변

1

무엇이 필요합니다 : posix_fallocate 전화시 EOPNOTSUPP을 반환하지 마십시오.

NFS 볼륨을 마운트하고 Linux에서 posix_fallocate를 스트레칭합니다. 리눅스의 posix_fallocate 구현은 EOPNOTSUPP를 만나면 각 블록에 1 바이트를 기록하는 하드 작업을 수행합니다.

라인 아래의 strace의 일부가 출력 됨 보여줍니다

fallocate(3, 0, 0, 8589934592)   = -1 EOPNOTSUPP (Operation not supported) 
pwrite(3, "\0", 1, 1048575)    = 1 
pwrite(3, "\0", 1, 2097151)    = 1 
pwrite(3, "\0", 1, 3145727)    = 1* 
..... 
+0

Glibc의'posix_fallocate' 파일 시스템이 리눅스에서'fallocate '를 할 수 없을 때 천천히 preallocation을 에뮬레이션하는 것은 유감스럽게도 잘 알려진 사실입니다 : https://stackoverflow.com/a/23508718/7836056. – Anon

관련 문제