[server] git과 같은 워크로드에 알맞은 NFS 성능을 얻는 방법은 무엇입니까?

vagrant개발을 위해 VirtualBox 시스템을 관리하기 위해 OSX를 실행하는 개발자를위한 설정을 관리합니다 .

inotifyLinux 시스템 내부 를 지원하기 위해 VirtualBox와 디렉토리를 공유하는 일반적인 방법을 피하십시오. 대신 Virtualbox 시스템은 OSX에 마운트 된 NFS 공유를 노출합니다.

Git (및 소스 트리와 같은 관련 도구)은 OSX의 공유 디렉토리에서 실행됩니다. 이것의 성능은 매우 열악합니다. 종종 실행하는 데 최대 5 초가 걸립니다 git status. 작은 저장소를 마운트 된 NFS 드라이브에 복제하는 데 몇 분 (로컬 드라이브에서 5-10 초)이 걸릴 수 있습니다.

분명히 NFS 성능은 로컬 SSD에 직접 쓰는 것보다 좋지 않지만 NFS는 Virtualbox와의 가상 사설 네트워크 인터페이스를 통해 실행되고 있습니다.

몇 가지 벤치 마크를 실행했습니다. 첫번째:

dd if=/dev/zero of=test bs=16 count=16384

각 결과는 100 개의 샘플을 기반으로합니다.

# local drive
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
0.990   1.000   1.020   1.021   1.030   1.130

# on the shared NFS drive
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
6.000   6.278   6.390   6.482   6.570   7.630

# inside the VirtualBox instance
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
0.3600  0.4800  0.5150  0.5552  0.5400  1.4500

두 번째 벤치 마크 :

ioping -c 500

local avg: 6 microseconds
local IOPS: 65.5 k

NFS Latency avg: 703 microseconds
NFS OPS: 1.4 k

분명히 약간의 대기 시간은 불가피하지만 이것은 간단한 작업을 상당히 고통스럽게 만들기에 충분하지 않습니다.

볼륨 소유자가 기본 설정으로 Ubuntu 12.10 (Quantal)을 실행 중입니다. 볼륨을 마운트하는 시스템이 OSX Mavericks를 실행 중입니다.

현재 주요 nfsd 연결은 UDP를 통해 실행되고 있으며 이는 가상 연결보다 이상적입니다. 나는인지 확실하지 않다 statsdlockdTCP와 UDP를 통해 실행된다.

나는 async깃발로 장착을 시도했지만 rwsize부스트 와 함께 거의 차이가 없었습니다.

이 환경에서 NFS의 성능을 크게 향상시킬 수있는 기회는 무엇입니까?



답변

NFS 공유에서 성능 차이가 큰이 Git 설정을 사용하십시오.

git config core.preloadindex true


답변

이 기사 에는 NFS 성능을 조정하는 유용한 팁 포함되어 있습니다.

특히 nfsstat -rc재전송 재시도 횟수를 확인하는 데 사용 합니다. 재 시도가 너무 많으면 nfsd클라이언트 요청을 처리하기 위해 데몬에 스레드가 부족한 것이므로 사용 가능한 스레드 수를 늘려야합니다.

또한 VirtualBox 인스턴스가 씬 프로비저닝되지 않아야합니다. VirtualBox의 씬 프로비저닝 스토리지 는 쓰기가 발생할 때 성능이 크게 저하됩니다.


답변

또 다른 대답은 이미 NFS 통계 확인에 대해 언급하고 있습니다.

VirtualBox vm에 대해 서로 다른 (가상) nic 구성을 시도해보십시오-다른 가상 칩셋 및 모드 (nat 대신 브리지 모드).

또한 NFSv4가 사용 된 경우 대신 NFSv3을 사용해 보는 것이 좋습니다. 이러한 버전은 매우 다르므로 성능에 큰 차이가있을 수 있습니다.


답변