이 페이지에서는 NetApp Volumes의 Linux NFS 클라이언트 동시 실행을 조정하는 방법을 설명합니다.
동시 실행은 클라이언트와 볼륨 간에 한 번에 처리할 수 있는 미해결 NFS 작업 수입니다. 동시 실행을 조정하면 클라이언트를 서버 한도에 맞추고 과도한 대기열 깊이로 인한 성능 저하를 방지할 수 있습니다.
Linux에서는 동시 실행이 마운트 옵션이 아닌 슬롯 테이블 항목 (NFSv3) 또는 NFSv4.1 세션 슬롯에 의해 제어됩니다. 마운트하기 전에 이러한 설정을 구성하거나 변경한 후 NFS 파일 시스템을 다시 마운트합니다.
nconnect와 같은 마운트 옵션에 대한 자세한 내용은 Linux NFS 마운트 옵션을 참고하세요. 구성 순서에 대한 자세한 내용은 Linux NFS 클라이언트 최적화를 참고하세요.
용어
다음 주요 용어는 Linux NFS 동시 실행과 관련이 있습니다.
RPC 슬롯 테이블: 클라이언트에서 미해결 NFS RPC 작업에 대한 TCP 연결당 한도 (NFSv3)입니다.
세션 슬롯: 클라이언트와 서버 간의 세션에 대해 협상된 미해결 명령어에 대한 NFSv4.1 한도입니다.
스토리지 엔드포인트: 클라이언트가 마운트하는 단일 볼륨 IP 주소입니다.
nconnect: 동일한 엔드포인트에 여러 TCP 연결을 여는 마운트 옵션입니다. 연결당 동시 실행을 곱합니다.
Linux 매개변수
다음 표에는 각 프로토콜 버전에 대한 NFS 동시 실행을 구성하는 데 사용되는 매개변수 및 구성 파일이 나와 있습니다.
| 프로토콜 | 매개변수 | 구성 |
|---|---|---|
| NFSv3 | sunrpc.tcp_max_slot_table_entries |
/etc/sysctl.conf, sysctl -p |
| NFSv3 | sunrpc.tcp_slot_table_entries |
일부 배포판, 배포판 문서 참고 |
| NFSv4.1 | max_session_slots |
/etc/modprobe.d/ (예: nfsclient.conf), 재부팅 |
NFSv3
다음 섹션에서는 NFSv3 클라이언트 및 서버 한도, nconnect가 동시 실행에 미치는 영향, 동시 실행 요구사항을 추정하는 방법, 슬롯 한도를 구성하는 방법을 설명합니다.
클라이언트 및 서버 한도
NFSv3은 클라이언트와 서버 간의 동시 실행을 협상하지 않습니다. 각 측면에서 자체 한도를 적용합니다.
NetApp Volumes NFSv3 서버: TCP 연결당 최대 128개의 실행 컨텍스트
최신 Linux 클라이언트 (기본값):
sunrpc.tcp_max_slot_table_entries = 65536.
서버 한도를 초과하는 기본 클라이언트 슬롯 수는 불필요합니다. 클라이언트가 서버에서 효율적으로 처리하는 것보다 더 많은 미해결 작업을 전송하면 서버에서 TCP 창을 줄여 성능에 영향을 줄 수 있습니다.
권장사항: 연결당 sunrpc.tcp_max_slot_table_entries를 128 이하로 설정합니다. 클라이언트와 연결이 많은 환경에서는 스토리지 엔드포인트당 총 미해결 슬롯 사용량을 10,000 이하로 유지합니다.
nconnect가 NFSv3 동시 실행에 미치는 영향
한 클라이언트의 대략적인 최대 동시 실행은 다음과 같이 계산됩니다.
(sunrpc.tcp_max_slot_table_entries per connection) x (nconnect value)
동시 실행 값은 연결당 서버 (128) 및 워크로드 요구사항에 의해 제한됩니다.
예 1: 기본 슬롯, nconnect 없음
TCP 연결 1개
클라이언트는 최대 65,536개의 미해결 작업을 시도할 수 있지만 서버는 연결당 최대 128개를 허용합니다.
서버 한도 128로 제한되는 유효 동시 실행
예 2: 128개 슬롯, nconnect 없음
sunrpc.tcp_max_slot_table_entries=128연결 1개
클라이언트와 서버가 128개의 미해결 작업으로 정렬됩니다.
예 3: 100개 슬롯, nconnect=8
TCP 연결 8개
연결당 최대 100개의 미해결 작업
클라이언트 1개에서 최대 800개의 미해결 작업 (8 x 100), 연결당 서버 한도 128 적용
예 4: 클라이언트 수 많음 (EDA 스타일)
250개의 클라이언트, 각 클라이언트는
sunrpc.tcp_max_slot_table_entries=8이고nconnect가 없음각 클라이언트에는 연결당 최대 8개의 미해결 작업이 있습니다.
클라이언트 전체: 하나의 볼륨 IP에 대한 최대 2,000개의 미해결 작업(250 x 8), 이는 10,000개 슬롯 엔드포인트 가이드라인 내에 있습니다.
클라이언트를 수평 확장할 때는 클라이언트당 슬롯 값을 더 낮게 사용합니다. 팜 전체 슬롯 계획을 대체하는 것이 아니라 개별 고처리량 클라이언트에서 nconnect를 사용합니다.
리틀의 법칙을 사용하여 필요한 동시 실행 추정
다음 수식을 사용하여 워크로드에 필요한 동시 실행을 추정합니다.
동시 실행 = (작업률) x (latency_in_seconds)
예: 클라이언트 수 많음, 엔드포인트 1개
평균 I/O가 256KiB이고 지연 시간이 10ms인 4,000MiBps를 타겟팅합니다.
작업률: 약 16,000 IOPS
동시 실행: 약 16,000 x 0.010 = 160
클라이언트 1,250개: 균등하게 분할된 경우 클라이언트당 약 0.13개의 슬롯 클라이언트당 2, 4, 8과 같은 작은 정수를 사용하여 10,000개 슬롯 상한선 아래에 헤드룸을 유지합니다.
sunrpc.tcp_max_slot_table_entries 설정 (NFSv3)
많은 Linux 배포판에서 systemd-sysctl은 sunrpc 커널 모듈이 로드되기 전에 실행됩니다. sunrpc.*의 /etc/sysctl.conf 또는 /etc/sysctl.d/ 항목은 부팅 시 무시됩니다. 다음 지속성 방법 중 하나를 사용하지 않는 경우 부팅 후 sysctl -p를 실행하면 다음 재부팅까지만 작동합니다.
방법 1: 테스트에서 128보다 낮은 값이 충분한 것으로 나타나면 해당 값을 사용합니다. 배포판 문서에서 달리 명시하지 않는 한 tcp_slot_table_entries와 tcp_max_slot_table_entries를 모두 동일한 값으로 설정합니다.
이러한 설정을 변경한 후 NFS 파일 시스템을 마운트하거나 다시 마운트합니다. 슬롯 설정은 설정이 적용된 후에 생성되는 RPC 전송에 적용됩니다.
방법 2 (권장): /etc/modprobe.d/의 모듈 옵션
모듈 매개변수는 부팅 후 첫 번째 NFS 사용 시 sunrpc가 로드될 때 적용됩니다. 이러한 설정은 재부팅 시에도 유지되므로 부팅 시 sysctl 구성이 필요하지 않습니다.
/etc/modprobe.d/sunrpc.conf를 만듭니다.options sunrpc tcp_slot_table_entries=128 tcp_max_slot_table_entries=128
배포판에서 modprobe 변경 후 initramfs를 다시 빌드해야 하는 경우(모듈이 initramfs에 있는 경우 RHEL에서 일반적임) initramfs를 다시 빌드합니다. 자세한 내용은 Linux 공급업체 문서를 참고하세요.
활성 NFS 마운트가 없고 런북에서 허용하는 경우에만 재부팅하거나
sunrpc를 언로드하고 다시 로드합니다.sunrpc가 로드되고 의도한 값이 설정되었는지 확인합니다.cat /proc/sys/sunrpc/tcp_slot_table_entries cat /proc/sys/sunrpc/tcp_max_slot_table_entries
NetApp Volumes 내보내기를 마운트하거나 다시 마운트합니다.
NFSv4.1
다음 섹션에서는 NFSv4.1 세션 협상이 작동하는 방식을 설명하고 성능 최적화 예를 제공하며 세션 슬롯 한도를 구성하는 방법을 설명합니다.
세션 협상
NFSv4.1은 클라이언트와 서버 간에 세션을 설정합니다. 클라이언트와 서버는 지원되는 두 값 중 더 낮은 값을 선택하여 최대 미해결 명령어 수 (max_reqs)를 협상합니다.
NetApp Volumes NFSv4.1 서버: 세션당 180개의 명령어
Linux 클라이언트 기본값: 64 (
max_session_slots)협상된 세션: 클라이언트 및 서버 값의 최솟값으로, 기본 클라이언트의 경우 64인 경우가 많습니다.
서버에 대한 각 TCP 연결은 최대 128개의 미해결 NFS 명령어를 지원합니다.
기본값인 64개의 세션 슬롯과 단일 연결을 사용하면 동시 실행이 64로 제한됩니다. 연결 간에 더 많은 세션 슬롯을 사용하려면 Kerberos가 아닌 마운트에만 nconnect=2 이상을 사용합니다. 마운트 옵션에 대한 자세한 내용은
Linux NFS 마운트 옵션을 참고하세요.
예 1: 기본 64개 세션 슬롯, nconnect 없음
연결 1개
세션에 대한 최대 64개의 미해결 명령어
예 2: 64개 세션 슬롯, nconnect=2
세션은 총 64개의 슬롯으로 제한되며, 이는 두 연결로 분할되거나 연결당 약 32개입니다.
이 구성은 총 동시 실행을 늘리지 않고 연결당 대기열 깊이를 낮춰 지연 시간을 개선합니다.
예 3: max_session_slots=180, nconnect 없음
세션은 180개의 명령어를 허용하며 하나의 연결은 128개의 미해결 작업으로 제한됩니다.
유효 한도는 128입니다.
예 4: max_session_slots=180, nconnect=2
세션은 두 연결에서 최대 180개의 명령어 또는 연결당 약 90개의 명령어를 사용할 수 있습니다.
이 구성은 세션 수준에서 단일 연결 128 상한선을 초과하는 데 필요합니다.
Kerberos 없이 NetApp Volumes에서 최대 NFSv4.1 동시 실행을 달성하려면 max_session_slots=180을 설정하고 nconnect=2 이상을 사용합니다.
워크로드로 이 구성을 테스트합니다.
NFSv4.1의 최대 세션 슬롯 설정
/etc/modprobe.d/nfsclient.conf를 만듭니다.options nfs max_session_slots=180
클라이언트를 재부팅합니다.
NFSv4.1 마운트가 하나 이상 있는 경우 구성을 확인합니다.
systool -v -m nfs
출력에
max_session_slots가 표시되는지 확인합니다.
이러한 변경사항을 적용하려면 표준 Linux NFS 클라이언트 패키징에서 재부팅해야 합니다. 이에 따라 유지보수를 계획합니다.
멀티 클라이언트 및 대용량 볼륨
여러 VM, 하나의 볼륨 IP:
sunrpc.tcp_max_slot_table_entries클라이언트당 줄입니다.여러 IP가 있는 대용량 볼륨: 슬롯 한도는 클라이언트-IP 연결당 적용됩니다. 가능한 경우 엔드포인트 간에 클라이언트를 분산합니다. 자세한 내용은 여러 스토리지 엔드포인트로 대용량 볼륨 연결을 참고하세요.