인텔 로고인텔 ® 이더넷 700 시리즈
Linux 성능 튜닝 가이드
NEX 클라우드 네트워킹 그룹(NCNG)
개정판 1.2
2024년 XNUMX월

개정 내역

개정 날짜 댓글
1.2 2024년 XNUMX월 · 추가 전원 관리 지침이 추가되었습니다.
· Intel* Turbo Boost가 추가되었습니다.
· 네트워크 장치 백로그가 추가되었습니다.
· 플랫폼별 구성 및 튜닝이 추가되었습니다.
· 4세대 Intel* %eon* 확장 가능 프로세서가 추가되었습니다.
· AMD EPYC가 추가되었습니다.
· 시스템 하드웨어 기능 검사가 업데이트되었습니다.
· iPerf2 업데이트.
· iPerf3 업데이트.
· Tx/Rx 대기열이 업데이트되었습니다.
· 업데이트된 인터럽트 조절 기능.
· 업데이트된 반지 사이즈.
· 업데이트된 플랫폼 튜닝(i40e 비특정)
· BIOS 설정이 업데이트되었습니다.
· 업데이트된 C-State 제어.
· CPU 주파수 조정이 업데이트되었습니다.
· 업데이트된 애플리케이션 설정.
· 운영 체제/커널 설정이 업데이트되었습니다.
· IP 전달이 업데이트되었습니다.
· 저지연성 업데이트.
2023년 XNUMX월 이 문서의 변경 사항은 다음과 같습니다.
· 관련 참조가 추가되었습니다.
· DDP 패키지가 제대로 로드되는지 확인하는 기능이 추가되었습니다.
· iPerf2가 추가되었습니다.
· iPerf3가 추가되었습니다.
· netperf가 추가되었습니다.
· IRQ 친화성이 업데이트되었습니다.
· Tx/Rx 대기열이 추가되었습니다.
· 업데이트된 반지 사이즈.
· 점보 프레임이 추가되었습니다.
· 어댑터 본딩이 추가되었습니다.
· Intel svr-info 도구가 추가되었습니다.
1.0 2016년 XNUMX월 최초 릴리스(Intel 공개).

소개

이 가이드는 Linux 환경에서 Intel® 이더넷 700 시리즈 NIC를 사용하여 최적의 네트워킹 성능을 위한 환경 튜닝 지침을 제공합니다. 네트워크 성능을 향상시킬 수 있는 하드웨어, 드라이버, 운영 체제 조건 및 설정에 중점을 둡니다. 네트워킹 성능은 다양한 외부 요인의 영향을 받을 수 있으며, 이 가이드에서는 가장 흔하고 심각한 외부 요인만 다룹니다.
1.1 관련 참조

초기 체크리스트

2.1 드라이버/펌웨어 버전 업데이트
ethtool -i ethx를 사용하여 드라이버/펌웨어 버전을 확인하세요.
필요에 따라 다음 내용을 업데이트하세요.

2.2 README를 읽어보세요
알려진 문제를 확인하고 README에서 최신 구성 지침을 얻으세요. file i40e 소스 패키지에 포함되어 있습니다.
2.3 PCI Express(PCIe) 슬롯이 x8인지 확인하세요
일부 PCIe x8 슬롯은 실제로 x4 슬롯으로 구성됩니다. 이러한 슬롯은 듀얼 포트 및 쿼드 포트 장치에서 전체 라인 속도에 대한 대역폭이 부족합니다. 또한 PCIe v3.0 지원 어댑터를 PCIe v2.x 슬롯에 넣으면 전체 대역폭을 얻을 수 없습니다. 소프트웨어 장치 드라이버는 이 상황을 감지하고 시스템 로그에 다음 메시지를 기록합니다.
이 카드에 사용 가능한 PCI-Express 대역폭은 최적의 성능을 위해 충분하지 않습니다. 최적의 성능을 위해서는 x8 PCI-Express 슬롯이 필요합니다.
이 오류가 발생하면 어댑터를 실제 PCIe v3.0 x8 슬롯으로 옮겨 문제를 해결하세요.
2.4 시스템 하드웨어 기능 확인
10Gbps, 25Gbps, 40Gbps 이더넷에는 몇 가지 최소 CPU 및 시스템 요구 사항이 있습니다. 일반적으로 플랫폼에 맞는 최신 서버 클래스 프로세서와 최적의 메모리 구성이면 충분하지만 요구 사항은 작업 부하에 따라 다릅니다. 모든 메모리 채널이 채워져야 하고 BIOS에서 메모리 성능 모드가 활성화되어야 합니다. CPU와 메모리 구성이 작업 부하에 필요한 수준의 네트워크 성능을 지원할 수 있는지 확인하십시오.
메모
XL710은 40GbE 컨트롤러입니다. 이 컨트롤러를 사용하는 2 x 40GbE 어댑터는 2 x 40GbE가 아닌, 활성 백업 포트가 있는 1 x 40GbE로 설계되었습니다. 두 포트를 모두 사용하는 회선 속도 트래픽을 사용하려고 하면 내부 스위치가 포화 상태가 되어 두 포트 간의 총 대역폭이 최대 XNUMXGbps로 제한됩니다.
2.4.1 커널 부팅 매개변수
BIOS에서 Intel® Virtualization Technology for Directed I/O(Intel® VT-d)가 활성화된 경우, Intel은 최적의 호스트 네트워크 성능을 위해 IOMMU를 패스스루 모드로 설정할 것을 권장합니다. 이렇게 하면 호스트 트래픽의 DMA 오버헤드를 제거하는 동시에 가상 머신(VM)에서 Intel® VT-d의 이점을 계속 활용할 수 있습니다. 이는 커널 부팅 매개변수에 다음 행을 추가하여 수행됩니다. fommu-pt.
2.5 DDP 패키지가 제대로 로드되는지 확인하세요
140ea 및 140eb 기반 드라이버는 동적 장치 개인화(DDP)를 직접 지원하지 않습니다. 700 시리즈 장치에서 DDP를 사용하려면 DDP 전문가가 필요합니다.file testpmd 애플리케이션을 사용하여 적용할 수 있습니다.
DDP pro에 대한 자세한 내용은files, 그리고 DDP 프로를 적용하는 방법file 700 시리즈 장치에서 testpmd를 사용하는 경우 Intel® 이더넷 700 시리즈 동적 장치 개인화(DDP) 기술 가이드를 참조하세요.
DDP 프로가 있는지 확인하려면file 성공적으로 로드되었습니다:
testpmd> ddp get list 0 Profile 숫자는: 1
메모
프로라면file 숫자가 0이면 DDP 패키지가 로드되지 않은 것입니다. DDP 패키지 로드 오류가 발생하면 장치가 안전 모드로 기본 설정되고 여러 성능 기능을 사용할 수 없습니다. DDP 패키지 로드 관련 오류가 발생하면 성능 문제가 발생할 수 있습니다. 문제 해결 단계는 Inte/* Ethernet 700 시리즈 동적 장치 개인 설정(DDP) 기술 가이드를 참조하십시오.

기준 성능 측정 및 튜닝 방법론

3.1 네트워크 성능 벤치마크
튜닝 연습을 시작하기 전에 네트워크 성능에 대한 좋은 기준 측정을 하는 것이 중요합니다. 일반적으로 특정 애플리케이션/워크로드 성능에 대한 초기 측정을 얻는 것 외에도 표준 네트워크 성능 벤치마크를 사용하여 네트워크 장치가 양호한 상태인지 확인하는 것이 좋습니다.
단일 시스템 최적화의 경우 netperf 또는 iperf와 NetPIPE는 모두 연결에 스트레스를 가하고 성능 문제를 진단할 수 있는 견고한 오픈소스 무료 도구입니다.
Netperf는 처리량과 지연 시간 테스트 모두에 강력합니다. NetPIPE는 지연 시간에 특화된 도구이지만 어떤 환경에서도 컴파일이 가능합니다.
메모
netperf의 TCP_RR 테스트는 트랜잭션/초 단위로 지연 시간을 반환합니다. 이는 왕복 횟수입니다. 단방향 지연 시간은 다음 방정식을 사용하여 계산할 수 있습니다.
대기 시간(usec) = (1⁄2) / [거래/초] * 1,000,000
3.1.1 아이퍼프2
인텔은 대부분의 벤치마킹 상황에서 iperf2보다 iperf3를 권장합니다. 사용 편의성과 단일 애플리케이션 인스턴스 내 여러 스레드 지원이 뛰어나기 때문입니다. 인텔은 2G 연결에는 -P 옵션을 사용하여 4~25개의 스레드, 4G 연결에는 약 6~40개의 스레드를 사용할 것을 권장합니다.

  • 클라이언트에서 서버로 단방향 트래픽을 실행하려면: 서버 명령 examp파일: iperf2 -s
    클라이언트 명령 examp파일: iperf2 -c -피
  • 클라이언트에서 서버로(또는 그 반대로) 양방향 트래픽을 실행하려면: 서버 명령 example: iperf2 –s –p
    클라이언트 명령 examp르 :
    iperf2 -c -피 -피 -–전이중 또는
    iperf2 -c -피 -피 -디

메모
iperf2의 –full-duplex 및 -d 옵션은 사용자가 양방향 테스트를 수행할 수 있도록 합니다. 그러나 –full-duplex 옵션은 특히 전이중 테스트에 중점을 둡니다.
메모
여러 서버 포트에서 iperf2를 테스트할 때 server 명령에 -d 플래그를 추가하여 동일한 터미널 창에서 모든 서버 세션을 백그라운드에서 실행할 수 있습니다. -d 플래그는 server 명령이 스크립트의 for 루프 안에 포함되어 있을 때도 사용할 수 있습니다.
메모
단일 스트림/스레드(예: )로 네트워크 처리량 테스트를 실행할 때ample: P1), AMD 프로세서는 예상 처리량을 제공하지 못할 수 있습니다. 특히 대역폭이 더 높은 NIC(속도가 대역폭 >= 25G인 경우)의 경우 더욱 그렇습니다. 결과적으로 더 높은 처리량을 달성하려면 특정 코어에 대한 애플리케이션 고정이 필요합니다. 22페이지의 애플리케이션 설정을 참조하세요.
3.1.2 아이퍼프3
iperf3를 사용하는 경우 이점을 얻으려면 응용 프로그램의 여러 인스턴스가 필요합니다.tag멀티스레드, RSS 및 하드웨어 대기열 중 하나입니다. 인텔은 2G 연결의 경우 4~25개의 애플리케이션 세션, 4G 연결의 경우 약 6~40개의 세션으로 실행할 것을 권장합니다. 각 세션은 -p 옵션을 사용하여 고유한 TCP 포트 값을 지정해야 합니다.

  • 클라이언트에서 서버로 단방향 트래픽을 실행하려면:
    서버 명령 examp르 :
    iperf3 -s -p
    클라이언트 명령 examp르 :
    iperf3 -c -피
  • 클라이언트에서 서버로(또는 그 반대로) 양방향 트래픽을 실행하려면:
    서버 명령 examp르 :
    iperf3 –s –p
    클라이언트 명령 examp파일: iperf3 -c -피 -피 –-비디르
  • iperf3의 여러 인스턴스(스레드)를 시작하려면 for 루프를 사용하여 스레드를 TCP 포트에 매핑하고 &를 사용하여 백그라운드에서 iperf3를 실행하여 여러 프로세스를 병렬로 생성하는 것이 좋습니다.
    서버 명령 example, 4개의 스레드 시작: port=""; for i in {0..3}; do port=520$i; bash -c "iperf3 -s -p $port &"; done; 클라이언트 명령 example, 4개의 스레드 시작 – 테스트 포트 전송 = ""; i in {0..3}에 대해; do port = 520 $i; bash -c "iperf3 -c $serverIP -p $port &"; done; 클라이언트 명령 example, 4개의 스레드 시작 – 테스트 포트 수신=""; for i in {0..3}; do port=520$i; bash -c "iperf3 -R -c $serverIP -p $port &"; done; 40G 연결의 경우 for 루프를 늘려 최대 6개의 인스턴스/스레드 생성

메모
단일 스트림/스레드(예: )로 네트워크 처리량 테스트를 실행할 때ample: P1), AMD 프로세서는 특히 더 높은 대역폭에서 예상 처리량을 제공하지 못할 수 있습니다.
NIC(속도가 25G 이상 대역폭인 경우). 따라서 더 높은 처리량을 얻으려면 특정 코어에 애플리케이션을 고정해야 합니다. 22페이지의 애플리케이션 설정 및 26페이지의 AMD EPYC를 참조하십시오.
3.1.3 넷퍼프
netperf 도구는 처리량과 지연 시간 테스트에 모두 적합한 도구입니다.

  • netperf의 TCP_STREAM 테스트는 장치의 처리량을 측정합니다. 서버 명령 examp파일: netserver 클라이언트 명령 examp파일: netperf -t TCP_STREAM -l 30 -H
  • netperf의 TCP_RR 테스트는 초당 트랜잭션 수(transactions/sec)로 지연 시간을 반환합니다. 이는 왕복 횟수입니다. x가 장치의 로컬 CPU인 경우 -T x,x 옵션을 사용하는 것이 좋습니다. 단방향 지연 시간은 다음과 같이 계산할 수 있습니다. Latency(usec)=(1⁄2)/[Transactions/sec]*1,000,\ 서버 명령 example: 넷서버
    클라이언트 명령 examp파일: netperf -t TCP_RR -l 30 -H -T x,x
  • netperf의 여러 인스턴스(스레드)를 시작하려면 for 루프를 사용하여 스레드를 TCP 포트에 매핑하고 &를 사용하여 netperf를 백그라운드에서 실행하여 여러 프로세스를 병렬로 생성하는 것이 좋습니다.
    서버 명령 example, 8개의 스레드 시작:
    port=""; i in {0..7}에 대해 port=520$i를 실행합니다. bash -c "netserver -L $serverIP -p $port &"; 완료;
    클라이언트 명령 example, 8개의 스레드 시작: port=""; for i in {0..7}; do port=520$i; bash -c "netperf -H $serverIP -p $port -t TCP_STREAM -l 30 &"; done;

3.2 튜닝 방법론
한 번에 하나의 튜닝 변경에 집중하여 각 변경이 테스트에 어떤 영향을 미치는지 파악하세요. 튜닝 프로세스에서 체계적일수록 성능 병목 현상의 원인을 식별하고 해결하기가 더 쉬워집니다.

i40e 드라이버 설정 튜닝

4.1 IRQ 친화성
다양한 네트워크 대기열에 대한 인터럽트가 다양한 CPU 코어에 친화성을 갖도록 IRQ 친화성을 구성하면 성능, 특히 멀티스레드 처리량 테스트에 큰 영향을 미칠 수 있습니다.
IRQ 선호도를 구성하려면 irqbalance를 중지한 다음 i40e 소스 패키지의 set_irq_affinity 스크립트를 사용하거나 대기열을 수동으로 고정하세요. 대기열 고정을 활성화하려면 사용자 공간 IRQ 밸런서를 비활성화하세요.

  • systemctl irqbalance 비활성화
  • systemctl irqbalance 정지
    i40e 소스 패키지의 set_irq_affinity 스크립트 사용(권장):
  • 모든 코어를 사용하려면:
    [i40e패키지 경로]/scripts/set_irq_affinity -X 모든 ethX
  • 로컬 NUMA 소켓의 코어만 사용하려면 [path-to-i40epackage]/scripts/set_irq_affinity -X local ethX를 사용합니다.
  • 코어 범위를 선택할 수도 있습니다. 타이머 작업을 실행하므로 cpu0은 사용하지 마세요. [path-to-i40epackage]/scripts/set_irq_affinity 1-2 ethX

메모
-x 옵션을 지정하면 affinity 스크립트는 고정 프로세스의 일부로 XPS(Transmit Packet Steering)를 활성화합니다. XPS가 활성화된 경우, Intel은 XPS를 사용하는 커널 밸런서가 예측 불가능한 성능을 유발할 수 있으므로 irqbalance를 비활성화할 것을 권장합니다. -X 옵션을 지정하면 affinity 스크립트는 XPS를 비활성화합니다. XPS를 비활성화하고 대칭 큐를 활성화하는 것은 Tx 및 Rx 트래픽이 동일한 큐 쌍에서 처리될 때 최상의 성능을 달성하는 워크로드에 유용합니다.
Linux에서 대칭 대기열을 구성하려면 지원되는 네트워크 어댑터에 대해 대칭 수신 대기열(Rx) 및 대칭 전송 대기열(Tx)을 활성화하기 위해 네트워크 인터페이스 드라이버 매개변수를 조정해야 합니다.
메모

  • 대칭 큐는 고급 네트워킹 기능이며, 모든 700 시리즈 네트워크 어댑터나 드라이버가 이를 지원하는 것은 아닙니다.
  • 대칭 대기열을 구성하기 전에 필요한 드라이버와 하드웨어 지원이 있는지 확인하세요.

대칭 대기열을 구성하려면 다음과 같은 일반 단계를 따르세요.

  1. 네트워크 인터페이스 구성 편집 File: 텍스트 편집기를 사용하세요(예:amp네트워크 인터페이스 구성을 편집하려면 le, vi, nano 또는 gedit를 사용합니다. file. 그 file 일반적으로 /etc/sysconfig/network-scripts/ 디렉토리에 위치하며 ifcfg-ethX와 같은 이름을 갖습니다. 여기서 ethX는 네트워크 인터페이스의 이름입니다.
  2. 대칭 대기열 매개변수를 추가합니다. 네트워크 인터페이스 구성에 다음 줄을 추가합니다. file: ETHTOOL_OPTS="rx-대기열 8 tx-대기열 8"
  3. 네트워크 서비스를 다시 시작합니다.
    변경 사항을 적용한 후 네트워크 서비스를 다시 시작하여 새 구성을 적용합니다. sudo systemctl restart network

수동으로:

  • numactl –hardware lscpu를 사용하여 각 노드에 연결된 프로세서를 찾습니다.
  • 각 프로세서의 비트 마스크를 찾으세요.
  • 노드 0에 대해 코어 11-0을 가정합니다: [1,2,4,8,10,20,40,80,100,200,400,800]
  • 할당되는 포트에 할당된 IRQ를 찾으세요: grep ethX /proc/interrupts 및 IRQ 값을 기록하세요.ample, 181개 벡터가 로드된 경우 192-12.
  • SMP 선호도 값을 해당 IRQ 항목에 에코합니다. 각 IRQ 항목에 대해 이 작업을 수행해야 합니다. echo 1 > /proc/irq/181/smp_affinity echo 2 > /proc/irq/182/smp_affinity echo 4 > /proc/irq/183/smp_affinity IRQ 선호도 표시:
  • 모든 코어에 대한 IRQ 친화도를 표시하려면: /스크립트/set_irq_affinity -s ethX
  • 로컬 NUMA 소켓의 코어만 표시하려면: /scripts/set_irq_affinity -s 로컬 ethX
  • 또한 다양한 코어를 선택할 수 있습니다. /scripts/set_irq_affinity -s 40-0-8,16 ethX

메모
set_irq_affinity 스크립트는 i40e 드라이버 버전 2.16.11 이상에서 -s 플래그를 지원합니다.
4.2 Tx/Rx 대기열
드라이버가 초기화할 때 각 이더넷 포트에 대해 활성화한 기본 대기열 수는 플랫폼에서 사용 가능한 총 CPU 수와 같습니다. 이는 많은 플랫폼과 워크로드 구성에 적합합니다. 그러나 코어 수가 많고/또는 이더넷 포트 밀도가 높은 플랫폼에서는 이 구성으로 인해 리소스 경합이 발생할 수 있습니다. 따라서 어떤 경우에는 시스템의 각 포트에 대한 기본값을 수정해야 할 수도 있습니다.
Tx/Rx 대기열의 기본 수는 특정 모델 및 드라이버 버전에 따라 다를 수 있습니다. 대기열 수는 아래에 나열된 ethtool -L 명령을 사용하여 조정할 수 있습니다.
메모
이러한 경우, 인텔은 각 포트의 기본 대기열 수를 어댑터 포트에 로컬로 연결된 NUMA 노드에서 사용 가능한 CPU 수 이하로 줄이는 것을 권장합니다. 경우에 따라 포트 수가 많은 구현 환경에서 리소스 균형을 맞추려고 할 때 이 수를 더 줄여야 할 수도 있습니다.
대기열 구성을 수정하려면:
다음 예ample는 포트를 32개의 Tx/Rx 대기열로 설정합니다: ethtool -L ethX combined 32
Examp파일 출력:
ethtool -l ethX
ethX에 대한 채널 매개변수: 사전 설정된 최대값:
수신: 96
텍사스: 96
기타 : 1
합산: 96
현재 하드웨어 설정:
수신: 0
텍사스: 0
기타 : 1
합산: 32
4.3 인터럽트 조절
적응형 인터럽트 조절은 기본적으로 켜져 있으며, 낮은 CPU 사용률과 높은 성능 사이에서 균형 잡힌 접근 방식을 제공하도록 설계되었습니다. 그러나 사용 사례에 맞게 인터럽트 설정을 수동으로 조정해 볼 수 있습니다.
0~235마이크로초 범위는 초당 4,310~250,000건의 인터럽트를 효과적으로 처리할 수 있도록 합니다. rx-μsecs-high 값은 동일한 ethtool 명령에서 rx-μsecs 및 tx-μsecs와 독립적으로 설정할 수 있으며, 적응형 인터럽트 조절 알고리즘과도 무관합니다. 기본 하드웨어는 2마이크로초 단위의 세분성을 지원하므로, 인접한 값들이 동일한 인터럽트 발생률을 나타낼 수 있습니다.

  • 적응형 인터럽트 조절을 끄려면: ethtool -C ethX adaptive-rx off adaptive-tx off
  • 적응형 인터럽트 조절을 켜려면: ethtool -C ethX adaptive-rx on adaptive-tx on

일반적인 튜닝을 시작하기에 좋은 기준은 84μs, 즉 초당 약 12000회의 인터럽트입니다. 트래픽 중에 rx_dropped 카운터가 실행 중이라면(ethtool -S ethX 사용), CPU 속도가 너무 느리거나, 어댑터 링 크기(ethtool -G)의 버퍼 용량이 부족하여 84μs 동안 패킷을 보관할 수 없거나, 인터럽트 발생률이 너무 낮을 가능성이 높습니다.

  • 인터럽트 간 인터럽트 조절을 84μs의 고정 인터럽트 속도(초당 12000회 인터럽트)로 설정하려면 다음을 실행합니다. ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 84 tx-usecs 84 CPU 사용률이 최대치에 도달하지 않았다면 다음으로 시도해 볼 값은 62μs입니다. 이 값은 CPU 사용량이 더 많지만 버퍼 처리 속도가 더 빠르고 필요한 디스크립터(링 크기, ethtool -G)가 더 적습니다.
  • 인터럽트 간 인터럽트 조절을 62usecs의 고정 인터럽트 속도(16000 인터럽트/초)로 설정합니다. ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 62 tx-usecs 62
    rx_dropped 카운터가 트래픽 중에 증가하면(ethtool -S ethX 사용) CPU가 너무 느리거나 어댑터 링 크기(ethtool -G)에서 버퍼가 충분하지 않거나 인터럽트 속도가 너무 낮을 수 있습니다. CPU 사용률이 최대가 아니면 ITR 값을 낮춰서 인터럽트 속도를 높일 수 있습니다. 이렇게 하면 CPU를 더 많이 사용하지만 버퍼를 더 빨리 서비스하고 필요한 디스크립터가 줄어듭니다(링 크기, ethtool -G).
    CPU 사용량이 100%인 경우 인터럽트 빈도를 높이는 것은 권장되지 않습니다. CPU 바운드 워크로드와 같은 특정 상황에서는 다른 애플리케이션에 더 많은 CPU 시간을 제공하기 위해 μs 값을 높이는 것이 좋습니다.
    낮은 지연 성능이 필요하거나 네트워크 처리에 사용할 수 있는 CPU가 많은 경우 인터럽트 조절을 완전히 비활성화하여 인터럽트가 가능한 한 빨리 발생할 수 있습니다.
  • 인터럽트 조절을 비활성화하려면 ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs 0 tx-usecs 0을 실행합니다.

메모
인터럽트 조절을 비활성화한 상태로 실행하면 각 큐의 인터럽트 발생률이 매우 높아질 수 있습니다. 인터럽트 발생률의 상한을 설정하려면 rx-usec-high 매개변수를 포함하는 것이 좋습니다. 다음 명령은 적응형 인터럽트 조절을 비활성화하고 수신 또는 송신이 완료되었음을 나타내기 전에 최대 5마이크로초의 시간을 허용합니다. 초당 최대 200,000개의 인터럽트를 발생시키는 대신, rx-usec-high 매개변수를 통해 초당 총 인터럽트 발생률을 50,000개로 제한합니다. # ethtool -C ethX adaptive-rx off adaptive-tx off rx-usecs-high 20 rx-usecs 5 txusecs 5 작업 부하에 맞는 최적의 값을 찾으려면 송신/수신/고우선순위 병합 타이머를 높게(80/100/150/200) 또는 낮게(25/20/10/5) 조정해 보세요.
4.4 반지 사이즈
ethtool -S ethX (rx_dropped, rx_dropped.nic)에서 rx_dropped 카운터가 표시되거나 여러 대기열이 활성화되어 캐시가 부족할 것으로 의심되는 경우, 링 크기를 기본값에서 조정해 보세요. 기본값은 512이고 최대값은 4096입니다.

  • 현재 값을 확인하려면: ethtool -g ethX
    버퍼링 부족으로 인해 현재 인터럽트 속도에서 성능이 저하되는 것으로 의심되는 경우, 먼저 최대값을 시도한 다음 최소값을 시도한 다음, 최적의 성능이 나올 때까지 이진 검색을 계속 진행합니다.
    캐시 부족이 의심되는 경우(활성 대기열이 많은 경우) 버퍼 크기를 기본값에서 줄이면 Intel® Data Direct I/O(Intel® DDIO)의 작동 효율을 높일 수 있습니다. Intel은 대기열당 128 또는 256을 시도할 것을 권장하며, rx_dropped 증가를 방지하기 위해 ethtool -C를 사용하여 인터럽트 빈도를 높여야 할 수도 있습니다.
  • 링 크기를 고정 값으로 설정하려면: ethtool -G eth12 rx 256 tx 256

메모
ethtool -S ethX|grep drop으로 발견된 Rx 패킷 삭제를 수정하려면 링 크기를 4096으로 늘리는 것을 고려하세요. 작업 부하에 가장 적합한 설정을 찾기 위해 실험해 보세요. 하지만 값이 높을수록 과도한 메모리 사용량에 주의하세요.
4.5 흐름 제어
계층 2 흐름 제어는 TCP 성능에 상당한 영향을 미칠 수 있으므로 대부분의 작업 부하에서 비활성화하는 것이 좋습니다. 단, 버스트 지속 시간이 길지 않은 버스트 트래픽은 예외일 수 있습니다.
흐름 제어는 기본적으로 비활성화되어 있습니다.

  • 흐름 제어를 활성화하려면: ethtool -A ethX rx on tx on
  • 흐름 제어를 비활성화하려면: ethtool -A ethX rx off tx off

메모
흐름 제어를 성공적으로 활성화하려면 흐름 제어가 가능한 링크 파트너가 있어야 합니다.
4.6 점보 프레임
예상되는 트래픽 환경이 대량의 데이터 블록을 전송하는 경우 점보 프레임 기능을 활성화하는 것이 유익할 수 있습니다. 점보 프레임 지원은 최대 전송 단위(MTU)를 기본값인 1500보다 큰 값으로 변경하여 활성화됩니다. 이를 통해 장치는 네트워크 환경 내에서 더 큰 패킷으로 데이터를 전송할 수 있습니다. 이 설정은 처리량을 개선하고 대규모 I/O 워크로드의 CPU 사용률을 줄일 수 있습니다. 그러나 소규모 패킷이나 지연에 민감한 워크로드에 영향을 미칠 수 있습니다.
메모
네트워크 환경 전반에 걸쳐 점보 프레임이나 더 큰 MTU 설정을 올바르게 구성해야 합니다.
ifconfig 명령을 사용하여 MTU 크기를 늘립니다. 예를 들어ample, 다음을 입력하십시오. 인터페이스 번호는 ifconfig입니다. MTU 9000 업
또는 다음과 같이 ip 명령을 사용할 수 있습니다: ip link set mtu 9000 dev IP 링크 설정 dev

플랫폼 튜닝(i40e 비특정)

5.1 BIOS 설정

  • 가상화 워크로드에 Intel® VT-d를 활성화합니다.
  • 하이퍼스레딩(논리 프로세서)은 성능에 영향을 미칠 수 있습니다. 작업 부하에 맞게 하이퍼스레딩을 켜거나 끄고 실험해 보세요.
  • 인텔® 터보 부스트를 사용하면 CPU 코어가 기본 주파수보다 더 높은 주파수에서 작동할 수 있습니다. 인텔® 터보 부스트를 활성화하면 여러 워크로드에서 성능이 향상되지만, 코어를 더 높은 주파수로 유지하기 위해 더 많은 전력을 소모합니다. 워크로드에 맞게 터보 부스트를 껐다 켜서 테스트해 보세요.

메모
플랫폼의 전체 CPU 사용률이 높을 경우 터보 주파수가 보장되지 않습니다. 전체 CPU 사용률이 증가함에 따라 코어 터보 주파수가 낮아집니다.
5.2 전원 관리
전원 관리가 성능에 영향을 미칠 수 있으며, 특히 대기 시간이 짧은 워크로드에서 그렇습니다. 성능이 전력 소비를 줄이는 것보다 더 중요한 경우, 인텔은 전원 관리의 효과를 제한하는 실험을 권장합니다. 운영 체제 도구, BIOS 설정, 커널 부팅 매개변수를 통해 전원 관리를 제한하는 다양한 방법이 있습니다. 환경에 맞는 최상의 방법과 수준을 선택하십시오.
5.2.1 C-상태 제어
C-상태 진입을 CO 또는 C1로 제한하면 성능이 향상되고 전력 사용률이 증가합니다.
CPU 패키지 C6 상태 항목을 비활성화하면 네트워크 성능이 향상될 수 있습니다. 그러나 이렇게 하면 전력 사용량이 증가합니다.
다음과 같은 옵션을 사용할 수 있습니다.

  • C-상태 진입을 동적으로 제어합니다.
    열려 있는
    /dev/cpu_dma_latency를 입력하고 허용되는 최대 지연 시간을 기록합니다.

메모
오픈 소스 커뮤니티에서 cpudmalatency.c라는 작은 프로그램을 다운로드하여 컴파일한 뒤 명령줄에서 실행하면 정확히 이 작업을 수행할 수 있습니다.
다음 예ample는 1μs의 웨이크 시간을 허용하므로 C5 항목인 cpudmalatency XNUMX &를 허용합니다.

  • 커널 부팅 설정에서 최대 C-상태를 제한합니다.
    Intel CPU의 경우: intel_idle.max_cstates=1
    Intel CPU가 아닌 경우: processor.max_cstates=1
  • cpupower 명령을 사용하여 CPU C6 상태를 확인하고 비활성화합니다. 확인: cpupower monitor 또는 cpupower idle-info
    C6 비활성화: cpupower idle-set -d3 또는
    C-States 비활성화: cpupower idle-set -D0

참고사항:

  1. 서버에 Intel® 4세대 Intel® Xeon® 확장 가능 프로세서가 있는 경우 CPU의 C-상태를 비활성화하십시오. 하이퍼스레딩이 활성화 또는 비활성화된 경우, 유휴 상태(-D0)를 비활성화하면 유휴 기간 동안 코어가 저전력 상태로 전환되는 것을 방지하고 CPU가 유휴 상태에서 활성 상태로 전환되는 데 걸리는 지연 시간을 줄일 수 있습니다.
  2. 인텔® 4세대 인텔® 제온® 스케일러블 프로세서의 전력 관리는 매우 공격적입니다. 코어가 저전력 상태로 전환되는 것을 방지하려면 사용 중인 코어 수를 줄여서 코어가 더 오래 활성 상태를 유지하도록 하세요(ethtool -L). 결합된 ). 또한, set irq affinity(대부분 -x local 또는 list of CPU cores 옵션 사용)를 사용하여 특정 코어에 인터럽트를 바인딩하고, tasket 또는 numactl을 사용하여 해당 코어에서 워크로드가 실행되도록 합니다. 이렇게 하면 코어를 활성 상태로 유지하고 인터럽트 처리를 최적화하여 성능을 향상시킬 수 있습니다.

C6 활성화:
cpupower 유휴 설정 -d3
C-States 활성화:
cpupower 유휴 설정 -E

  • 또 다른 방법은 성능 프로를 설정하기 위해 조정된 도구(많은 Linux 배포판에 포함됨)를 활용하는 것입니다.file. 이들 프로files는 여러 애플리케이션에서 성능에 영향을 줄 수 있는 여러 OS 설정을 수정합니다. 네트워크 처리량 프로file 대부분의 작업 부하가 개선됩니다.
    확인하다:
    튜닝-adm 활성화
    세트:
    튜닝-adm 프로file 네트워크 처리량
    메모
    위 명령을 실행하려면 Tuned 서비스가 실행 중이어야 합니다. Tuned 서비스를 확인/재시작하려면 systemctl status tuned systemctl restart tuned 명령을 사용하세요.
    다음을 커널 부팅 라인에 추가하여 모든 C-상태 항목을 허용하지 않을 수도 있습니다.
    유휴=투표
  • 시스템의 BIOS 전원 관리 설정을 통해 C-상태를 제한하면 성능에 문제가 생길 수 있습니다.file 사용 가능.
    turbostat이나 x86_energy_perf_policy와 같은 도구를 사용하여 전원 관리 설정을 확인하거나 설정할 수 있습니다.

5.2.2 PCIe 전원 관리
ASPM(Active-State Power Management)은 PCIe 링크가 활성 상태가 아닐 때 저전력 상태를 유지합니다. 이로 인해 PCIe 네트워크 장치의 지연 시간이 길어질 수 있으므로, 인텔은 지연 시간에 민감한 워크로드의 경우 ASPM을 비활성화할 것을 권장합니다. 커널 부팅 라인에 다음을 추가하여 ASPM을 비활성화하세요. pcie_aspm=off
5.2.3 CPU 주파수 확장
CPU 주파수 스케일링(또는 CPU 속도 스케일링)은 시스템 클록 속도를 즉석에서 조정하여 전력과 열을 절약하는 Linux 전원 관리 기술입니다. C-상태와 마찬가지로 이는 네트워크 연결에서 원치 않는 지연을 일으킬 수 있습니다.
cpupower 도구는 CPU 성능 기본값과 제한을 확인하고 수정하는 데에도 사용할 수 있습니다.

  • 확인: cpupower 모니터 또는
  • CPU를 성능 모드로 설정: cpupower frequency-set -g performance

메모
CPU 주파수 한도를 수정하면 많은 작업 부하에 영향을 미칠 수 있으며 CPU 터보 모드와 같은 다른 기능이 비활성화될 수도 있습니다.
CPU 주파수 확장을 비활성화하려면 다음 명령을 사용하여 CPU 전원 서비스를 비활성화하세요.
systemctl stop cpupower.service
systemctl cpupower.service를 비활성화합니다.
5.2.4 추가 전원 관리 지침
이 고급 수준에서는 추가 세부 정보가 제공됩니다.view 3세대 Intel® Xeon® 확장 가능 프로세서의 다양한 전원 관리 기능과 이러한 기능을 플랫폼 수준에서 통합하는 방법에 대한 지침: https://networkbuilders.intel.com/solutionslibrary/power-management-technologyoverview-technology-guide
5.3 인텔® 터보 부스트
Intel® Turbo Boost는 필요할 때 프로세서를 더 빠르게 만들지만 추가 전력을 소모할 수 있습니다. Turbo Boost를 끄면 프로세서 속도가 일정하게 유지되어 특정 워크로드에 대해 일관된 성능 수준을 제공합니다.
5.4 방화벽
방화벽은 성능, 특히 지연 성능에 영향을 미칠 수 있습니다.
필요하지 않으면 iptables/firewalld를 비활성화합니다.
5.5 애플리케이션 설정
종종 단일 스레드(단일 네트워크 대기열에 해당)로는 최대 대역폭을 달성하기에 충분하지 않습니다. AMD와 같은 일부 플랫폼 아키텍처는 Intel 기반 프로세서가 있는 플랫폼에 비해 단일 스레드로 더 많은 Rx 패킷을 삭제하는 경향이 있습니다.
taskset 또는 numactl과 같은 도구를 사용하여 애플리케이션을 NUMA 노드 또는 네트워크 장치의 로컬 CPU 코어에 고정하는 것을 고려하세요. 스토리지 I/O와 같은 일부 워크로드의 경우 애플리케이션을 비로컬 노드로 이동하면 이점이 있습니다.
가능하다면 애플리케이션에서 사용하는 스레드 수를 늘리는 것을 실험해 보세요.
5.6 커널 버전
대부분의 최신 인박스 커널은 성능에 대해 상당히 잘 최적화되어 있지만 사용 사례에 따라 커널을 업데이트하면 성능이 향상될 수 있습니다. 소스를 다운로드하면 커널을 빌드하기 전에 특정 기능을 활성화/비활성화할 수도 있습니다.
5.7 운영 체제/커널 설정
일반적인 운영 체제 튜닝에 대한 자세한 내용은 Red Hat Enterprise Linux 네트워크 성능 튜닝 가이드 등의 운영 체제 튜닝 가이드를 참조하세요.
튜닝할 몇 가지 일반적인 매개변수는 다음 표에 나와 있습니다. 이는 제안된 시작점일 뿐이며, 기본값에서 변경하면 시스템에서 사용되는 리소스가 증가할 수 있습니다. 값을 늘리면 성능을 개선하는 데 도움이 될 수 있지만, 주어진 시스템, 작업 부하 및 트래픽 유형에 가장 적합한 값을 결정하기 위해 다양한 값으로 실험해야 합니다.
커널 매개변수는 아래와 같이 Linux의 sysctl 유틸리티를 사용하여 구성할 수 있습니다.
에게 view 시스템의 rmem 및 wmem에 대한 기본값:
sysctl net.core.rmem_default
sysctl net.core.wmem_default
값을 최대(16MB)로 설정합니다.
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
소켓 버퍼 크기는 수신 버퍼(rmem) 및 전송 버퍼(wmem)라고도 하며, 들어오고 나가는 네트워크 트래픽을 위해 예약된 메모리 양을 지정하는 시스템 매개변수입니다.
-w 인수 없이 sysctl을 실행하면 매개변수와 현재 설정이 나열됩니다.

스택 설정 설명
net.core.rmem_default 기본 수신 창 크기
net.core.wmem_default 기본 전송 창 크기
net.core.rmem_max 최대 수신 창 크기
net.core.wmem_max 최대 전송 창 크기
net.core.optmem_max 최대 옵션 메모리 버퍼
net.core.netdev_max_backlog 커널이 삭제되기 전 처리되지 않은 패킷의 백로그
net.ipv4.tcp_rmem TCP 읽기 버퍼를 위한 메모리 예약기
net.ipv4.tcp_wmem TCP 전송 버퍼를 위한 메모리 예약

커널, 네트워크 스택, 메모리 핸들러, CPU 속도 및 전원 관리 매개변수는 네트워크 성능에 큰 영향을 미칠 수 있습니다. 일반적인 권장 사항은 네트워크 처리량 프로에 적용하는 것입니다.file tuned 명령을 사용합니다. 이것은 네트워킹 애플리케이션에 대한 선호도를 제공하기 위해 몇 가지 OS 설정을 수정합니다.
확인하다:
튜닝-adm 활성화
세트:
튜닝-adm 프로file 네트워크 처리량
5.8 네트워크 장치 백로그
이 기능은 들어오는 트래픽을 효과적으로 관리하고, 패킷 손실을 줄이고, 지연 시간을 줄이고, 처리량을 높여 네트워크 성능을 개선하는 데 도움이 됩니다. 이를 통해 더 나은 사용자 경험과 더 빠른 시스템 응답이 가능합니다.
기본적으로 대부분의 Linux 운영 체제에서 활성화되어 있습니다. 기본값을 확인하려면:
sysctl net.core.netdev_max_backlog
netdev_max_backlog의 최대값은 커널 버전, 하드웨어, 메모리, 워크로드 등의 요인에 따라 달라질 수 있습니다. 많은 경우 8192가 적절한 값으로 간주됩니다. sysctl -w net.core.netdev_max_backlog=8192
5.9 플랫폼별 구성 및 튜닝
5.9.1 4세대 Intel® Xeon® 확장 가능 프로세서

Intel® 4세대 Intel® Xeon® Scalable 프로세서의 전원 관리 기능은 3세대 Intel® Xeon® Scalable 프로세서에 비해 매우 공격적입니다. 코어가 저전력 상태로 전환되는 것을 방지하려면 사용 중인 코어 수를 줄여서 더 오래 깨어 있게 하세요.
최고의 성능을 위한 권장 BIOS 설정

  1. CPU에서 하이퍼스레딩을 활성화/비활성화합니다(작업 부하 요구 사항 및 성능 목표에 따라).
  2. 시스템 프로 설정file 최대의 성능을 위해 성능을 향상시킵니다.
    메모
    이로 인해 전력 소모가 증가합니다.
  3. 최대 CPU 성능을 전력 효율성보다 우선시하려면 CPU 전원 관리를 최대 성능으로 설정하세요.
  4. Turbo Boost를 활성화하세요. 시스템 BIOS 설정에서 Turbo Boost를 비활성화하면 일반적으로 CPU가 기본 주파수 이상으로 클럭 속도를 동적으로 증가시키는 것을 방지할 수 있습니다.
  5. 메모
    일관된 성능, 전력 효율성 또는 열 관리가 최대 성능보다 우선시되는 특정 사용 사례에서는 Turbo Boost를 비활성화하는 것이 적합할 수 있습니다.
  6. 시스템이 가상화 기술을 활용하지 않는 경우, SR-IOV(단일 루트 I/O 가상화) 기능을 끕니다.
  7. CPU가 활성 상태를 유지하고 더 깊은 유휴 상태에 들어가는 것을 방지하려면 C-상태를 비활성화합니다.
  8. C1E를 비활성화하여 CPU가 활성 상태를 유지하고 C1E 유휴 상태로 전환되지 않도록 합니다.
  9. 시스템이 사용 가능한 가장 높은 주파수에서 작동하도록 하려면 언코어 주파수를 최대로 설정합니다.
  10. Dell 플랫폼에서는 CPU 코어에 대한 명확하고 예측 가능한 매핑을 제공하기 위해 MADT(Multiple APIC Description Table) 코어 에뮬레이션을 선형(또는 BIOS에 따라 라운드 로빈)으로 설정합니다.

최적화된 성능을 위한 권장 OS 레벨 튜닝

  1. CPU 주파수 조정 관리자를 성능으로 설정합니다. cpupower frequency-set -g performance cpupower frequency-info
  2. C-States를 비활성화합니다. cpupower idle-set -D0
  3. 코어 Rx(rmem) 및 Tx(wmem) 버퍼를 최대값으로 설정합니다. sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216
  4. 네트워크 장치 백로그를 설정합니다. sysctl -w net.core.netdev_max_backlog=8192
  5. 튜닝된 프로 설정file (작업량은 처리량/대기 시간에 따라 달라짐).
    튜닝-adm 프로file 네트워크 처리량

최적화된 성능을 위한 권장 어댑터 수준 튜닝

  1. 애플리케이션 트래픽에 사용할 대기열 수를 제한합니다. 연결된 CPU 코어가 더 깊은 유휴 상태에 빠지지 않도록 활성 상태를 유지하는 데 필요한 최소 대기열 수를 사용하세요(워크로드에 따라 조정): ethtool -L 32개 결합
  2. 인터럽트 조절 속도를 설정합니다. ethtool -C 적응형 rx 꺼짐 적응형 tx 꺼짐 rx-usecs-high 50 rx-usecs 50 tx-usecs 50
    작업 부하에 대한 최적의 값을 찾으려면 전송/수신/우선순위가 높은 병합 타이머를 더 높게(80/100/150/200) 또는 더 낮게(25/20/10/5) 조정해보세요.
  3. Rx/Tx 링 크기를 설정합니다. ethtool -G rx 4096 tx 4096
    메모
    ethtool -S| grep drop 명령어를 실행했을 때 Rx 패킷이 손실되는 경우, 링 크기를 4096 미만으로 줄여 보세요. 패킷이 손실되지 않는 최적의 작업 부하 값을 찾아보세요.
  4. IRQ 선호도를 설정합니다. NIC에 로컬인 코어 또는 특정 코어 매핑을 사용합니다(여기서 코어 수는 1페이지의 26에서 설정한 대기열 수와 같습니다). systemctl stop irqbalance set_irq_affinity -X local 또는 set_irq_affinity -X

5.9.2 AMD 에픽
AMD EPYC 프로세서는 AMD의 Zen 아키텍처를 기반으로 서버 및 데이터센터용으로 개발된 강력한 CPU입니다. 아래 설정은 AMD 4세대 EPYC 시리즈의 설정입니다.
최고의 성능을 위한 권장 BIOS 설정

  1. 사용자 지정 모드를 활성화하면 사용자가 CPU 성능, 전력 소비량 및 기타 설정을 조정할 수 있습니다. 이를 통해 성능과 에너지 효율의 균형을 최적화하여 시스템을 미세 조정할 수 있습니다.
  2. 코어 성능 향상을 활성화하면 CPU가 자동으로 속도를 높여 더 집중적인 작업을 처리하고 전반적인 성능을 개선할 수 있습니다.
  3. CPU가 응답성을 유지할 수 있는 C-상태라고 하는 더 심층적인 절전 상태로 들어가는 것을 방지하기 위해 글로벌 C-상태 제어를 비활성화합니다.
    메모
    C-상태를 비활성화하면 전력 소비가 증가하고 열 온도가 상승할 수 있습니다. 두 가지 모두 작업 부하를 모니터링하세요.
  4. 작업 부하 요구 사항과 성능 목표에 따라 CPU에서 동시 멀티스레딩(SMT)을 활성화/비활성화합니다. SMT는 Intel CPU의 하이퍼스레딩과 동일합니다.
    메모
    최적화된 성능을 위해 권장되는 OS 및 어댑터 수준 튜닝에 대해서는 40페이지의 i13e 드라이버 설정 튜닝과 40페이지의 플랫폼 튜닝(i19e 비특정)을 참조하세요.

어댑터 본딩

Linux 본딩은 서버 환경에서 네트워크 성능, 중복성 및 장애 허용성을 크게 향상시킬 수 있는 강력한 기능입니다. 그러나 제대로 작동하려면 서버와 스위치 모두에서 호환되는 네트워크 하드웨어와 적절한 구성이 필요하다는 점에 유의하는 것이 중요합니다.
Linux의 본딩 드라이버는 여러 개의 물리적 네트워크 인터페이스를 본딩된 인터페이스로 집계할 수 있게 해줍니다. 이 본딩된 인터페이스는 운영 체제와 애플리케이션에 단일 가상 네트워크 인터페이스로 나타납니다.
메모
본드는 논리적 인터페이스이므로 본드 인터페이스에 직접 CPU 친화성을 설정할 수 없습니다(예:ample, bond0). 즉, 인터럽트 처리나 CPU 친화성을 직접 제어할 수 없습니다. CPU 친화성은 본드의 일부인 기본 인터페이스에 대해 구성되어야 합니다.
본딩은 다양한 작동 모드를 제공하며, 각각 고유한 특성을 가지고 있습니다.

방법  유형
0 라운드 로빈
1 활성 백업
2 XOR
3 방송
4 LACP
5 로드 밸런싱 전송
6 적응형 부하 분산

Linux에서 본딩을 만드는 방법은 여러 가지가 있습니다. 가장 일반적인 방법 중 하나는 네트워크 구성을 사용하는 것입니다. files (예:ample, /etc/network/ interfaces 또는 /etc/sysconfig/network-scripts/ifcfg-bondX).
네트워크 구성을 사용한 구성 Files
다음 단계는 네트워크 구성을 통한 본딩을 생성합니다. files.

  1. 본딩을 위해 두 개 이상의 NIC 포트를 선택합니다(예:ample, ethX 및 ethY)
  2. 오픈 NIC 구성 File필요한 NIC 인터페이스에 대한 /etc/sysconfig/network-scripts/ 아래의 s(예:ample, vi ifcfg-ethX 및 vi ifcfg-ethY)에 다음 텍스트를 추가합니다.
    MASTER=bondN [참고: N은 결합 번호를 나타내는 정수입니다.] SLAVE=yes
  3. 본드 네트워크 스크립트 생성 file vi /etc/sysconfig/networkscripts/ifcfg-bondN을 사용하여 다음 텍스트를 입력하세요.
    DEVICE=bondN [참고: N은 본드 번호를 나타내는 정수입니다.] ONBOOT=yes USERCTL=no BOOTPROTO=dhcp (또는) none
    IPADDR=200.20.2.4 [BOOTPROTO=none인 경우 필수] NETMASK=255.255.255.0 [BOOTPROTO=none인 경우 필수] NETWORK=200.20.2.0 [BOOTPROTO=none인 경우 필수] BROADCAST=200.20.2.255 [BOOTPROTO=none인 경우 필수] BONDING_OPTS=”mode=1 miimon=100″
    메모
    모드는 요구 사항에 따라 0에서 6까지의 정수가 될 수 있습니다.
  4. service network restart 또는 systemctl restart NetworkManager.service를 사용하여 네트워크 서비스를 다시 시작합니다.

성능 문제 해결

7.1 CPU 사용률
작업 부하가 실행되는 동안 코어별 CPU 사용률을 확인합니다.
코어당 사용률은 전체 CPU 사용률보다 성능과 더 밀접한 관련이 있습니다. 네트워크 대기열당 CPU 사용률을 보여주는 지표이기 때문입니다. 네트워크 트래픽을 실행하는 스레드가 몇 개뿐이라면 코어 사용률도 몇 개뿐일 수 있습니다. 하지만 코어 사용률이 100%라면 네트워크 처리량이 CPU 사용률에 의해 제한될 가능성이 높으므로 다음 작업을 수행해야 합니다.

  1. 인터럽트 조절에 자세히 설명된 대로 IRQ 조절/링 크기를 조정합니다.
  2. CPU 부하를 더 많은 코어로 분산하려면 애플리케이션 스레드 수를 늘리세요. 모든 코어가 100%로 실행 중이라면 애플리케이션이 네트워크보다는 CPU에 집중될 수 있습니다.

일반적으로 사용 가능한 도구:

  • 맨 위
    — 1을 눌러 CPU 목록을 확장하고 어떤 CPU가 사용 중인지 확인하세요.
    — 활용 수준을 주목하세요.
    — 어떤 프로세스가 가장 활성화되어 있는지(목록 맨 위) 살펴보세요.
  • mpstat
    다음 예ample 명령줄은 Red Hat Enterprise Linux 7.x에서 테스트되었습니다.
    코어당 CPU 사용률을 표시합니다(전체 유휴 백분율을 찾아 100에서 뺌). 80% 이상의 값은 빨간색으로 강조 표시합니다. mpstat -P ALL 1 1 | grep -v Average | tail -n +5 | head -n -1 | awk '{ print (100-$13)}' | egrep -color=always '[^\.][8-9][0-9][\.]?.*|^[8-9][0-9][\.]?.*| 100|' | column
  • perf top 사이클이 어디에 소모되는지 살펴보세요.

7.2 i40e 카운터
i40e 드라이버는 ethtool -S ethX 명령을 통해 인터페이스 디버깅 및 모니터링을 위한 다양한 카운터 목록을 제공합니다. 워크로드 실행 중 출력을 확인하거나 워크로드 실행 전후의 카운터 값을 비교하는 것이 유용할 수 있습니다.

  • i40e 카운터의 전체 덤프를 얻으려면: ethtool -S ethX
  • 0이 아닌 카운터만 보려면: watch -d (ethtool -S ethX) | egrep -v :\ XNUMX | column
    주의해야 할 사항:
  • rx_dropped는 CPU가 버퍼를 충분히 빠르게 처리하지 못하고 있음을 의미합니다.
  • port.rx_dropped는 슬롯/메모리/시스템에서 속도가 충분히 빠르지 않다는 것을 의미합니다.

7.3 네트워크 카운터
워크로드 실행 전/후에 netstat -s를 확인하세요.
Netstat는 시스템의 모든 네트워크 장치에서 네트워크 정보를 수집합니다. 따라서 테스트 중인 네트워크가 아닌 다른 네트워크의 영향을 받을 수 있습니다. netstat -s의 출력은 Linux 운영 체제 또는 커널의 성능 문제를 잘 나타낼 수 있습니다. 일반적인 운영 체제 튜닝에 대한 자세한 내용은 Red Hat Enterprise Linux Network Performance Tuning Guide와 같은 운영 체제 튜닝 가이드를 참조하세요.
7.4 시스템 로그
오류 및 경고에 대한 시스템 로그를 확인합니다(/var/log/messages, dmesg).
7.5 Intel svr-info 도구
Intel은 svr-info 도구를 제공합니다(참조 https://github.com/intel/svr-info) 서버에서 관련 하드웨어 및 소프트웨어 세부 정보를 캡처하는 Linux용 svr-info 출력은 시스템 병목 현상이나 워크로드에 최적화되지 않은 설정/튜닝을 파악하는 데 매우 유용합니다. 이더넷 관련 성능 문제에 대해 인텔에 지원 사례를 제출할 때는 svr-info 출력(텍스트)을 반드시 포함하십시오. file) 테스트 구성의 각 Linux 서버에 대해.

  1. svr-info를 다운로드하고 설치하세요:
    wget -qO- https://github.com/intel/svr-info/releases/latest/download/svrinfo.tgz| tar xvz cd svr-info
    ./svr-info
    > 호스트 이름.txt
  2. 출력을 수집합니다.
    ./svr-info > 호스트 이름.txt
  3. 텍스트(.txt) 하나를 첨부하세요 file 각 서버별로 Intel 지원 사례를 분석해 보세요.

일반적인 성능 시나리오에 대한 권장 사항

8.1 IP 전달

  • 커널을 업데이트합니다.
    최근 배포판 커널 중 일부는 보안을 위해 라우팅 캐시를 제거한 것을 시작으로 라우팅 코드의 커널 변경으로 인해 라우팅 성능이 저하되었습니다. 최근 배포판 외부 커널에는 이러한 변경으로 인한 성능 저하를 완화하는 패치가 포함되어 성능 향상을 제공할 수 있습니다.
  • 하이퍼스레딩(논리 코어)을 비활성화합니다.
  • 커널 부팅 매개변수를 편집합니다.
    — 가상화에 필요하지 않은 경우 커널 부팅 라인에서 iommu를 강제로 끕니다(intel_iommu=off 또는 iommu=off).
    — 전원 관리를 끕니다: processor.max_cstates=1 idle=poll pcie_aspm=off
  • 로컬 소켓의 코어 수와 같도록 대기열 수를 제한합니다(이 예제에서는 12개).amp르). ethtool -L ethX 결합 12
  • 로컬 소켓에만 핀 인터럽트를 설정합니다. set_irq_affinity -X local ethX 또는 set_irq_affinity -X local ethX
    메모
    작업 부하에 따라 -X 또는 -x를 사용할 수 있습니다.
  • 필요에 따라 Tx 및 Rx 링 크기를 변경하세요. 값이 클수록 리소스 사용량이 늘어나지만 전달 속도가 향상될 수 있습니다. ethtool -G ethX rx 4096 tx 4096
  • 라우팅 시 GRO를 비활성화합니다.
    알려진 커널 문제로 인해 라우팅/포워딩 시 GRO를 꺼야 합니다. ethtool -K ethX gro off 여기서 ethX는 수정할 이더넷 인터페이스입니다.
  • 적응형 인터럽트 조절을 비활성화하고 정적 값을 설정합니다. ethtool -C ethX adaptive-rx off adaptive-tx off ethtool -C ethX rx-usecs 64 tx-usecs 64

메모
프로세서 유형과 작업 부하에 따라 RX와 TX의 병합 매개변수를 조정하여 성능을 향상시키거나 프레임 손실을 줄일 수 있습니다.

  • 방화벽을 비활성화합니다. sudo systemctl disable firewalld sudo systemctl stop firewalld
  • IP 전달을 활성화합니다. sysctl -w net.ipv4.ip_forward=1
  • 수신 및 송신 소켓 버퍼 크기에 대한 최대값을 구성합니다. sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216

메모
작업 부하나 요구 사항에 따라 이러한 값은 기본값에서 변경될 수 있습니다.
8.2 낮은 지연 시간

  • 하이퍼스레딩(논리 코어)을 끕니다.
  • 네트워크 장치가 numa core 0에 로컬인지 확인하세요.
  • tasket -c 0을 사용하여 벤치마크를 코어 0에 고정합니다.
  • systemctl stop irqbalance 또는 systemctl disable irqbalance를 사용하여 irqbalance를 끕니다.
  • 코어에 분산하려면 친화성 스크립트를 실행하세요. 로컬 또는 전체를 시도해 보세요.
  • 인터럽트 조절을 끕니다. ethtool -C ethX rx-usecs 0 tx-usecs 0 adaptive-rx off adaptive-tx off rxusecs- high 0
  • 로컬 소켓의 코어 수와 동일하게 대기열 수를 제한합니다(이 예에서는 32개).amp르). ethtool -L ethX 결합 32
  • 로컬 소켓에만 핀 인터럽트를 적용합니다(i40e 드라이버 소스와 함께 제공되는 스크립트). set_irq_affinity -X local ethX
  • netperf -t TCP_RR, netperf -t UDP_RR 또는 NetPipe와 같은 확립된 벤치마크를 사용하세요. netperf -t TCP_RR 또는 netperf -t UDP_RR
  • 로컬 NUMA 노드의 단일 코어에 벤치마크를 고정합니다. taskset -c

인텔 ® 이더넷 700 시리즈
Linux 성능 튜닝 가이드
2024년 XNUMX월
문서 번호: 334019, 개정: 1.2

문서 / 리소스

Intel Ethernet 700 시리즈 Linux 성능 튜닝 [PDF 파일] 사용자 가이드
334019, 이더넷 700 시리즈 리눅스 성능 튜닝, 이더넷 700 시리즈, 리눅스 성능 튜닝, 성능 튜닝, 튜닝

참고문헌

댓글을 남겨주세요

이메일 주소는 공개되지 않습니다. 필수 항목은 표시되어 있습니다. *