
상황: KVM을 사용하여 3개의 VM을 호스팅하는 Ubuntu 서버가 있습니다. 모든 게스트와 호스트는 /var의 특정 하위 폴더에 있는 동일한 파일에 액세스해야 합니다. 따라서 하위 폴더는 NFS를 통해 내보내집니다. 우리의 문제는 게스트가 호스트 속도의 절반만으로 디렉터리에서 읽고 쓸 수 있다는 것입니다. 내보내기 테이블은 다음과 같습니다
alice@host:~$ cat /etc/exports
/home/videos 192.168.10.0/24(rw,sync,no_root_squash)
여기서 호스트의 IP는 192.168.10.2이고 VM은 192.168.10.1{1..3}입니다. /home/videos는 /var의 특정 하위 폴더에 대한 심볼릭 링크입니다. 특히 /var/videos/genvids입니다.
다음은 VM fstab의 관련 줄입니다.
192.168.10.2:/home/videos /mnt/nfs nfs auto,noatime,rsize=4096,wsize=4096 0 0
하드 디스크의 지속적인 데이터 속도는 ~155MB/s이며 hdparm -tT 및 dd의 출력으로 확인됩니다.
alice@host:~$ dd if=/home/videos/4987_1359358478.mp4 of=/dev/null bs=1024k count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 2.04579 s, 154 MB/s
VM 내에서는 상황이 다르게 보입니다.
bob@guest:~$ dd if=/mnt/nfs/4959_3184629068.mp4 of=/dev/null bs=1024k count=300
300+0 records in
300+0 records out
314572800 bytes (315 MB) copied, 4.60858 s, 68.3 MB/
파일 시스템의 페이지 크기에 블록 크기를 맞추는 것은 만족스러운 효과가 없었습니다.
bob@guest:~$ dd if=/mnt/nfs/4925_1385624470.mp4 of=/dev/null bs=4096 count=100000
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 5.77247 s, 71.0 MB/s
NFS 성능에 대한 다양한 페이지를 참조했는데, 가장 관련성이 높은 것은NFS FAQ파트 B 및 해당성능 튜닝어떻게. 대부분의 힌트가 적용되지 않습니다. 다른 것들은 결과를 개선하지 못했습니다.거기 ~이다 스레드 여기디스크 성능과 KVM을 다루는 것입니다. 그러나 NFS 측면은 다루지 않습니다.이것스레드는 그렇습니다. 그러나 우리의 경우에는 네트워크 속도가 제한 요인이 아닌 것 같습니다.
완전한 그림을 제공하기 위해 이것은 심볼릭 링크가 해결되고 모든 활성 내보내기 옵션이 표시된 내보내기 etab의 내용입니다.
alice@host:~$ cat /var/lib/nfs/etab
/var/videos/genvids 192.168.10.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,
no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,
anonuid=65534,anongid=65534)
이 맥락에서 나를 괴롭히는 것(그리고 내가 이해하지 못하는 것)은 nfsd의 procfile 출력입니다.
alice@host:~$ cat /proc/net/rpc/nfsd
...
th 8 0 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
...
세 번째 열 이상의 경우 VM 내의 디스크에서 읽은 후 0이 아닌 예상 값을 갖게 됩니다. 그러나 nfsstat에서는 실제로 읽기 작업이 있었다고 알려줍니다.
alice@host:~$ nfsstat
...
Server nfs v3:
null getattr ...
9 0% 15106 3% ...
read write ...
411971 95% 118 0% ...
...
따라서 주제가 매우 복잡하므로 다른 곳을 찾아봐야 할지, 이에 대한 쉬운 해결책이 있는지 알고 싶습니다.
답변1
결과적으로 문제는 예상보다 해결하기가 더 쉬웠습니다. 튜닝크기 조정그리고크기VM fstab의 옵션이 트릭을 수행했습니다. 해당 라인은 이제
192.168.10.2:/home/videos /mnt/nfs nfs auto,noatime,rsize=32768,wsize=32768 0 0
나에게는 이것이 가치가 있다면 최고의 성능을 기대했기 때문에 이것은 분명하지 않았습니다.크기 조정그리고크기디스크의 블록 크기(4096)를 충족하고 NIC의 MTU(9000)보다 크지 않습니다. 분명히 이 가정은 틀렸다.
정확한 지속 디스크 데이터 속도는 파일에 따라 다르다는 점은 주목할 만합니다. 크기가 9GB인 두 개의 유사한 파일의 경우 155MB/s(파일 1)에서 140MB/s(파일 2) 사이의 속도를 관찰했습니다. 따라서 한 파일의 데이터 속도가 감소하더라도 다른 파일의 데이터 속도는 여전히 최대일 수 있습니다.