5. 문제해결
5.1. 환경
5.1.1 NIC 설정
5.1.1.1 NIC 설정 확인
- 증상
- NIC의 속도 설정가 스펙보다 낮은 값이 나올 경우
- 원인
NIC의 Speed 설정이 스펙보다 낮게 설정
확인 명령어
Code Block [root@proxy1 drbd.d]# ethtool p4p1 <- device 이름이 p4p1
- 출력 결과
Code Block title ethtool 출력 결과 collapse true [root@proxy1 drbd.d]# ethtool p4p1 Settings for p4p1: Supported ports: [ FIBRE ] Supported link modes: 10000baseT/Full Supported pause frame use: Symmetric Supports auto-negotiation: No Supported FEC modes: Not reported Advertised link modes: Not reported Advertised pause frame use: No Advertised auto-negotiation: No Advertised FEC modes: Not reported Speed: 10000Mb/s Duplex: Full Port: Direct Attach Copper PHYAD: 0 Transceiver: external Auto-negotiation: off Supports Wake-on: g Wake-on: g Current message level: 0x0000000f (15) drv probe link timer Link detected: yes [root@proxy1 drbd.d]#
- 확인에 사용한 NIC의 스펙이 10G이므로 Speed 항목이 10000Mb/s (10G)로 올바르게 설정되어 있는지 확인합니다.
- NIC의 속도 설정가 스펙보다 낮은 값이 나올 경우
5.1.1.2 NIC 성능 최적화
- 증상
- drbdsim으로 측정한 DRX 대역폭이 서버의 네트워크 대역폭 지표와 차이가 발생
- 10G NIC간의 대역폭이 6~7G로 낮게 측정
- 성능 튜닝이 확인된 NIC
- Intel X520-DA2
- 해결
- 링크 : /wiki/spaces/QA/pages/725254228
- Windows
- Windows끼리의 NIC 대역폭이 6~7G에서 약 10G로 향상
- 드라이버 다운로드 : https://downloadcenter.intel.com/ko/download/22283/Ethernet–?product=68673
- 장치 관리자 → 고급 → 프로파일 → "낮은 대기시간 설정"
전원 옵션 → 고성능 설정
- 실행 → gpedit.msc → 컴퓨터 구성 → 관리 템플릿 → QoS 패킷스케쥴러 → 예약 대역폭 제한 → 사용안함
설정 후 적용(update) 명령어
Code Block C:\Users\dgkim>gpupdate /force
- Windows
- drbdsim으로 측정한 DRX 대역폭이 서버의 네트워크 대역폭 지표와 차이가 발생
- Linux
최신의 Linux 는 별다른 설정없이도 10G 의 성능을 내며, 성능이 미비할 경우 튜닝을 한다.
드라이버 빌드 및 적용
Code Block title 리눅스 Intel X520-DA2 설치 collapse true gcc 설치 yum -y install gcc 커널 소스 설치 (OS 와 동일한 버전) yum install /tmp/kernel-devel-3.10.0-693.el7.x86_64.rpm 압축 해제 및 커널 모듈 빌드 cd /pkg tar xvfz ixgbe-5.3.6.tar.gz cd ixgbe-5.3.6/src make install [root@proxy4 src]# make install make[1]: Entering directory `/usr/src/kernels/3.10.0-693.el7.x86_64' CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_main.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_api.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_common.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_dcb.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_dcb_82598.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_dcb_82599.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_ethtool.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_lib.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_mbx.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_sriov.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_param.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_phy.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_procfs.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_82598.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_82599.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_x540.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_x550.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_dcb_nl.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_debugfs.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_fcoe.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_ptp.o CC [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe_sysfs.o CC [M] /pkg/driver/ixgbe-5.3.6/src/kcompat.o LD [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe.o Building modules, stage 2. MODPOST 1 modules CC /pkg/driver/ixgbe-5.3.6/src/ixgbe.mod.o LD [M] /pkg/driver/ixgbe-5.3.6/src/ixgbe.ko make[1]: Leaving directory `/usr/src/kernels/3.10.0-693.el7.x86_64' Copying manpages... Installing modules... make[1]: Entering directory `/usr/src/kernels/3.10.0-693.el7.x86_64' INSTALL /pkg/driver/ixgbe-5.3.6/src/ixgbe.ko Can't read private key DEPMOD 3.10.0-693.el7.x86_64 make[1]: Leaving directory `/usr/src/kernels/3.10.0-693.el7.x86_64' Running depmod... 바이너리 파일 확인 /lib/modules/`uname -r`/updates/drivers/net/ethernet/intel/ixgbe/ixgbe.ko 기존드라이버 정보 확인 modinfo ixgbd | grep -i version version: 4.4.0-k-rh7.4 커널모듈 로딩 modprobe <ixgbe> [parameter=port1_value,port2_value] 신규 드라이버 정보 확인 modinfo ixgbd | grep -i version version: 5.3.6 커널모듈 드라이버 부팅시 로딩 설정 dracut --force ethtool -C p4p1 adaptive-tx on ethtool -C p4p1 adaptive-rx on ethtool -C p4p2 adaptive-tx on ethtool -C p4p2 adaptive-rx on tuned유틸 설치 yum install tuned tuned 설정 tuned-adm profile latency-performance
- 기타
- 위 튜닝을 했음에도 Windows ↔ Linux는 약 8~9G 성능밖에 나오지 않는데 정확한 원인은 알 수 없다.
5.1.2 네트워크 Bandwidth 확인
노드가 연결된 네트워크 환경의 Bandwidth를 확인해서 NIC의 성능을 낼 수 있는지 확인합니다.
- iperf3
- NIC
- Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)
명령어
Code Block <로컬> [root@proxy1 drbd.d]# iperf3 -p 7795 -c 100.60.211.252 <원격> [root@proxy2 drbd.d]# iperf3 -p 7795 -s
실행결과
Code Block title iperf3 로컬 결과 collapse true < 로컬 출력 > [root@proxy1 drbd.d]# iperf3 -p 7795 -c 100.60.211.252 Connecting to host 100.60.211.252, port 7795 [ 4] local 100.60.211.251 port 46434 connected to 100.60.211.252 port 7795 [ ID] Interval Transfer Bandwidth Retr Cwnd [ 4] 0.00-1.00 sec 1.10 GBytes 9.43 Gbits/sec 6 522 KBytes [ 4] 1.00-2.00 sec 1.10 GBytes 9.42 Gbits/sec 3 527 KBytes [ 4] 2.00-3.00 sec 1.09 GBytes 9.39 Gbits/sec 1 551 KBytes [ 4] 3.00-4.00 sec 1.10 GBytes 9.41 Gbits/sec 0 561 KBytes [ 4] 4.00-5.00 sec 1.09 GBytes 9.39 Gbits/sec 0 578 KBytes [ 4] 5.00-6.00 sec 1.10 GBytes 9.42 Gbits/sec 0 592 KBytes [ 4] 6.00-7.00 sec 1.10 GBytes 9.41 Gbits/sec 0 602 KBytes [ 4] 7.00-8.00 sec 1.10 GBytes 9.42 Gbits/sec 0 634 KBytes [ 4] 8.00-9.00 sec 1.10 GBytes 9.42 Gbits/sec 0 687 KBytes [ 4] 9.00-10.00 sec 1.10 GBytes 9.42 Gbits/sec 0 775 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth Retr [ 4] 0.00-10.00 sec 11.0 GBytes 9.41 Gbits/sec 10 sender [ 4] 0.00-10.00 sec 11.0 GBytes 9.41 Gbits/sec receiver iperf Done. [root@proxy1 drbd.d]# < 원격 출력 > [root@proxy2 drbd.d]# iperf3 -p 7795 -s ----------------------------------------------------------- Server listening on 7795 ----------------------------------------------------------- Accepted connection from 100.60.211.251, port 46432 [ 5] local 100.60.211.252 port 7795 connected to 100.60.211.251 port 46434 [ ID] Interval Transfer Bandwidth [ 5] 0.00-1.00 sec 1.06 GBytes 9.07 Gbits/sec [ 5] 1.00-2.00 sec 1.10 GBytes 9.42 Gbits/sec [ 5] 2.00-3.00 sec 1.09 GBytes 9.39 Gbits/sec [ 5] 3.00-4.00 sec 1.10 GBytes 9.41 Gbits/sec [ 5] 4.00-5.00 sec 1.09 GBytes 9.39 Gbits/sec [ 5] 5.00-6.00 sec 1.10 GBytes 9.41 Gbits/sec [ 5] 6.00-7.00 sec 1.10 GBytes 9.41 Gbits/sec [ 5] 7.00-8.00 sec 1.10 GBytes 9.41 Gbits/sec [ 5] 8.00-9.00 sec 1.10 GBytes 9.41 Gbits/sec [ 5] 9.00-10.00 sec 1.10 GBytes 9.42 Gbits/sec [ 5] 10.00-10.04 sec 40.9 MBytes 9.40 Gbits/sec - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bandwidth [ 5] 0.00-10.04 sec 0.00 Bytes 0.00 bits/sec sender [ 5] 0.00-10.04 sec 11.0 GBytes 9.37 Gbits/sec receiver -----------------------------------------------------------
NIC 10G 측정 결과
- 송신 : 약 9.42 Gbps
- 수신 : 약 9.41 Gbps
- NIC
5.2. 구성
5.3. 상태
5.3.1 물리메모리
BAB는 물리메모리에 할당되어야 최대의 성능을 발휘할 수 있습니다.
5.3.1.1 물리메모리의 사용 여부 확인 방법
확인 명령어
Code Block [root@proxy1 drbd.d]# cat /proc/`pidof drx`/status
- 원인
- 사용 가능한(Free) 물리 메모리가 부족할 경우에 Kernel이 자동으로 SWAP영역에 할당한다.
- 출력 결과
Code Block title DRX process status collapse true [root@proxy1 drbd.d]# cat /proc/`pidof drx`/status Name: drx State: S (sleeping) Tgid: 128901 Ngid: 128901 Pid: 128901 PPid: 1 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 FDSize: 64 Groups: VmPeak: 4623456 kB VmSize: 4623456 kB VmLck: 0 kB VmPin: 0 kB VmHWM: 2197636 kB VmRSS: 2197636 kB RssAnon: 2192356 kB RssFile: 5280 kB ...생략...
- 출력 확인
- VmRSS는 커널이 프로세스에 할당한 물리 메모리 사이즈를 나타냅니다. 리소스의 memlimit에 설정한 사이즈보다 작으면 SWAP영역을 사용하고 있는 것입니다.