NFS 클라이언트 / 서버 스택 조정


10

디스크 이미지를 보유하는 NFS를 통해 OpenSolaris 2009.06 시스템에 연결하는 CentOS 5 VMWare 서버가 있습니다. 가상 컴퓨터가 느린 IO에 묶여있는 것처럼 보이므로 연결을 최적화하기 위해 가능한 모든 작업을 수행하고 싶습니다.

프로덕션 시스템에서 처리량을 측정하는 가장 좋은 방법은 확실하지 않지만 dd bs=1024k count=400~ 1.6GB / s의 로컬 (OpenSolaris) 쓰기와 ~ 50MB / s의 원격 (CentOS) 쓰기를 사용하는 일부 비과학적인 테스트가 있습니다. 7 개의 VM이 현재 연결을 통해 실행되고 있기 때문에 이것이 실제로 얻는 것보다 낮습니다.

현재 두 시스템은 두 NIC 모두에서 점보 프레임이 활성화 된 직접 연결된 gigE입니다 (MTU = 9000). 그 외에는 최적화가 이루어지지 않았습니다. NFS 마운트 / 내보내기가 기본값을 사용하고 있습니다.

성능 향상을 위해 노브를 어디에서 시작해야합니까?


처리량은 그다지 중요하지 않습니다. OpenSolaris를 실행하는 시스템의 기본 하드웨어 사양은 무엇입니까? 디스크 / 스핀들 수는 몇 개입니까? RAM이 얼마나됩니까?
ewwhite

4 개의 RAM이있는 하나의 컨트롤러에서 2 개의 raidz1 풀에 12 개의 디스크가 분산됩니다. 처리량이 중요하지 않은 경우 어떤 메트릭을보고 있어야합니까?
Sysadminicus

cat / proc / mounts는 무엇입니까 | Linux 클라이언트에서 grep solaris_server가 말합니까? Linux 버전마다 기본 마운트 옵션이 다릅니다. (
James

10.10.1.1:/tank/vm / vm nfs rw, vers = 3, rsize = 1048576, wsize = 1048576, hard, proto = tcp, timeo = 600, retrans = 2, sec = sys, addr = 10.10.1.1 0 0
Sysadminicus

일부 솔라리스 10의 판, NFS3이 불안정했다. nfs4로 이동할 수 있으면 몇 가지 개선 사항이 표시 될 수 있습니다. 다른 댓글은 말했다 그러나, 50 메가 바이트보고 / A의 GigE 링크가 당신이 최고에 가까운 걸쳐이야 수 있습니다 참조
워렌

답변:


2

명확히하기 위해 단일 Gb 이더넷 연결을 통해 NFS로 50MB / 초를 얻고 있습니까?

그리고 호스트 서버는 VMware 서버가 설치된 CentOS를 실행하고 있는데, 7 개의 VM이 실행됩니까? 고성능 솔루션 인 VMware ESXi가 아니라 CentOS와 VMware 서버를 결합한 특별한 이유가 있습니까?

초당 50MB는 크지 않지만 단일 Gb 네트워크 케이블에서 기대하는 것보다 훨씬 적지는 않습니다. 사람들이 위에서 언급 한 NFS 조정을하면 일단 70- 80MB / 초 라인에 따른 옵션 :

"ro, hard, intr, retrans = 2, rsize = 32768, wsize = 32768, nfsvers = 3, tcp"

아마도 시스템의 양쪽 끝에서 당신에게 합리적 일 것입니다.

그 이상을 달성하려면 네트워크 카드를 쌍으로 구성해야 처리량이 약 90 % 증가합니다. 링크 집계 에서 최상의 성능을 얻으려면 802.3ad를 지원하는 스위치가 필요할 수 있습니다 .

그래도 OpenSolaris 상자의 IO 처리량이 의심스럽고 12 개의 디스크가 1.6GB / 초의 처리량을 지원하지 않을 가능성이 높으며 Solaris + ZFS에 의해 캐시 될 수도 있습니다.


CentOS + VMWare Server는 무료이기 때문에 사용하고 있습니다. 마지막으로 ESXi가 꽤 비싸다는 것을 확인했습니다. / proc / mounts에 따르면 rsize / wsize는 현재 1048576입니다. 확인하기 위해 32k로 줄이면 속도가 증가한다고 생각하십니까? 링크 집계를 확인하겠습니다. 연결의 양쪽 끝에서 또는 하나만 수행합니까? 캐시 된 IO에 대해 옳다고 생각합니다. 내 dd가 512MB를 초과하면 전송 속도가 크게 떨어집니다 (50-120MB / s 범위).
Sysadminicus

더 이상 UI 에서이 질문에 대한 답변을 수락 할 수있는 능력이 없지만 링크 집계가 최선의 방법 인 것처럼 보였습니다.
Sysadminicus

지연된 답변에 대해 죄송합니다. ESXi는 이제 기본 형태로 무료이며 성능 향상을 제공하지만 기능이 제한되어 있으므로 귀하에게 적합하지 않을 수 있습니다. 개선 된 기능을 많이 보려면 네트워크 링크의 양쪽 끝에서 링크 집계를 수행해야합니다. 그것이 당신을 위해 작동하기를 바랍니다
Ewan Leith

1

RHEL / CentOS 5 머신의 경우 다음 마운트 플래그를 사용합니다

nfsvers = 3, tcp, timeo = 600, retrans = 2, rsize = 32768, wsize = 32768, 하드, intr, noatime

최신 Linux 커널 버전은 더 큰 rsize / wsize 매개 변수를 지원하지만 EL5의 2.6.18 커널의 최대 값은 32k입니다.

NFS 서버에서 적어도 Linux의 경우 no_wdelay는 BBWC가있는 디스크 컨트롤러가 있으면 도움이 될 것입니다. 또한 클라이언트에서 noatime 플래그를 사용하는 경우 noatime을 사용하여 서버에 파일 시스템을 마운트하는 것이 좋습니다.

그리고 이미 언급했듯이 UDP를 귀찮게하지 마십시오. 고속 네트워크 (1GbE +)를 사용하면 시퀀스 번호가 줄어드는 작지만 0이 아닌 데이터 손상 가능성이 있습니다. 또한 패킷 손실 가능성이 있으면 TCP가 UDP보다 성능이 우수합니다.

데이터 무결성이 그다지 걱정되지 않으면 "비동기"내보내기 옵션이 성능을 크게 향상시킬 수 있습니다 (비동기의 문제는 서버가 충돌하면 데이터가 손실 될 수 있다는 것입니다).

또한 최소한 Linux 서버의 경우 충분한 NFS 서버 스레드가 실행 중인지 확인해야합니다. 기본 8은 너무 낮습니다.


1

나는 한 번 Dell r710, 1 CPU, 4 GB RAM, 6 SATA 디스크와 RAID-10으로 테스트를 수행했습니다. 클라이언트는 위에서 언급 한 것처럼 CentOS 5.3 및 nfs 매개 변수를 모두 갖춘 x2100이었습니다.

"ro, hard, intr, retrans = 2, rsize = 32768, wsize = 32768, nfsvers = 3, tcp"

noatime와 함께 양쪽에 장착.

또한 최대 nfsds를 256으로 높이고 perc6 RAID 컨트롤러에 noop 스케줄러를 사용했습니다. 내가 한 또 다른 일은 파티션을 RAID 컨트롤러의 64K 스트라이프 크기에 맞추는 것입니다.

그런 다음 dd로 nfs 성능을 측정했습니다. 읽기의 경우 gigE 파이프를 채울 수 있지만 쓰기의 경우 약간 더 나은 결과를 얻을 수 있습니다. 비동기를 사용하면 70 ~ 80MB / s를 얻을 수 있지만 비동기는 옵션이 아닙니다.

아마 당신은 gigE 링크에서 nfs로 더 많은 것을 얻을 수 없습니까?


1

다음을 수행하십시오. 다음 두 단계를 통해 OpenSolaris NFS 서버에서 ZIL (ZFS Intent Log)을 일시적으로 비활성화하십시오.

  1. echo zil_disable/W0t1 | mdb -kw
  2. 테스트 파티션을 다시 마운트

그런 다음 다시 테스트하십시오. zilstat 를 사용 하여 ZIL에 대한 IO가 더 이상 존재하지 않도록 할 수 있습니다 . 테스트가 더 빨리 실행되면 성능 문제가 ZIL과 관련이 있다는 것을 알 수 있습니다. 여전히 느리게 실행되면 ZIL이 범인이 아니며 ZIL에 SSD를 사용하는 것도 도움이되지 않습니다. 참고 항목 ZFS 악 튜닝 가이드를 ZIL에 대한 자세한 내용은.

다른 옵션은 네트워크 트래픽 (예 : Wireshark)을 캡처하고 점보 프레임과 같은 문제가 있는지 확인하는 것입니다. 와이어의 패킷이 구성에서 예상 한 것처럼 보이는지 확인하십시오. 나쁜 조각화가 진행되고 있습니까? 재전송이 있습니까?


0

읽기 및 쓰기 페이로드 크기를 늘리면 도움이 될 수 있습니다. 특히 점보 프레임과 함께.

32k가 최적이라고 생각합니다.

rsize=32768,wsize=32768

UDP 전송으로 전환하는 것은 물론 전송 제어의 오버 헤드를 절약하기 때문에 TCP보다 빠릅니다. 그러나 NFSv4를 사용하지 않는 안정적인 네트워크에만 적용 할 수 있습니다.


CentOS가 NFSv3을 사용하여 연결중인 것 같습니다. 유스 케이스에 NFSv4에 가치가 있습니까? 두 NIC 사이에 크로스 오버 케이블 만 있으면 네트워크가 매우 안정적이라고 말할 수 있습니다.
Sysadminicus

2
UDP는 그다지 번거롭지 않습니다. TCP를 고수하십시오. v3이 제대로 작동 할 때까지 NFSv4를 사용하지 않는 것이 좋습니다.
James

0

ZFS의 NFS 성능은 ZFS (ZFS 인 텐트 로그)에 SSD를 사용하여 작업 대기 시간을 줄임으로써 크게 향상되었습니다. OpenSolaris NFS 및 ZFS 메일 링리스트 에서 ZFS의 VMWare NFS 성능 에 대한이 스레드 에는 ZIL 성능이 병목 상태인지 확인하기위한 벤치 마크 도구를 포함하여 추가 정보가 있습니다.


0

참고로 dd 명령은 디스크에 캐시를 쓰지 않고 쓸 것입니다. Solaris에서는 디스크가 아닌 RAM에 쓰기 때문에 "-oflag = sync"를 사용하여 디스크에 쓰기를 강제 할 수 있기 때문에 1.6G / s와 같은 미친 숫자를 얻을 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.